欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:答网友问12 为什么LastDate与Max结果不同

2021-11-11 13:38 作者:孙兴华zz  | 我要投稿

一、网友提问

二、理解FirstDate、LastDate函数与Min、Max函数的区别

表名:Sheet1

FirstDate返回首个日期的表、LastDate返回最后一个日期的表

《火力全开》笔记27.补充1 我们讲解了LastDate与Max的区别,FirstDate与Min同理,它们有各自不同的应用。

综上所述:

【度量值】总销售 = sum(Sheet1[销售])

【度量值】L销售 = CALCULATE([总销售],LASTDATE('Sheet1'[日期]))

// LASTDATE('Sheet1'[日期]) 返回最大日期的表

【度量值】M销售 = CALCULATE([总销售],FILTER('Sheet1','Sheet1'[日期]=max('Sheet1'[日期])))

// FILTER('Sheet1','Sheet1'[日期]=max('Sheet1'[日期])) 返回最大日期的表

// 《The Definitive Guide to DAX》中使用filter+ALL(列),在这个案例上与filter+表的结果是一样的,想了解具体原理请看:

Power BI之DAX神功番外篇:第1回 Calculate+ALL表 与 Filter+ALL表 是两个概念

https://www.bilibili.com/read/cv13590816

但是,你无法使用LASTDATE替换Max

【度量值】错误 = CALCULATE([总销售],FILTER('Sheet1','Sheet1'[日期]=LASTDATE('Sheet1'[日期])))

产生错误的原因:

          


这样的效果大家一眼就能看出,LastDate与FirstDate具有转换行上下文的功能。Max是聚合函数它返回一个值,但是套上Calculate后就将行上下文转换成了筛选上下文,LastDate与FirstDate本身就具备这个功能。

我们做“半累加计算”时,LastDate与FirstDate不能替换Max与Min函数

三、LastNonBlank与FirstNonBlank函数

详见《DAX神功》第2卷第14回 我们经过证明,当你的销售表中日期列日期不连续,但是你使用了日期表,你的日期表是连续的,假设你日期1月31日在销售表中不存在,但是日期表中有1月31日,那半累加计算时1月就显示为空。解决方案使用LastNonBlank函数或者直接使用销售表[日期列]。

我们在《火力全开》笔记15 中详细介绍了这两个函数:


表名:Sheet2

例1:返回Sheet2中第一个销售非空的日期

【新建表】

= FIRSTNONBLANK ( 'Sheet2'[日期], CALCULATE ( SUM ( 'Sheet2'[销售] ) ) )

例2:返回每人第一个不为空的销售

【度量值】

总销售=SUM ( 'Sheet2'[销售] )

销售 = CALCULATE ([总销售],FIRSTNONBLANK ( 'Sheet2'[日期], CALCULATE ( SUM ( 'Sheet2'[销售] ) ) ))

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110 

Power BI之DAX神功:答网友问12 为什么LastDate与Max结果不同的评论 (共 条)

分享到微博请遵守国家法律