首发于power系列

Power Pivot&Power BI不连续日期的日环比

焦棚子的文章目录

请点击下载附件

一、背景

这两天有朋友在交流,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焦棚子


焦棚子的文章目录

编辑于 2020-03-03 13:41