Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

We In Dashboard Configuration>Categories, we have added a date picker as a category object. 

...

...

We want this to be able to both filter and change the level of aggregation within our charts So when <7 day range is picked then it using this category object.

If we use the date picker to specify a <7 day range, the charts in our dashboard will show individual days,.

...

If we use the date picker to specify a > 7 < 32 it will group range, the charts in our dashboard will be grouped by weeks.

 

 

 

...

And when a period greater than 32 days it’ll group is specified, the charts will be grouped by months.

 

 

 

...

To Achieve this, (This this example is on a PosgresDB – but could be adapted for your own SQL dialect)

 

First created , first create a measure: 

...

 

It’s select statement contains a subquery which looks at the max and min reported dates returned in the users selected date period – we use the {{}}’s date pickers value [0] and [1] to get the full range in this sub select.

 

It returns the text either ‘Day’, ‘Week’ or ‘Month’ 

(SELECT

CASE

WHEN MAX(EVENTS_TIMESPAN."reportedAt")::date-MIN(EVENTS_TIMESPAN."reportedAt")::date < 7 THEN 'Day'

WHEN MAX(EVENTS_TIMESPAN."reportedAt")::date-MIN(EVENTS_TIMESPAN."reportedAt")::date < 32 THEN 'Week'

ELSE 'Month' END

FROM

public.event AS EVENTS_TIMESPAN

WHERE  EVENTS_TIMESPAN."reportedAt" BETWEEN '{{Date Filter[0]}}'

      AND '{{Date Filter[1]}}'

) 

The numbers is red – number can be changed , or could even be [[variabalized]] to be different for different tenants.

 

Then this This object is then referenced in our date dimension

 

...

It’s select clause looks like 

...

 

CASE

WHEN #~Max Days Between Reported~# = 'Month' THEN TO_CHAR(Event."reportedAt",'Mon YYYY')

WHEN #~Max Days Between Reported~# = 'Week' THEN  TO_CHAR(DATE_TRUNC('week',Event."reportedAt"),'dd Mon YYYY')

||' - '||

TO_CHAR(DATE_TRUNC('week',Event."reportedAt")+ '6 days'::interval,'dd Mon YYYY')

ELSE TO_CHAR(Event."reportedAt",'dd Mon YYYY')

END

 

This changes the level of aggregation depending on the outcome of the measure object.

 

It has an associated order by 

CASE

WHEN #~Max Days Between Reported~# = 'Month' THEN TO_CHAR(Event."reportedAt",'YYYY-MM')            WHEN #~Max Days Between Reported~# = 'Week' THEN  TO_CHAR(DATE_TRUNC('week',Event."reportedAt"),'YYYY-MM-DD')           

ELSE TO_CHAR(Event."reportedAt",'YYYY-MM-DD')

END