Power BI之DAX神功:答網(wǎng)友問12 為什么LastDate與Max結(jié)果不同
一、網(wǎng)友提問

二、理解FirstDate、LastDate函數(shù)與Min、Max函數(shù)的區(qū)別

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

《火力全開》筆記27.補充1 我們講解了LastDate與Max的區(qū)別,F(xiàn)irstDate與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+表的結(jié)果是一樣的,想了解具體原理請看:
Power BI之DAX神功番外篇:第1回 Calculate+ALL表 與 Filter+ALL表 是兩個概念
https://www.bilibili.com/read/cv13590816
但是,你無法使用LASTDATE替換Max
【度量值】錯誤 = CALCULATE([總銷售],FILTER('Sheet1','Sheet1'[日期]=LASTDATE('Sheet1'[日期])))

產(chǎn)生錯誤的原因:

??????????


這樣的效果大家一眼就能看出,LastDate與FirstDate具有轉(zhuǎn)換行上下文的功能。Max是聚合函數(shù)它返回一個值,但是套上Calculate后就將行上下文轉(zhuǎn)換成了篩選上下文,LastDate與FirstDate本身就具備這個功能。
我們做“半累加計算”時,LastDate與FirstDate不能替換Max與Min函數(shù)
三、LastNonBlank與FirstNonBlank函數(shù)
詳見《DAX神功》第2卷第14回 我們經(jīng)過證明,當你的銷售表中日期列日期不連續(xù),但是你使用了日期表,你的日期表是連續(xù)的,假設你日期1月31日在銷售表中不存在,但是日期表中有1月31日,那半累加計算時1月就顯示為空。解決方案使用LastNonBlank函數(shù)或者直接使用銷售表[日期列]。
我們在《火力全開》筆記15 中詳細介紹了這兩個函數(shù):

例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函數(shù))、PowerQuery(M函數(shù))、Python辦公自動化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等
https://www.bilibili.com/read/cv10222110?