我们有一张活动表 和 一张销售表
我们想实现如下的效果,当选择某个活动时,显示活动前后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")
效果如下: