我們有一張活動表 和 一張銷售表
我們想實現如下的效果,當選擇某個活動時,顯示活動前后3天的銷售對比圖,如下:
實現方法:
1.新建一個表,用于顯示列:
2.新建一個度量值,用SELECTEDVALUE去獲取矩陣的"列",然后分別統計3天前和3天后的銷量
銷量 =
VAR campaignDate = SELECTEDVALUE('活動表'[時間])
VAR beginDate = campaignDate - 3
VAR endDate = campaignDate + 3RETURN SWITCH(SELECTEDVALUE('表'[ID]),1, CALCULATE(SUM('銷售表'[銷量]), '銷售表'[時間] <= beginDate),//3天前2, CALCULATE(SUM('銷售表'[銷量]), '銷售表'[時間] >= endDate), //3天后0
) + 0
3.分別放入矩陣
效果:
別著急離開,接下來我們增加些難度
我們可以發現,當選擇"活動1"時,產品C的前后3天銷量都是0,我們不想看到數據都為0的。怎么做呢?
我們新建一個度量值用于過濾:
filters =
IF([銷量]=0,"hidden","show")
然后讓矩陣只顯示 show的數據,結果所有的數據都不顯示了。
我們讓矩陣顯示一下這個filter的值:
發現原因了嗎?
雖然矩陣顯示了前后3天,共兩列,但其實只有一個度量值
只是被矩陣的"列"給分成了兩列。所以這里不能簡單粗暴的判斷 [銷量] =0
解決方法,首先修改度量值 [銷量]:,將第三種情況,變為前兩種情況的值的累加,可以理解為第三情況就是同時選擇了前3天和后3天
銷量 =
VAR campaignDate = SELECTEDVALUE('活動表'[時間])
VAR beginDate = campaignDate - 3
VAR endDate = campaignDate + 3RETURN SWITCH(SELECTEDVALUE('表'[ID]),1, CALCULATE(SUM('銷售表'[銷量]), '銷售表'[時間] <= beginDate),2, CALCULATE(SUM('銷售表'[銷量]), '銷售表'[時間] >= endDate),//修改第3種情況,變成以上兩種情況的累加CALCULATE(SUM('銷售表'[銷量]), '銷售表'[時間] <= beginDate || '銷售表'[時間] >= endDate)
) + 0
然后filter里去掉矩陣的“列”的影響,同時判斷前3天和后3天:
filters =
IF(CALCULATE([銷量],ALL('表'))=0,"hidden","show")
效果如下: