• Skip to primary navigation
  • Skip to main content
  • Skip to footer
  • Skip to custom navigation
HaloPSA

HaloPSA

  • Features
  • Pricing
  • Integrations
  • Resources
    • Demo On Demand
    • Roadmap
    • ITIL Alignment
    • Guides
    • HaloPSA Academy
    • Onboarding Partners
    • Distributors
  • Compare Us
    • ConnectWise
    • Datto Autotask
  • Solutions
    • I Need To…
      • Run My Business More Effectively

        Find out which customers and services are profitable and gain the confidence to act on this data.

      • Improve My Customer Experience

        Make all interactions as smooth as possible with a fully thought out end to end experience for your customers.

      • Streamline My Sales Process

        Remove unnecessary processes from your sales and account management and let them focus on their customer relationships.

      • Gain Control Of My Projects

        Visualise your workload and forecast your required budgets to ensure you can deliver on your projects.

    • We Are A…
      • Managed Service Provider
      • Telecommunications Provider
      • Cloud Solution Provider
      • Software Company
      • Consultancy Firm
    • Case Studies
      • nGeneration
      • Centrality
      • Commercial Managed IT
  • Start trial
  • Book demo

HaloPSA Guides

Documentation to assist with the setup and configuration of the HaloPSA platform

Guides > Adding Dashboards to Custom Tabs

Adding Dashboards to Custom Tabs


In this guide we will cover:

- Creating a Custom Tab that displays a Dashboard

- Filtering the dashboard to only show data for the customer/user/site it is under



Associated Administrator Guide:

  • Custom Tabs

The following entities can have a custom tab against them containing a dashboard:

  • Tickets
  • Customers
  • Sites
  • Users
  • Contract
  • Sales Orders 
  • Purchase Orders
  • Quotes
  • Invoices


Creating a Custom Tab that displays a Dashboard 

Head to Configuration > Custom Objects > Custom Tabs > select an entity > New > Details tab, set the 'Type' field to 'Dashboard'. Now you will have the option to configure the dashboard that displays under this tab.


Fig 1. Custom tab setup for dashboard


For the customer, site and user entities, once saved, this tab will appear against the entity you have created it for. For example, if you have created it against customers, this tab will appear under all your customer profiles. However, if you create it against tickets you will need to enable this tab against the ticket types you would like it to appear on. 


To do this head to Configuration > Tickets > Ticket Types > select a ticket type you would like the tab on > Allowed Values > Custom Tabs section.


Here you have the option to 'Allow all Custom Tabs', if enabled will show all the custom tabs you have created for tickets. If you do not allow all custom tabs, you can add the allowed tabs into the table below, only tabs in this table will appear on this ticket type. 


Fig 2. Allowed custom tabs against a ticket type


How to Configure the Dashboard

We can now configure the dashboard that will appear under this tab. To do this, hit 'Configure Dashboard' within the custom tab setup, this will bring up the dashboard configuration screen. Here you can either configure your dashboard from scratch, or import an existing one. 


Import an existing dashboard

To do this head to Configuration > Reporting > Dashboards > select the dashboard you would like to copy. Once within the dashboard setup, select 'Export to JSON' this will download the JSON for the dashboard to your device as a .txt file. Open this up and copy the JSON.


Fig 3. Export a dashboard to JSON


Now, head back to the dashboard configuration within your custom tab and select 'Import from JSON'. A text box will appear and you will be prompted to input your JSON, paste the JSON we copied earlier. Hit save and you can see all the dashboard widgets have carried over.


Fig 4. Import JSON to a dashboard


It is important to note that you cannot import the JSON of a dashboard if the dashboard has a filter against it. This is because dashboard filters cannot be configured against dashboards within custom tabs. You can see if a dashboard has a filter applied by looking at the filter table under the details tab of the dashboard.


Fig 5. Filter against dashboard


If you receive the error shown in Fig 6 when importing the dashboard, this indicates that the dashboard you are importing has a filter against it. You will either need to remove the filter criteria from the JSON, or remove the filter from the dashboard, export the JSON then add the filter back in. 


Fig 6. Import Error, An error occurred while saving the entity changes. See the inner exception for details.


Create New Dashboard

If the dashboard that you would like to appear under the custom tab has not yet been created, you can configure this within the custom tab. To do this, select 'Configure Dashboard' while within the custom tab, head to layout tab. Here you can add/edit widgets in the same way you would on a normal dashboard. For more information on creating dashboards/widgets see our guide here.


Filtering the dashboard to only show data for the customer/user/site it is under

If you are using reports that show data across various customers/sites/users in your dashboard you may want to filter the data that appears for a specific entity.


Activity feed widgets will automatically filter and only show data for the customer/user/site you are viewing.


Ticket list and ticket list counter widgets will also automatically filter the data for the customer/user/site you are viewing.


Report data and counters on the dashboard will need to be filtered on the source report.


Worked Example 1

I have a revenue and profit report that I would like to be visible on a dashboard, under a custom tab, under each of my customers. However, the report shows revenue and cost for all my customers, when viewing the dashboard, I would like it to only show revenue and cost for the customer that I am currently viewing. See appendix, figure 1A, for report script. 


To do this, I will need to apply a filter to the report that the dashboard widget is coming from, using a variable for the customer. I will add the following to the report:


where aarea = $clientid


This will filter the report so that it only shows results where the customer in the report matches the customer I am currently viewing. Note that this filter requires the customer ID (aarea) to be obtained from the report, this means your data source will need to include the customer ID, or you will need to join a table onto your data source that does. 


When you preview the report it will only show the data for your organisation as you are not 'viewing' a customer yet. Once the report is applied to a widget, in a dashboard, within a custom tab, the results will filter by the customer that the tab is under. 


Fig 7. Report on dashboard once filter applied


Worked Example 2

I have a report showing all feedback that users have left on tickets, I would like this to be visible on a dashboard under a custom tab against each of my users. However, the report shows feedback from all users, when viewing the dashboard I would like it to only show feedback that the user I am viewing has left. See appendix, figure 2A, for report script. 


To do this I will need to add the following query to my report:


where userid = $userid


This will filter the report so that is only shows results where the user in the report matches the user I am currently viewing. 


If you have multiple widgets on your dashboard, you will need to ensure that all the reports the widgets are using have the desired filter within the script. Note that if you are using these reports for other areas where you would not like them to be filtered, you will need to create a copy of the report which does not have a filter applied in the script. This will ensure you have an original (unfiltered) version and a filtered version for the specific use on the dashboard. 


If you would like a more flexible way to filter reports and show reporting data under a custom tab of a customer/site/user you may benefit from using an Iframe within a custom tab. For more information on this see our guide here.



Appendix

Figure 1A- Customer overview revenue and Profit report

select aareadesc as [Customer]

,aarea as [IDCustomer],

ihid as [Invoice ID]

,(select fvalue from lookup where fid=28 and fcode=(select chbillingdescription from contractheader where chid=(select c.ihchid from invoiceheader c where INVOICEHEADER.IHrecurringInvoiceId=ihid))) as [Contract Ref]

,(select fvalue from lookup where fid=33 and fcode=acustomertype) as [Customer Type]

,sum(cast(IDNet_Amount as money)) as [Revenue]

,sum(cast(isnull(case when IDFaultid>0 then round(timetaken*ucostPrice,2) else IDUnit_Cost*IDQty_Order end,0) as money)) as [Cost]

,sum(cast(IDNet_Amount-(IDUnit_Cost*IDQty_Order) as money)) as [Profit]

,case when sum(cast(IDNet_Amount-(IDUnit_Cost*IDQty_Order) as money))>0 then 100 else 0 end as [Profitable Customer (100=yes, 0=no)]

from INVOICEHEADER

join invoicedetail on ihid=IdIHid

left join area on IHaarea=Aarea

left join actions on actions.faultid=IDFaultid and Whe_=IDLineActionDate

left join uname on whoagentid=Unum

where ihid>0

and IHInvoice_Date>@startdate 

and IHInvoice_Date<@enddate

and  aarea = $clientid



group by aareadesc,aarea,IHrecurringInvoiceId,acustomertype,ihid



Figure 2A- Feedback on tickets report

select

      faultid as [Ticket ID]

    , symptom as [Summary]

    , dateoccured as [Date/Time Logged]

    , convert(date,dateoccured) as [Date Logged]

    , convert(varchar, dateoccured, 8) as [Time Logged]

    , (select aareadesc from area where aarea=areaint) as [Organisation]

    , sdesc as [Site]

    , username as [User]

    , sectio_ as [Team]

    , seriousness as [Priority]

    , (select uname from uname where assignedtoint=unum) as [Assigned To]

    , stdesc as [Service]

    , category2 as [Category]

    , (select tstatusdesc from tstatus where status=tstatus) as [Status]

    , devicenumber as [Linked Asset]

    , flastactiondate as [Last Action]

    , CASE WHEN slastate='I' THEN 'Inside' WHEN slastate='O' THEN 'Outside' END as [SLA Compliance]

    , (select uname from uname where clearwhoint=unum) as [Resolved By]

    , datecleared as [Date/Time Resolved]

    , convert(date,datecleared) as [Date Resolved]

    , convert(varchar, datecleared, 8) as [Time Resolved]

    , round(fresponsetime,2) as [Response Time]

    , round(elapsedhrs,2) as [Fix Time] 

    , clearance as [Resolution Notes]

    , category3 as [Closure Code]

    , satisfactionlevel as [Feedback]

    , case when fbscore=1 then 'Excellent'

           when fbscore=2 then 'Good'

           when fbscore=3 then 'OK'

           when fbscore=4 then 'Poor' end as [Feedback Score]

    , satisfactioncomment as [Feedback Comment]

    , (select cdesc from company where supplier=cnum) as [Supplier]

    , suppref as [Supplier Ticket ID]

    , (select rtdesc from requesttype where rtid=requesttypenew) as [Type]

    , CASE 

    WHEN (SELECT useriousnesslevel FROM USERS WHERE userid = uid) = 2 THEN 1

    ELSE 0

      END as [VIP]

    , fFirstTimeFix as [First Time Fix]

from faults 

join site on site.ssitenum=faults.sitenumber

left join faultservice on fsfaultid = faultid

left join servsite on fsstid = stid

inner join feedback on fbfaultid = faultid

where

      fdeleted = 0

  and fmergedintofaultid = 0

  and requesttype in (1,3)

  and userid = $userid

Popular Guides

  • Asset Import - CSV/XLS/Spreadsheet Method
  • Call Management
  • Creating a New Application for API Connections
  • Creating Agents and Editing Agent Details
  • Departments and Teams
  • Halo Integrator
  • Importing Data
  • Multiple New Portals with different branding for one customer [Hosted]
  • NHServer Deprecation User Guide
  • Organisation Basics
  • Organising Teams of Agents
  • Step-by-Step Configuration Walk Through

Footer

Products

Company

  • Contact us
  • Events
  • Channel Partners
  • Technology Partners
  • Distributors
  • Referral Program

HaloPSA

  • Features
  • Integrations
  • Mobile Apps
  • Blog
  • Pricing

Key Features

  • Service Desk
  • Sales CRM
  • Billable Time Tracking
  • Reporting
  • Contracts
  • Billing
  • Stock Management
  • Projects

Compare PSA

  • ConnectWise
  • Datto Autotask
  • Accelo
  • Harmony PSA
  • Naverisk
  • Top Desk
  • Kaseya BMS
  • Atera
  • Freshservice

Social

  • Terms and Conditions
  • Privacy Policy
  • Security
  • GDPR
  • Modern Slavery Statement
We've moved!

Please visit our new website at USEHALO.COM/HALOPSA