Introduction
Custom Data Reports in the Analytics module of HP Workforce Experience platform (WXP) enable customers to collect device-level data that is not available through the standard WXP Insights agent. Users upload PowerShell scripts (packaged in JSON format), execute them across selected device groups, and generate structured analytics reports within WXP.
This feature supports:
Script-based evaluation data retrieval
Custom Data Report creation (maximum 10 per tenant)
Real-time progress monitoring
Clickable KPI dashboard
Excel (XLS) export capabilities
Device-level drilldowns
Prerequisites and Access
Subscription Requirements
Customers must have one of the following subscriptions:
WXP Pro Trial
WXP Pro
WXP Elite
Role-Based Access (RBAC)
Users with the following roles can run scripts and create or view Custom Data Reports:
IT Admin
Partner Service Specialist
Partner Admin (authorized and non-authorized onboarded)
These roles have full access to the feature.
Users with the following roles can view Custom Data Reports but cannot run scripts:
HP Support Admin
Report Admin
For these roles, the Cancel and Restart options are not available. They can download eligible reports but cannot initiate or cancel jobs. All other roles do not have access to this feature.
For Partner roles, a customer tenant must be selected before functionality becomes available.
Actions performed within the Custom Data Reports feature are retained in audit logs.
Script Requirements and Data Handling
Script Format
Script output must be generated in JSON format. The script file defines:
Script metadata
Execution properties
Optional parameters
Expected output schema
The order in which data is displayed in the report
PowerShell is used for execution, but the uploaded artifact must follow the defined JSON wrapper format.
Example
Sample script for reference, to get OS and device information:
sample script for reference:
#Requires -Version 5.1
function Try-Get { param([ScriptBlock]$Block) try { & $Block } catch { $null } }
function Round2 { param([double]$n) return [math]::Round($n, 2) }
# --- Collect Data ---
$os = Try-Get { Get-CimInstance Win32_OperatingSystem }
$comp = Try-Get { Get-CimInstance Win32_ComputerSystem }
$bios = Try-Get { Get-CimInstance Win32_BIOS }
$cpu = Try-Get { Get-CimInstance Win32_Processor | Select-Object -First 1 }
$hostname = $env:COMPUTERNAME
$osName = if ($os) { $os.Caption } else { $null }
$osBuild = Try-Get { (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').CurrentBuild }
$mfgr = if ($comp) { $comp.Manufacturer } else { $null }
$model = if ($comp) { $comp.Model } else { $null }
$cpuName = if ($cpu) { $cpu.Name } else { $null }
$ramTotalGB = if ($comp) { Round2($comp.TotalPhysicalMemory / 1GB) } else { $null }
$systemType = if ($comp) { $comp.SystemType } else { $null }
# --- OS Install Date (robust: WMI first, registry fallback) ---
$osInstall = $null
# Try WMI DMTF date
if ($os -and $os.InstallDate -and $os.InstallDate.Length -ge 8) {
try {
$osInstall = [Management.ManagementDateTimeConverter]::ToDateTime($os.InstallDate).ToString('yyyy-MM-dd')
} catch { $osInstall = $null }
}
# Fallback: registry InstallDate (Unix epoch seconds)
if (-not $osInstall) {
try {
$reg = Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
if ($reg.InstallDate -and [int]$reg.InstallDate -gt 0) {
$epoch = [datetime]'1970-01-01T00:00:00Z'
$osInstall = ($epoch.AddSeconds([int]$reg.InstallDate)).ToLocalTime().ToString('yyyy-MM-dd')
}
} catch { }
}
# --- Last patch info (non-admin) ---
$lastPatch = $null
$patches = Try-Get { Get-HotFix }
if ($patches) {
$latest = $patches | Sort-Object -Property InstalledOn -Descending | Select-Object -First 1
if ($latest) { $lastPatch = '{0} on {1}' -f $latest.HotFixID, ($latest.InstalledOn.ToString('yyyy-MM-dd')) }
}
# --- Build JSON Object (10 fields) ---
$payload = [pscustomobject]@{
Hostname = $hostname
OSName = $osName
OSBuild = $osBuild
Manufacturer = $mfgr
Model = $model
CPUName = $cpuName
RAMTotalGB = $ramTotalGB
SystemType = $systemType
OSInstallDate = $osInstall
LastPatch = $lastPatch
}
Sample Report

JSON Output Structure (Reporting Limitation)
Reporting supports only a single-level JSON hierarchy.
Example of supported format:
{
"BIOSVersion": "1.23.4",
"ThinkCellEnabled": "True",
"AIExtensionDetected": "Yes"
}
Example of unsupported format:
{
"Device": {
"BIOS": {
"Version": "1.23.4"
}
}
}
If nested structures are returned, the data does not render in structured columns. Instead, it appears under StdOut.
Note:
URL handling: URLs are accepted in script output. URLs appear as clickable links in reporting views where applicable.
Translation handling: Data is displayed in the same format returned by the script without translation or modification.
Date and time handling: Date and time values returned as part of the script output are displayed exactly as returned. They are not converted or normalized to any timezone. This ensures raw script fidelity without backend transformation.
Creating a Custom Data Report
Follow these steps to retrieve device data that is not available through standard WXP Insights telemetry.
Log in to WXP. The Home page is displayed
From the left menu of WXP, click Analytics > Custom Data Reports. The existing reports are displayed.
Click Add. The Add report page is displayed to select or upload a script for custom data collection.
Each script displays a Description, Version, and Operation.
The list is automatically filtered to show Evaluation scripts.
If parameters were defined, they are pre-populated and editable.
Choose the audience by selecting one or more groups. Scroll down to calculate the total number of devices in the selected audience.
The device count shows the number of unique devices across the groups selected.
If a device belongs to multiple groups, the script runs only once on that device.
Add a title and optional description for the report.
Publish the script.
Tenant Limit: A tenant can have up to 10 Custom Data Reports. To create an eleventh report, at least one existing report must be deleted. Any user with report viewing permissions can access all Custom Data Reports within the tenant, regardless of who created them.
Custom Data Reports List Table
The following columns are displayed:
Report Name and Description
Created By
Created On
Overall Status
In Progress
Completed (maximum 24 hours after script execution start)
Expired
Cancelled
Export
Delete
The following validation rules apply:
Bulk deletion is not allowed.
Bulk export is not allowed.
A report with status “In Progress” cannot be deleted.
Reports with status Completed, Cancelled, or Expired can be deleted.
Reports with status In Progress, Completed, or Cancelled can be downloaded.
Expired reports cannot be downloaded.
Privacy and Security
IT Admin (First Use Per Tenant)
When an IT Admin creates a Custom Data Report for the first time within a tenant, they must accept the terms. This confirmation is shown only once and only to the first IT Admin in that tenant. Subsequent IT Admins are not prompted.
Partner Admin or Service Specialist
When creating a Custom Data Report on behalf of a customer, the user must accept the terms once per customer tenant. The acceptable is tracker per tenant.
Viewing and Monitoring a Custom Data Report
Each Custom Data Report displays the following:
Report name and description
Script name (linked)
Audience definition
Total number of devices
Start date and time
Completion date and time
Expiry date
Report status
In Progress
Completed
Canceled
Expired
Download option
Delete option (if eligible)
Note: The script runs one time. It does not run continuously or on a recurring schedule. However, users can run it whenever required.
Progress Bar
The progress bar shows the following:
Completed devices
Errored devices
Not Processed devices
Total audience
Cancelling a Report
You can cancel a report only when the status is In Progress. Upon cancellation:
The status updates to Cancelled.
The Report page displays the user who cancelled and the time of cancellation.
The Restart option appears shortly after.
Restarting a Report
You can restart a report that is in the following statuses:
Completed
Canceled
Expired
Behavior:
Restarts on all original devices.
Historical data is deleted.
Script, parameters, and audience cannot be modified.
Audience may differ if group membership has changed.
Expiry Rules
A Custom Data Report expires 11 days after script execution start (24-hour completion window plus 10 days retention) or 10 days after all devices show Completed or Errored status if under 24 hours.
If the report is canceled, it expires 10 days after cancellation.
The expired reports:
Cannot be downloaded.
Data is removed from device pages.
Viewing Published Custom Data Report
Clickable KPIs on the Report
KPIs are displayed based on device status:
In Progress
Completed
Errored
Not Processed
Behavior:
KPIs are not affected by table filtering.
Clicking a KPI applies a table filter.
Multi-select KPI filters are allowed.
Filters retained per tab until removed.
Filters do not transfer between Content and Details tabs.
Viewing the Content Tab
The Content tab shows only devices with Completed status.
The default sort is based on the Serial Number.
The following columns are displayed.
Device Serial Number (linked to respective device details page)
Device Name
One column per data element
Changes propagate to device details page
Output (StdOut)
Start Time
If no data is returned, message displayed directing user to the Details tab.
Viewing the Details Tab
This is the default sort order:
Error
In Progress
Not Processed
Completed
The following columns are displayed:
Device Serial Number
Device Name
Last Signed-In User
Script Exit Code
Output (link to StdOut or Error view)
Exporting a Custom Data Report
Users can export filtered results to an Excel (XLS) file, which includes two tabs:
Content
Details
You can export reports in the following statuses:
In Progress
Completed
Cancelled
Note: Exports not available for Expired reports.
Accessing Device Details Page
You can open the corresponding Device Details page by clicking any Serial Number listed in the Content or Details tab of the Custom Data Report. This provides a convenient way to view all custom data collected for that device in a centralized location, making troubleshooting more efficient.
The Custom Data tab includes:
Link to Custom Data Report
Each captured data element and value
Report expiration date
Status
Script Name
Script Exit Code
Output link
Download XLS option
The expired data is not visible.
Note: For completed, canceled, or expired reports:
If the script is deleted or all groups are deleted, the call-to-action displayed is Create.
If the script and at least one group still exist, the call-to-action displayed is Restart.
Leveraging the Custom Data Report API
For additional information, refer to our Developer Portal documentation on APIs that allow customers to query custom data reports: https://developers.workforceexperience.hp.com/docs/v1/customdatareport
Contact Us
For any assistance, create a support case or email support@wxp.hp.com.