HaloCRM Guides
Adding Dashboards to 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
How to create a custom tab for 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 figure 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
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:
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:
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 out 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 in Halo
- Creating a New Application for API Connections
- Creating Agents and Editing Agent Details
- Departments, Teams and Roles
- 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
- Suppliers