请在文末下载附件
一、背景
这两天有朋友在交流,dax中使用时间智能函数写日环比,一个 dateadd 就可以了。但是有些业务不是每天都连续发生的,比如股票,周末就没数据,要环比上一个日期就不太好使了。诸如此类业务不连续的业务如何写日环比呢?
二、数据源
需求:
计算: test表中每天value与上一日期的变化百分比;
说明: 由于日期是非连续, 有空值;
例如: 2019/6/10需要取2019/6/6号的值做除法运算。
感谢Q友 AlbertYc 提供素材。
三、DAX
1、基础度量值total
total = SUM(Test[Value])
2、过程度量值previous_date,不连续日期的前一天,n可以控制前n天,实际操作不用写,案例演示需求写一下。
previous_date =
//计算不连续日期的前n天date
var n=1
var date1=max('Test'[Date])
var date2=filter(all('Test'[Date]),'Test'[Date]<date1)
var date3=topn(n,date2,'Test'[Date],DESC)
return
date3
3、过程度量值previous_date(同上2)
previous_total =
//计算不连续日期的前n天的值
var n=1
var date1=max('Test'[Date])
var date2=filter(all('Test'[Date]),'Test'[Date]<date1)
var date3=topn(n,date2,'Test'[Date],DESC)
var pt=calculate('calendar'[total],'calendar'[Date]=date3)
return
pt
4、最终需求日环比度量值previous_dod
previous_dod =
//计算不连续日期的前n天占比
var n=1
var date1=max('Test'[Date])
var date2=filter(all('Test'[Date]),'Test'[Date]<date1)
var date3=topn(n,date2,'Test'[Date],DESC)
var pt=calculate('calendar'[total],'calendar'[Date]=date3)
return
if(pt=BLANK(),BLANK(),divide('calendar'[total],pt)-1)
5、结果图
四、总结
1、世上本无时间智能函数,大家用多了特定需求才有了时间智能函数(笔者自娱,该用还得用);
2、万变不离其宗的业务需求转换为DAX上下文,有什么需求就构建什么上下文;
3、本案例中主要利用 TOPN ,虽然日期不连续,但是可排序。
by焦棚子
请点击【立即购买】或者【升级VIP】获得案例附件。
评论