Forum Discussion
Sparklines in matrix using switch
- Anonymous1 year ago
I mocked a simplified demo and made some testing. I found something interesting:
- when the SWITCH function returns any valid number (e.g. 100 or 0) as an alternate value, the sparklines can display correctly;
- when the SWITCH function returns blank value as the alternate value, it displays blank on all rows.
I haven't fixed why this happens. It seems there is some invisible filtering within the context that we don't know.
At the moment, at least as a workaround, you can modify the alternate value BLANK() into 0 to display the sparklines. And switch off Row subtotals in the matrix to hide the total row. You will get a result similar to below image.
Hope this would be helpful.
Best Regards,
Jing
If this post helps, please Accept it as Solution to help other members find it. Appreciate your Kudos! - 1 year ago
Hi SUMESHKUMAR22
According to the filter the sparks show only last 7 days, you can get the desired result with 2 steps :
1. Add the calculated column to the date table :last 7 days flag =var maxD = CALCULATE(max('Time_Period'[Day]),all('Time_Period'))var minD = maxD-6var check = if('Time_Period'[Day]>=minD && 'Time_Period'[Day]<=maxD,1,0)Return check2. Use this column in your original DAX code :
Selected_KPI_Value_Sparkline =VAR SelectedKPI = SELECTEDVALUE(KPI_Table[KPI Name])VAR Last_7_Days = DATESINPERIOD(Time_Period[Day], MAX(Time_Period[Day]), -7, DAY)
VAR Click =CALCULATE(COUNTROWS('VBI Vaccines'),'VBI Vaccines'[EVENT_NAME] = "Click_Delivered",Last_7_Days)
VAR Conversion = COALESCE(CALCULATE(COUNT('VBI Vaccines'[EVENT_NAME]),'VBI Vaccines'[EVENT_NAME] IN { "click-through" , "view-through" },Last_7_Days), 0)
VAR Impression =CALCULATE(COUNTROWS('VBI Vaccines'),'VBI Vaccines'[EVENT_NAME] = "Impression_Delivered",Last_7_Days)
VAR CTR = DIVIDE(Click, Impression, 0)
RETURNif(SELECTEDVALUE(Time_Period[last 7 days flag])=1, SWITCH(TRUE(),SelectedKPI = "Impressions", FORMAT(Impression, "0.00") * 1,SelectedKPI = "Clicks", FORMAT(Click, "0.00") * 1,SelectedKPI = "CTR %", FORMAT(CTR * 100, "0.00") * 1,SelectedKPI = "Conversion", FORMAT(Conversion, "0.00") * 1,0),BLANK())Result :
According to minimum/maximum labels, unfortunately, we don't have the functionality .
But you can use some workaround to show it after the spark like I did in the attached image :Or use a tooltip from the measure itself :
The pbixes are attached
If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly.
I mocked a simplified demo and made some testing. I found something interesting:
- when the SWITCH function returns any valid number (e.g. 100 or 0) as an alternate value, the sparklines can display correctly;
- when the SWITCH function returns blank value as the alternate value, it displays blank on all rows.
I haven't fixed why this happens. It seems there is some invisible filtering within the context that we don't know.
At the moment, at least as a workaround, you can modify the alternate value BLANK() into 0 to display the sparklines. And switch off Row subtotals in the matrix to hide the total row. You will get a result similar to below image.
Hope this would be helpful.
Best Regards,
Jing
If this post helps, please Accept it as Solution to help other members find it. Appreciate your Kudos!
Hi Anonymous ,
Kudos:), Thanks for this catch.
Unfortunately the same DAX is not working in my original file attached hereby even though the conditions are the same. Could you please help me in trouleshooting it?
File link: Test_Original
Thanks in advance!
- Anonymous1 year agoNot applicable
According to my understanding of your original measure, it is calculating the past 7 days' running total for a date (including the date) by using DATESINPERIOD. So, on the sparkline, it calculates the running total for every day on the x-axis.
Maybe you don't want the trend of past 7 days' running totals, but the trend of daily count values of the last 7 days? Can you use a normal line chart to show the results you want to achieve for Sparklines? An example of a KPI is sufficient.
From what I've learnt, if the current measure brings you the correct result and you want to display only the last 7 days' data points, a simple method is to filter Day column like below on the matrix visual.
Besides, currently it doesn't support to highlight the data labels of data points on sparklines.
Best Regards,
Jing- SUMESHKUMAR221 year agoHelper IV
Thanks for addressing the problem promptly.
Sorry! but if you look into the below measure its exactly calculating the last 7-days, infact the same calculation is used in your solution file as well , which is why the data label is coming correctly.
Not sure then why its unable to plot last 7 days in sparkline.Selected_KPI_Value_Sparkline =VAR SelectedKPI = SELECTEDVALUE(KPI_Table[KPI Name])VAR Last_7_Days = DATESINPERIOD(Time_Period[Day], MAX(Time_Period[Day]), -7, DAY)VAR Click =CALCULATE(COUNT('VBI Vaccines'[EVENT_NAME]),'VBI Vaccines'[EVENT_NAME] = "Click_Delivered",Last_7_Days)VAR Conversion = COALESCE(CALCULATE(COUNT('VBI Vaccines'[EVENT_NAME]),'VBI Vaccines'[EVENT_NAME] IN { "click-through" , "view-through" },Last_7_Days), 0)VAR Impression =CALCULATE(COUNT('VBI Vaccines'[EVENT_NAME]),'VBI Vaccines'[EVENT_NAME] = "Impression_Delivered",Last_7_Days)VAR CTR = DIVIDE(Click, Impression, 0)RETURNSWITCH(TRUE(),SelectedKPI = "Impressions", FORMAT(Impression, "0.00") * 1,SelectedKPI = "Clicks", FORMAT(Click, "0.00") * 1,SelectedKPI = "CTR %", FORMAT(CTR * 100, "0.00") * 1,SelectedKPI = "Conversion", FORMAT(Conversion, "0.00") * 1,0)VAR Conversion = COALESCE(CALCULATE(COUNT('VBI Vaccines'[EVENT_NAME]),'VBI Vaccines'[EVENT_NAME] IN { "click-through" , "view-through" },Last_7_Days), 0)VAR Impression =CALCULATE(COUNTROWS('VBI Vaccines'),'VBI Vaccines'[EVENT_NAME] = "Impression_Delivered",Last_7_Days)VAR CTR = DIVIDE(Click, Impression, 0)RETURNSWITCH(TRUE(),SelectedKPI = "Impressions", FORMAT(Impression, "0.00") * 1,SelectedKPI = "Clicks", FORMAT(Click, "0.00") * 1,SelectedKPI = "CTR %", FORMAT(CTR * 100, "0.00") * 1,SelectedKPI = "Conversion", FORMAT(Conversion, "0.00") * 1,0)
Thanks!