--- title: "Custom Data Reports" slug: "custom-data-reports" description: "Unlock device-level insights with Custom Data Reports in HP WXP. Execute scripts, monitor progress, and export analytics for enhanced decision-making." tags: ["Custom Data Reports", "WXP", "Analytics"] updated: 2026-05-01T19:58:03Z published: 2026-05-01T23:00:00Z canonical: "learn.workforceexperience.hp.com/custom-data-reports" --- > ## Documentation Index > Fetch the complete documentation index at: https://learn.workforceexperience.hp.com/llms.txt > Use this file to discover all available pages before exploring further. # Custom Data Reports ## 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 ```plaintext 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 ![](https://cdn.us.document360.io/c9ecd56a-08d4-4e2f-ab71-60540f7ba8f3/Images/Documentation/image-WD0Z1WVW.png?sv=2026-02-06&spr=https&st=2026-11-05T02%3A51%3A29Z&se=2026-11-05T03%3A51%3A29Z&sr=c&sp=r&sig=qxfxATVjGe8DU%2BsHuBfMuYtCvRMiLIUfuLa6iZH%2FunM%3D) #### JSON Output Structure (Reporting Limitation) Reporting supports only a single-level JSON hierarchy. **Example of supported format:** ```plaintext { "BIOSVersion": "1.23.4", "ThinkCellEnabled": "True", "AIExtensionDetected": "Yes" } ``` **Example of unsupported format:** ```plaintext { "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. 1. Log in to WXP. The **Home** page is displayed 2. From the left menu of WXP, click **Analytics** > **Custom Data Reports**. The existing reports are displayed. 3. Click **Add**. The **Add report** page is displayed to select or upload a script for custom data collection. 4. Each script displays a **Description**, **Version**, and **Operation**. 1. The list is automatically filtered to show Evaluation scripts. 5. If parameters were defined, they are pre-populated and editable. 6. Choose the audience by selecting one or more groups. Scroll down to calculate the total number of devices in the selected audience. 1. The device count shows the number of unique devices across the groups selected. 2. If a device belongs to multiple groups, the script runs only once on that device. 7. Add a title and optional description for the report. 8. 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. > **Note: 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 The **Details** tab shows all devices defined in the audience, regardless of status. This tab is primarily used to troubleshoot devices that have a status other than Completed. This is the default sort order: 1. Error 2. In Progress 3. Not Processed 4. 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](https://developers.workforceexperience.hp.com/docs/v1/customdatareport). ### Contact Us For any assistance, [create a support case](https://learn.workforceexperience.hp.com/docs/creating-a-support-case) or email `support@wxp.hp.com`.