Power BI之DAX神功:第2卷第11回 年初至今,季度初至今,月初至今
一、名詞解釋
YTD:當(dāng)年累計,Year To Date的簡寫
QTD:當(dāng)季度累計,Quarter To Date的簡寫
MTD:當(dāng)月累計,Month To Date的簡寫
二、表函數(shù) DATESYTD、DATESMTD、DATESQTD函數(shù)

【1】語法:年初至今
DATESYTD(日期,<上一年的截止日期>)
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"6-30")
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021/6/30")
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021-6-30")
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021年6月30日")
關(guān)于第2參數(shù)以上幾種寫法都對!返回一張表

當(dāng)你省略第2參數(shù)時,第二參數(shù)默認(rèn)是上一年的12月31日
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2020/12/31")
【新建表】年初至今 = DATESYTD('Sheet1'[日期])
以上兩個公式是等價的,返回一張表

Ps: 即便你寫成
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021/12/31")
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021-12-31")
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021年12月31日")
也等價于
【新建表】年初至今 = DATESYTD('Sheet1'[日期],"12-31")
【新建表】年初至今 = DATESYTD('Sheet1'[日期])
仍然返回這張表:

上一年是什么,不看你第二參數(shù)顯示的年份,而是由你表中最大日期所在的年決定的
第二參數(shù)中,DATESYTD函數(shù)只提取月份和日期。
【2】語法:月初至今與季初至今 (沒有第2參數(shù))
【新建表】月累計語法=DATESMTD(<日期>)
返回一張表

解釋:年和月由原表中最大日期決定,這個函數(shù)只是返回指定年和月的第一天到最后一天。
【新建表】季度累計語法=DATESQTD(<日期>)
返回一張表

解釋:年和月由原表中最大日期決定,這個函數(shù)只是返回指定年和季度的第一天到最后一天。
【3】優(yōu)化上節(jié)課案例

第一步:新建動態(tài)日期表,并建議關(guān)系(略)
日期表 = ADDCOLUMNS(?
CALENDAR(FIRSTDATE('Sheet1'[日期]),LASTDATE('Sheet1'[日期])),
"年", YEAR ( [Date] ),
"季度", ROUNDUP(MONTH([Date])/3,0),
"月", MONTH([Date]),
"周", weeknum([Date]),
"年季度", year([date]) & "Q" & ROUNDUP(MONTH([Date])/3,0),
"年月", year([Date]) * 100 + MONTH([Date]),
"年周", year([Date]) * 100 + weeknum([Date]),
"星期幾", WEEKDAY([Date])?
)
第二步:新建以下三個度量值
總銷售 = sum(Sheet1[銷售])?
度量值3 = calculate([總銷售],FILTER(all('日期表'),'日期表'[Date]<=max('日期表'[Date]) && '日期表'[年]=2021))
年初至今 = calculate([總銷售],DATESYTD('日期表'[Date]))

因為你并沒有指定是哪一年,它會對所有年每個月進行累積
年初至今 = calculate([總銷售],DATESYTD('日期表'[Date]),'日期表'[年]=2021)
Ps: 上節(jié)課沒有白聽吧?

關(guān)于季度初至今和月初至今,我在這里就不在重復(fù)講了。
《火力全開》筆記27課,向大家說過,這個函數(shù)是可以被替代的。
但是有一個更簡單的TOTAL系列函數(shù),可以代替? Calculate+DATESYTD這樣的組合
三、值函數(shù) TOTALYTD、TOTALMTD、TOTALQTD函數(shù)
【1】語法:年初至今=TOTALYTD(表達式或度量值,日期, 篩選器,上一年結(jié)束日期)
TOTAL年初至今 = TOTALYTD([總銷售],'日期表'[Date],'日期表'[年]=2021)

【2】語法:月初至今=TOTALMTD(表達式或度量值,日期, 篩選器)
【3】語法:季初至今=TOTALQTD(表達式或度量值,日期, 篩選器)
四、回答網(wǎng)友問題
問:使用MTD和QTD時,在矩陣上行標(biāo)題一定要用比更細的粒度顯示嗎?年>季度>月
答:老版本的PowerBI是這樣,現(xiàn)在的版本已經(jīng)解決這個問題了
【度量值】TOTAL月初至今1 = TOTALMTD([總銷售],'日期表'[Date],'日期表'[年]=2021)
【度量值】TOTAL月初至今2 = CALCULATE([總銷售],DATESMTD('日期表'[Date]),'日期表'[年]=2021)

如上圖所示,查看2021年每個商品月初至今的數(shù)據(jù),現(xiàn)在顯示的是A和B商品都是2021/12/1至2021/12/31日的累積
由于你并沒有指定是哪個月,所以行標(biāo)題增加月份條件時,會顯示所有月份月初至今

還是那句老話,不能死記硬背!你需要什么?就寫成什么!
例如:你只需要看AB商品2021年12月的月初至今,那就再加個條件唄
TOTAL月初至今1 = TOTALMTD([總銷售],'日期表'[Date],'日期表'[年]=2021 && '日期表'[月]=12)
TOTAL月初至今2 = CALCULATE([總銷售],DATESMTD('日期表'[Date]),'日期表'[年]=2021,'日期表'[月]=12)

PS: 使用切片器也可以
五、DATES系列和TOTAL系列建議使用哪個?
我沒有建議,《The Definitive Guide to DAX》推薦DATESYTD系列,而我本人使用DATES系列多一些,依個人喜好而定。

《孫興華講PowerBI火力全開》PowerBI必學(xué)課程
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