· Aug 13, 2019

Dashboard - Line Graph


I want to create a dashboard with a line graph that shows system availability over time. I used this code to create a Dashboard:


            Set tItem = ##class(%DeepSee.UserLibrary.Link).%New()
                Set tItem.fullName = "Availability"
                Set tPage = "Availability.UI.CSVImport.zen"
                Set tItem.href = $system.CSP.GetPortalApp($namespace,tPage)_tPage
                Set tItem.title = "Availability"
                Set tSC = tItem.%Save()


I have a process in place that stores the data in a SQL table with three properties: 

CreatedDate, CreatedTime, and availabilityStatus (Boolean).

I have defined a BusinessMetric as follows:

Class AETMON.Availability Extends Ens.BusinessMetric

Property AvailabilityHistory As Ens.DataType.Metric(AUTOHISTORY = 50) [ MultiDimensional ];

Query MetricInstances() As %SQLQuery




Method OnCalculateMetrics() As %Status


Set tInstance=..%Instance

&SQL(SELECT availabilityStatus INTO :a FROM AETMON.AvailabilityLog WHERE ID=:tInstance)

Set ..AvailabilityHistory=a

Quit $$$OK


I am not sure if I need anything in OnGetInstances()

I am not sure what I need to update so I can see "AvailabilityHistory" on my dashboard.

Thanks for your help

Discussion (7)1
Log in or sign up to continue


Thank you for your comment. 

I am new to DeepSee and I do not know if I should created a cube for this. Or a Business Metric? Or just SQL Data??

Really I just need to show a report that can be printed or exported with start and end dates and times. I saw that Dashboards are easy to access from Management Portal compared to opening a DeepSee Report.

And I want to show a line graph.

Maybe a Zen report which I have not really done yet either.

I am not sure what to do ???

I have added the Business Metric to my production monitor. It works good. However it only shows the most recent data for Availability. I need to be able to allow user to choose dates and times and show Availability status for the selected time period. I am able to run SQL query and show the data on a CSP page. However I am lacking the line graph. I tried to set up a cube but it is not working as expected.

My persistent data is very simple class:

AETMON.AvailabilityLog Extends (%Persistent, %XML.Adaptor)

Property CreatedDate As %Date;

Property CreatedTime As %Time;

Property availabilityStatus As %Boolean;

Storage Default
<Data name="AvailabilityLogDefaultData">
<Value name="1">
<Value name="2">
<Value name="3">
<Value name="4">


I have properties for Date, Time, and boolean Status. My cube produced the class below:

Class AETMON.Cube.Availability Extends %DeepSee.CubeDefinition [ DependsOn = AETMON.AvailabilityLog, ProcedureBlock ]

/// Cube definition from Architect.
XData Cube [ XMLNamespace = "]
<cube xmlns=""Availability" displayName="Availability" disabled="false" abstract="false" sourceClass="AETMON.AvailabilityLog" countMeasureName="%COUNT" bucketSize="8" bitmapChunkInMemory="false" precompute="0" disableListingGroups="false">
  <dimension name="availabilityStatus" displayName="Status" disabled="false" hasAll="false" allCaption="All availabilityStatus" allDisplayName="availabilityStatus" type="data" calendar="gregorian" iKnowType="entity" hidden="false" showHierarchies="default">
    <hierarchy name="H1" disabled="false" hidden="false">
      <level name="availabilityStatus" displayName="Status" disabled="false" sourceProperty="availabilityStatus" list="false" useDisplayValue="true" useAsFilter="true" hidden="false">

Parameter DOMAIN;


When I try DeepSee Analyzer, I just see Working..., but no Count


I am trying Zen Report and Zen Page. I have Zen Page that displays a calendar to choose Date. I can display Zen Report inside iFrame when User clicks a button. It looks good EXCEPT my line graph shows no data values. I copy my Report class below. I hope someone will tell me what I am missing or what is wrong. This is my first Zen Report. Thanks

/// AETMON.Report
Class AETMON.Report Extends %ZEN.Report.reportPage

/// Class name of application this report belongs to.

/// Specifies the default display mode used for this report if
/// the URL parameter, <var>$MODE</var>, is not present.
Parameter DEFAULTMODE As STRING [ Constraint = ",html,tohtml,toxslfo,pdf,xml,xslfo,excel,toexcel,ps,pdfprint,xlsx,tiff,displayxlsx,fo2pdf,foandpdf", Flags = ENUM ] = "html";

/// This is the optional XML namespace used for the report.

Property Availability As %ZEN.Datatype.list(DELIMITER = ",");

Property AvaiDateTime As %ZEN.Datatype.list(DELIMITER = ",");

Property CreatedDate As %ZEN.Datatype.string(ZENURL = "CreatedDate");

/// This XML defines the logical contents of this report.
XData ReportDefinition [ XMLNamespace = "]
<report xmlns=""
 sql="SELECT ID, CreatedDate, CreatedTime, availabilityStatus FROM AETMON.AvailabilityLog WHERE CREATEDDATE=ORDER BY CreatedDate, CreatedTime">
<parameter expression='..CreatedDate'/>
<group name="CreatedDate" breakOnField="CreatedDate">
<attribute name="Date" field="CreatedDate" />
<group name="record">
<attribute name="id" field="ID" />
<attribute name="Time" field="CreatedTime" />
<attribute name="Status" field="availabilityStatus" />
<aggregate name="Count" type="SUM" field="availabilityStatus" />

/// This XML defines the display for this report.
/// This is used to generate the XSLT stylesheets for both HTML and XSL-FO.
XData ReportDisplay [ XMLNamespace = "]
<report xmlns=""
 name="Report" title="AET Availability Report">
<!-- Optional Init element inserts custom XSLT instructions at the top level of the generated XSLT stylesheet. -->
<init ></init>
<!-- Optional Document element specifies page layout and style characteristics. -->
<document width="8.5in" height="11in" marginLeft="1.25in" marginRight="1.25in" marginTop="1.0in" marginBottom="1.0in" ></document>
<!-- Optional Pageheader element. -->
<pageheader ></pageheader>
<!-- Optional Pagefooter element. Does not apply in HTML output. -->
<pagefooter ></pagefooter>
<!-- Required Body element. -->
<class="banner1">AET Availability Report</p>
height="400px" width="400px"
plotStyle="stroke-width: 1px;"
<yAxis minValue="0" maxValue="1" />
<group name="CreatedDate" line="1px">
<table orient="row" width="6in">
<item field="@Date" width="2in">
<caption value="Date:" width="2in"/>
<group name="record" line="1px">
<table orient="row" width="6in">
<item field="@Time" width="2in">
<caption value="Time:" width="2in"/>
<item field="@Status" >
<caption value="Status:"/>

Method getAxisTime(
Set tTime = $Piece(..AvaiDateTime,",",(val+1))
Quit $ZTime(tTime)

Method getchartdata(
ByRef var,
Do ##class(AETMON.Utility).DebugAETMON("AETMON.Report getchartdata")
Try {
Set sc = $System.Status.OK()
Set tTestDate = "08/06/2019"
Set pFrom = $ZDateH(tTestDate)
Set pTo = $ZDateH(tTestDate)
// Get a resultset containing Availability data
Set sc = ##class(AETMON.AvailabilityLog).GetAvailability(pFrom,pTo,.rs)
Set tCount = 0
While (rs.%Next()) {
Set var(tCount,0) = rs.%Get("availabilityStatus")
Set var(tCount,1) = rs.%Get("CreatedTime")
If $Increment(tCount)
Catch(ex) {
Set sc = ex.AsStatus()
Set tCreatedTimes = var(0,1) _ "," _ var(1,1)
Do ##class(AETMON.Utility).DebugAETMON("AETMON.Report getchartdata ..AvaiDateTime = "_tCreatedTimes)
Set ..AvaiDateTime = tCreatedTimes
Quit sc


When I add the Business Metric to a Dashboard or Production Monitor, I see the most recent data for the Business Metric. I need to be able to go back in time and show data for selected dates and times. I think a Pivot Table is what I need. I tried to define a Cube based on my persistent class, but it did not work as expected.