Documentation forSolarWinds Service Desk

Power BI dashboard

On this page

Introduction

To address challenges associated with using Power BI (PBI), SolarWinds developed customizable Power BI dashboard templates that can be easily integrated into your accounts. These templates cover most of the essential metrics, offering a ready-to-use solution.

Working with Power BI requires a certain level of expertise, and the platform may not be very user-friendly for those who are not familiar with it. Users may need to invest time in learning the tool to fully leverage its capabilities.

Overview

This topic provides an explanation for creators and stakeholders on how data is extracted from the SWSD custom connector and then transformed and loaded to Power BI.

The report template contains data for both tickets and assets.

Ticket overview Asset management

Prerequisite

SWSD JSON web token. Instructions are included below.

Setup

Two options for setup are available. You can use either one or both.

After the initial connection is complete, data populates to your dashboard. Because your JSON web token can be used for only 24 hours, if you want new data to display after 24 hours, you need to refresh your token. See Step 2: Enter your JSON web token and connect your data.

Set up the plug-and-play app

Step 1: Download and install

  1. Navigate to the Microsoft AppSource website for the SolarWinds Service Desk Dashboard.

  2. Click Get it now.

  3. Provide the email address you use to sign into SWSD.

    The app installs. An example dashboard is visible, but it does not contain your current data.

Step 2: Enter your JSON web token and connect your data

  1. Open the application and click Connect your data. You are prompted to enter a JSON Web Token.

  2. Login to your SolarWinds Service Desk account.

  3. Navigate to Setup > Users, and then click on your name to open your User details screen.

    • If you already have a JSON web token, click Show Token and then Copy.

    • If you don't already have a JSON web token, click Generate and then Copy.

  4. Enter the token into Power BI.

Your connection is established and current data displays.

Set up Power BI Desktop to customize dashboard

Using Power BI desktop, you can modify the widgets or add information to them.

  1. Ask your SolarWinds Service Desk Account Manager or Customer Service Manager for the template (pbix file).

  2. Click Home > Transform Data > Data Source Settings.

  3. Input your JSON web token generated from SWSD by clicking on data source SolarWinds Service Desk > Edit Permissions > Credentials > Edit.

  4. Click Save and OK, and then refresh the data to get the latest using the SWSD JSON web token.

After you have your data, you can save the report template by clicking on File > Save.

KPI metrics

The following KPI metrics are required to be shown on the dashboard.

Data category Scope KPI
Tickets

Monthly/yearly

  • CSAT Score %

    % difference from previous month

  • SLA Score %

    % difference from previous month

  • Mean time to resolve (MTTR)

    days difference from previous month

  • # Of Open tickets

    Average Open ticket age

  Trend data
  • Count of Tickets by Ticket type (Incident, Service request)

  • Weekly demand pressure by tickets resolved vs. tickets created

  • Monthly trend of tickets resolved vs. tickets created

  • Weekly trend of tickets created by category

  • Top 10 Category drivers

Assets Monthly/yearly
  • Total Count of Assets

  • % of Assets that are tagged as Operational

  • % of Assets that are tagged as Broken

  • Total Count of Assets by Manufacturer

  • Total Count of Assets by Year & their Category

  • Total Count of Asset by their type

  • Total Count of Asset by Site, Asset State, Category

Data refresh

Data refresh occurs every day automatically. You can also set up your own data refresh schedule.

If you have already connected to the Power BI Dashboard, old data displays until you refresh your JSON web token. See Set up the plug-and-play app.

Set up data refresh schedule

After the report is published on the Power BI service (web version), do the following:

  1. Go to the workspace, and then find your report and its corresponding semantic model.

  2. Click the ellipsis(…) option in Semantic model, and then click Settings.

  3. Scroll down until you see the Refresh section and click the right-facing arrow to expand Refresh

  4. Click Configure a refresh schedule, and then configure the timing of your refresh (for example, time zone and time) and the recipients of refresh failure notifications.

  5. Click Apply. The custom Refresh schedule is configured.

Data source

The current source of data used in the SolarWinds Service Desk Dashboard is:

Data source Description Reference
SolarWinds Custom Connector The SolarWinds Custom Connector imports ticket and asset records from SolarWinds Service Desk (SWSD). https://learn.microsoft.com/en-us/power-query/connectors/solarwinds-service-desk

Load the data to Power BI using the SolarWinds Connector

  1. Click Get data, then click More.

  2. In the search box, type SolarWinds Service Desk (Custom).

  3. Click connect. Your data is pulled and loaded into your Power BI report.

Data processing

Additional tables, measurements, and columns are added after data loads. This allows the gathering of data needed for the required metrics.

Tables

Name Description Formula
DimDate Date dimension table to connect all other tables (Incidents, Assets) DimDate = CALENDARAUTO()

Measurements

Name Description Formula
Assets Created Count of Assets created by their created_at date
Assets Created = CALCULATE(COUNT(Assets[custom_id]), USERELATIONSHIP(Assets[created_at],DimDate[Date]))
Average Open Ticket Age Computation of getting the average ticket age
Average Open Ticket Age = AVERAGEX(Incidents,'Incidents'[Ticket Age])
Broken Assets Computation on getting the % of assets that are tagged as Broken

Broken Assets = VAR Broken_assets = CALCULATE(COUNT(Assets[custom_id]), FILTER(Assets, Assets[asset_state]="Broken")) VAR Total_count = COUNT(Assets[custom_id]) RETURN DIVIDE(Broken_assets, Total_count)

CSAT MoM CSAT score versus the previous year (Month over month)

CSAT MOM = VAR _PREV = IF(NOT( ISBLANK( [CSAT SCORE] ) ) , CALCULATE( [CSAT SCORE] ,PREVIOUSMONTH(DIMDATE[DATE]) )) RETURN DIVIDE(([CSAT SCORE] - _PREV), _PREV)

CSAT Score Computation for CSAT score. This is count of tickets with customer satisfaction feedback of "Customer is satisfied" / total count of tickets

CSAT Score = VAR CSATCount = CALCULATE(COUNT(Incidents[number]), FILTER(Incidents, Incidents[customer_satisfied]= "Customer is satisfied")) VAR AllCount = CALCULATE(COUNT(Incidents[number]), FILTER(Incidents, Incidents[customer_satisfied]<> BLANK())) Return Divide(CSATCount,AllCount)

Operational Assets Computation on getting the % of assets that are tagged as Operational

Operational Assets = VAR Operational_assets = CALCULATE(COUNT(Assets[custom_id]), FILTER(Assets, Assets[asset_state]="Operational")) VAR Total_count = COUNT(Assets[custom_id]) RETURN DIVIDE(Operational_assets, Total_count)

SLA MoM Computation for SLA score versus the previous month (month over month)

SLA MoM = VAR SLA_LM = CALCULATE([SLA Rate],PREVIOUSMONTH(DimDate[Date])) RETURN CALCULATE([SLA Rate] - SLA_LM)

SLA Rate Computation of SLA score. This is count of resolved tickets - count of tickets with breached SLA / count of resolved tickets

SLA Rate = VAR Resolved_Count = COUNT(Incidents[resolved_at]) VAR Breached_SLA = COUNT(Incidents[sla_violations.sla_name]) RETURN DIVIDE((Resolved_Count-Breached_SLA),Resolved_Count)

Tickets Created Count of tickets created by their created_at date

Tickets Created = CALCULATE(COUNT(Incidents[number]), USERELATIONSHIP(Incidents[Date Created],DimDate[Date]))

Tickets Resolved Count of tickets resolved by their resolved_at date

Tickets Resolved = COUNT(Incidents[Date Resolved])

Todays Date To get the current date

Todays Date = TODAY()

TTR Formatted Translate the TTR computed to # of days, hours, minutes and seconds.

TTR (Formatted) = VAR TTRDay = INT([TTR Average]/( 24 * 60 * 60 )) VAR TTRHours = MOD( INT([TTR Average] / (60 * 60)),24) VAR TTRMin = MOD( INT ([TTR Average] / 60), 60) VAR TTRSec = MOD( [TTR Average], 60) RETURN TTRDay & "day(s)" & FORMAT( TTRHours, "#00" ) & ":" & FORMAT( TTRMin, "#00" ) & ":" & FORMAT( TTRSec, "#00" )

TTR Average Computation to get the average TTR

COMPUTATION TO GET THE AVERAGE TTR TTR AVERAGE = AVERAGEX(INCIDENTS,INCIDENTS[SWSD TTR (SECOND)])

TTR MoM Computation to get the TTR versus previous month (month over month)

TTR MoM = VAR _prev = IF(NOT( ISBLANK( [TTR Average] ) ) , CALCULATE( [TTR Average] ,PREVIOUSMONTH(DimDate[Date]) )) Return CALCULATE([TTR Average] - _prev)

TTR MoM(Formatted) Translate the TTR MoM computed to # of days, hours, minutes and seconds.
TTR MoM(Formatted) = 
VAR TTRDay = 
    INT([TTR MoM]/( 24 * 60 * 60 )) 
VAR TTRHours = 
    MOD( INT([TTR MoM] / (60 * 60)),24)
VAR TTRMin = 
    MOD( INT ([TTR MoM] / 60), 60)
VAR TTRSec = 
    MOD( [TTR MoM], 60)
RETURN
    TTRDay & "day(s)"
        & FORMAT( TTRHours, "#00" )
        & ":"
        & FORMAT( TTRMin, "#00" )
        & ":"
        & FORMAT( TTRSec, "#00" )

Columns

Name Description Formula
Date Created Get the created_at date
Date Created = Incidents[created_at].[Date]
Date Resolved Get the resolved_at date
Date Resolved = Incidents[resolved_at].[Date]
is_service_request (groups) Group the tickets by their type (Incident, Service Request

Incident - is_service_request = FALSE Service Request – is_service_request = TRUE

Last Updated Age Bracket Group the last updated age of tickets by days

Last Updated Age Bracket = SWITCH( TRUE(), 'Incidents'[Ticket Updated Age]<=15, "0 - 15 days", 'Incidents'[Ticket Updated Age]<=30, "16 - 30 days", 'Incidents'[Ticket Updated Age]<=60, "31 - 60 days", 'Incidents'[Ticket Updated Age]<=90, "61 - 90 days", "Over 90 days" )

Open Ticket Age Bracket Group the age of tickets by days

Open Ticket Age Bracket = SWITCH( TRUE(), Incidents[Ticket Age]<=15, "0 - 15 days", Incidents[Ticket Age]<=30, "16 - 30 days", Incidents[Ticket Age]<=60, "31 - 60 days", Incidents[Ticket Age]<=90, "61 - 90 days", "Over 90 days" )

State (groups) Group the ticket by their state

Closed • Closed • Resolved Open = all state except the above

SWSD TTR (second) Computation for getting the TTR (time to resolve). This is the time difference (in seconds) since the ticket was created until it was resolved, or closed.

SWSD TTR (second) = IF(OR(ISBLANK(Incidents[closed_at]),ISBLANK(Incidents[resolved_at])),BLANK(), DATEDIFF(Incidents[created_at],Incidents[resolved_at],SECOND))

Ticket Age Computation to get the age of ticket or how long it’s been opened.

Ticket Age = DATEDIFF('Incidents'[created_at], TODAY(),DAY)

Ticket Updated Age Computation to get the age of ticket since it's been last updated_at date

Ticket Updated Age = DATEDIFF(Incidents[updated_at].[Date], TODAY(),DAY)

Relationships

Dashboard

This section provides the information for piecing out and creating the dashboard template.

Ticket Overview

Section Number Type Value
1 Slicer Year
2 Slicer Month
3 Button Clear all filters applied
4 Card CSAT score & score vs previous month
5 Card SLA score & score vs previous month
6 Card MTTR & MTTR vs previous month
7 Card Count of open tickets & average open ticket age
8 Pie chart Ticket type
9 Line & clustered column chart Tickets created vs tickets resolved by week
10 Line chart Tickets created vs tickets resolved by year, month
11 Line chart Tickets created by category and week created
12 Treemap Count of tickets by top 10 categories
13 Text Date last refreshed

Demand pressure breakdown

This section provides an analysis of factors influencing the ticket demand pressure. It displays the trend of tickets created vs. resolved in a weekly manner and breaks down to categories.

Section Number Type Value
1 Chiclet slicer Ticket type
2 Chiclet slicer Ticket origin
3 Chiclet slicer Ticket status
4 Clustered bar chart Tickets created vs. tickets resolved by week
5 Table Category breakdown
6 Card Total tickets created
7 Card Total tickets resolved

Scorecard

This section displays KPI metrics from the overall team scorecard down to individual scorecards. This is mainly used to provide quick assessment of team/individual performance.

Section Number Type Value
1 Table Assignee name
2 Line chart CSAT trend
3 Line chart SLA trend
4 Line chart Resolved ticket trend
5 Pie chart Ticket type
6 Line chart Open ticket count since year created

Open ticket management

This section displays a comprehensive list of open tickets, including key details such as ticket number, status, updates, priority, and assigned team members. It can be filtered by length of time since the ticket was created or updated.

Section Number Type Value
1 Slicer Filter for open age ticket bracket
2 Slicer Filter for last updated age bracket
3 Bar chart Open ticket details
4 Table Open ticket details
5 Table Top category for open tickets
6 Table Top sub-category for open tickets
7 Card Total open tickets for the period selected

Asset management

This section displays a high-level summary of all assets, including key information such as their asset status, asset tag, category, owner, and other related information. It can be filtered by their asset status and year or month created.

Section Number Type Value
1 Slicer Asset type for hardware
2 Button Clear all filters applied
3 Chiclet slicer Filter for asset state
4 Chiclet slicer Filter for year
5 Chiclet slicer Filter for month
6 Card Count of assets
7 Card % of operational assets
8 Card % of broken assets
9 Funnel Count of assets by manufacturer
10 Pie chart Count of assets by type
11 Stacked area chart Count of assets created by category by year, month
12 Matrix Asset count by site, asset state, category
13 Table Asset details

Known limitations

Known limitations of the SolarWinds Connector report template are:

  • The custom connector can be refreshed once per day. If an error is encountered, contact your Customer Service Manager (CSM).
  • The fields that are imported are limited. To request that more fields be added, submit a feature request in THWACK.
  • Custom fields are not supported.
  • Incremental refresh is not supported in the web service.
  • Resolve groups are not implemented. Scorecard is currently by ticket analyst/assignee.
  • Mobile layout is not available.

Related topics

Power BI Connector