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

Power BI之DAX神功:第2卷第11回 年初至今,季度初至今,月初至今

2021-10-04 14:57 作者:孙兴华zz  | 我要投稿

一、名词解释

YTD:当年累计,Year To Date的简写

QTD:当季度累计,Quarter To Date的简写

MTD:当月累计,Month To Date的简写


二、表函数 DATESYTD、DATESMTD、DATESQTD函数

表名:Sheet1

【1】语法:年初至今

DATESYTD(日期,<上一年的截止日期>)

【新建表】年初至今 = DATESYTD('Sheet1'[日期],"6-30")

【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021/6/30")

【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021-6-30")

【新建表】年初至今 = DATESYTD('Sheet1'[日期],"2021年6月30日")

关于第2参数以上几种写法都对!返回一张表

当你省略第2参数时,第二参数默认是上一年的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'[日期])

仍然返回这张表:

上一年是什么,不看你第二参数显示的年份,而是由你表中最大日期所在的年决定的

第二参数中,DATESYTD函数只提取月份和日期。

【2】语法:月初至今与季初至今 (没有第2参数)

【新建表】月累计语法=DATESMTD(<日期>)

返回一张表

解释:年和月由原表中最大日期决定,这个函数只是返回指定年和月的第一天到最后一天。

【新建表】季度累计语法=DATESQTD(<日期>)

返回一张表

解释:年和月由原表中最大日期决定,这个函数只是返回指定年和季度的第一天到最后一天。

【3】优化上节课案例

第一步:新建动态日期表,并建议关系(略)

日期表 = 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: 上节课没有白听吧?

关于季度初至今和月初至今,我在这里就不在重复讲了。

《火力全开》笔记27课,向大家说过,这个函数是可以被替代的。

但是有一个更简单的TOTAL系列函数,可以代替  Calculate+DATESYTD这样的组合

三、值函数 TOTALYTD、TOTALMTD、TOTALQTD函数

【1】语法:年初至今=TOTALYTD(表达式或度量值,日期, 筛选器,上一年结束日期)

TOTAL年初至今 = TOTALYTD([总销售],'日期表'[Date],'日期表'[年]=2021)

【2】语法:月初至今=TOTALMTD(表达式或度量值,日期, 筛选器)

【3】语法:季初至今=TOTALQTD(表达式或度量值,日期, 筛选器)

四、回答网友问题

问:使用MTD和QTD时,在矩阵上行标题一定要用比更细的粒度显示吗?年>季度>月

答:老版本的PowerBI是这样,现在的版本已经解决这个问题了

【度量值】TOTAL月初至今1 = TOTALMTD([总销售],'日期表'[Date],'日期表'[年]=2021)

【度量值】TOTAL月初至今2 = CALCULATE([总销售],DATESMTD('日期表'[Date]),'日期表'[年]=2021)

如上图所示,查看2021年每个商品月初至今的数据,现在显示的是A和B商品都是2021/12/1至2021/12/31日的累积

由于你并没有指定是哪个月,所以行标题增加月份条件时,会显示所有月份月初至今

还是那句老话,不能死记硬背!你需要什么?就写成什么!

例如:你只需要看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必学课程

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神功:第2卷第11回 年初至今,季度初至今,月初至今的评论 (共 条)

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