6. DAX 时间函数-- DATE 日期--FIRSTDATE \LASTDATE\DATESMTD\DATESQTD\DATESYTD

本文详细介绍了DAX中的时间函数,如FIRSTDATE、LASTDATE用于获取日期列的第一个和最后一个非空值,而DATESMTD、DATESQTD、DATESYTD则返回特定时间段内的所有日期。通过实例分析,作者揭示了这些函数在与CALCULATE配合时的行为特征和注意事项。
摘要由CSDN通过智能技术生成

函数名目的语法返回值
FIRSTDATE 返回指定日期列在当前上下文中的第一个非空日期。FIRSTDATE ( <日期列> )
表 包含具有日期值的单列和单行的表。
LASTDATE返回指定日期列在当前上下文中的最后一个非空日期。LASTDATE ( <日期列> )
表 包含具有日期值的单列和单行的表。
DATESMTD返回一个表,其中包含当前筛选上下文中该月份至今的所有日期。DATESMTD ( <日期列> )表 包含日期值的单列表
DATESQTD返回一个表,其中包含当前筛选上下文中该季度至今的所有日期。DATESQTD ( <日期列> )表 包含日期值的单列表
DATESYTD返回一个表,其中包含当前筛选上下文中该年份至今的所有日期。DATESYTD ( <日期列> , [年截止日期] )表 包含日期值的单列表

一:准备测试数据

我喜欢用数据说话,还是使用之前的测试数据,这套数据横跨 4 年,从 2024 年到 2026 年,每天都不停歇,最早日期是 2024-02-01,最晚日期是 2026-07-11,销售额第一天是 1,第二天是 2,依次到2026-07-11 是 892。

二: 实践出真知

 建议先看看前面几篇文章

3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物_dax date函数-CSDN博客

4. DAX 时间函数-- DATE 日期--START/END OF MONTH/QUARTER/YEAR-CSDN博客

5. DAX 时间函数-- DATE 日期--PREVIOUS/NEXT DAY/MONTH/QUARTER/YEAR-CSDN博客

1) FIRSTDATE 和 LASTDATE 函数
FIRSTDATE 返回指定日期列在当前上下文中的第一个非空日期。FIRSTDATE ( <日期列> )
表 包含具有日期值的单列和单行的表。
LASTDATE返回指定日期列在当前上下文中的最后一个非空日期。LASTDATE ( <日期列> )
表 包含具有日期值的单列和单行的表。

这两个函数很明显,一看就是配套使用。从微软的官方解释来看,也非常简单,我们试试到底是不是这样。

我们准备一下:

FIRSTDATE = FIRSTDATE('日期表'[Date])
LASTDATE = LASTDATE('日期表'[Date])
FIRSTDATE CAL = CALCULATE(SUM('测试数据'[销售额]),FIRSTDATE('日期表'[Date]))
LASTDATE CAL = CALCULATE(SUM('测试数据'[销售额]),LASTDATE('日期表'[Date]))

从上图可以看出,FIRSTDATE 、LASTDATE适用于单独找出上下文的日期值,如果和 CALCULATE 系列函数使用,那么它返回的其实是上下文中的所有非空值,而不是字面意思上的第一个、最后一个!

为了验证这一观念,我新写了一个度量指标,然后在过滤器上移动数值范围,可以验证我的观点。

SUM 销售额 = SUM('测试数据'[销售额]) 

2)DATESMTD、DATESQTD、DATESYTD
DATESMTD返回一个表,其中包含当前筛选上下文中该月份至今的所有日期。DATESMTD ( <日期列> )表 包含日期值的单列表
DATESQTD返回一个表,其中包含当前筛选上下文中该季度至今的所有日期。DATESQTD ( <日期列> )表 包含日期值的单列表
DATESYTD返回一个表,其中包含当前筛选上下文中该年份至今的所有日期。DATESYTD ( <日期列> , [年截止日期] )表 包含日期值的单列表

这三个函数说得很清楚,直接就是返回“表 包含日期值的单列表”。 

 我先试试创建新表,此刻是 2024-04-18,让我们看看结果。

DATESMTD 表 = DATESMTD('测试数据'[Date]) 
DATESQTD 表 = DATESQTD('测试数据'[Date]) 
DATESYTD 表 = DATESYTD('测试数据'[Date]) 

根据上面三个图,可以看出使用 DATESMTD、DATESQTD、DATESYTD 三个函数创建新表时候,是依次创建出该月份至今该季度至今该年至今的日期列表。但是请注意,所谓的该月份,是上下文数据中最靠后的数据,而不是当前数据!正确!

然后我们还可以配套 CALCULATE 使用:

DATESMTD = CALCULATE(SUM('测试数据'[销售额]),DATESMTD('测试数据'[Date]))
DATESQTD = CALCULATE(SUM('测试数据'[销售额]),DATESQTD('测试数据'[Date]))
DATESYTD = CALCULATE(SUM('测试数据'[销售额]),DATESYTD('测试数据'[Date]))

在移动过滤器时候,就会发现移动左值对结果是没有影响的,只有移动右值才有影响。这也进一步证明了前面的结论“使用 DATESMTD、DATESQTD、DATESYTD 三个函数创建新表时候,是依次创建出该月份至今该季度至今该年至今的日期列表。但是请注意,所谓的该月份,是上下文数据中最靠后的数据,而不是当前数据!

~~~~~~~~~~~~博客写得好累,为了攒分,请给个点评,哪怕一个赞字,谢谢同学!~~~~~~~~~

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值