DAX 实战套路(三)——同期环比与同比

同比与环比的问题大多数老师的视频中都有过讲解,但是现实应用中往往达不到我们想要的效果。我们理想中的同比环比效果是:当我们选择月份时,同比与去年同期相比,环比是与上月同期相比,而不是与去年全年或者上月全月相比。为了简化举例,我们用某公司上月与本月的销售明细来讲解这个问题。
file
注意这里9月份的销售数据只到2018年9月13日。我们先按照正常的解法来写度量值的公式求上月环比

销售额:=sum('销售表'[金额])
上个月销售额:=CALCULATE('销售表'[销售额],dateadd('2018年'[日期],-1,MONTH))
MOM%:=DIVIDE('销售表'[销售额]-'销售表'[上个月销售额],'销售表'[上个月销售额])

透视之后我们筛选掉干扰月份,主要来看9月的数据,
file
很明显这个数据是不合理的,因为9月才过了13天,与整个8月环比降低90%,这个数据肯定会挨批的,正常来说,我们应该与8月份前13天的销售额相比,所以我们要对上个月销售进行改造,

上月同期销售额:=CALCULATE('销售表'[销售额],dateadd(filter(values('2018年'[日期]),'2018年'[日期]<=max('销售表'[下单日期])),-1,MONTH))

我们用filter对日期表进行筛选,筛选日期小于最大事实表的日期。注意这里max是聚合函数,会根据外部筛选条件变化而变化,所以当外部筛选条件是9月的时候,filter选择9月1日至9月13日,然后对应向上偏移一个月。有的同学会问,如果公司有提前销售怎么办,此时max可以用today()来代替。因为dateadd函数第一参数只能是日期,而filter函数第一参数只能是表,所以需要用values函数将日期列转化为表。最终结果如下:
file

佐罗老师DAX实战课程链接:https://study.163.com/course/introduction/1006191059.htm?share=1&shareId=1144761414
限时送价值198 DAX基础课程(仅限本链接购买)和价值288会员模板,提供内部答疑群,购买后联系QQ:40733580