从数据到信息
从信息到洞察

DATESYTD 和 TOTALYTD

计算累计有两类常用的时间智能函数,以 DATESYTD 为代表的返回日期值的表函数和以 TOTALYTD 为代表的返回标量值的函数。

DATESYTD

DATESYTD ( <Dates>, [<YearEndDate>] )

在当前上下文环境中,返回一张单列的日期表,其中包含当前年份到目前为止的所有日期。

参数 属性 描述
Dates 日期格式的列或返回单列的表达式,通常使用日期表的日期列
YearEndDate 可选 年截止日,日期字符串,忽略年
------------- 从 1 月 1 日开始计算的年累计销售额(默认) ---------------
Example1 = CALCULATE(SUM(Sales[SalesAmount]), DATESYTD(DateTime[DateKey])) 

------------- 从 7 月 1 日开始计算的年累计销售额 ---------------
Example2 = CALCULATE(SUM(Sales[SalesAmount]), DATESYTD(DateTime[DateKey],"6/30"))

从语义上,DATESYTD 等价于下面的表达式:

DATESBETWEEN (
    <Dates>, 
    STARTOFYEAR ( LASTDATE ( <Dates> ), [<YearEndDate>] ),
    LASTDATE ( <Dates> )
)

DATESYTD 类似的时间智能函数还有

  • 季度累计:DATESQTD
  • 月累计:DATESMTD

TOTALYTD

TOTALYTD ( <Expression>, <Dates>, [ <Filter>], [ <YearEndDate>] )

计算当前计值上下文中表达式的年初至今值,TOTALYTD 返回标量结果,是 CALCULATE+DATESYTD 的简化形式,语义更直观。

参数 属性 描述
Expression 需要计值的表达式
Dates 日期格式的列或由单个日期列构成的表,通常使用日期表的日期列
Filter 可选 布尔表达式或定义了筛选器的表表达式
YearEndDate 可选 年截止日
------------- 从 1 月 1 日开始计算的年累计销售额(默认) ---------------
Example1 = TOTALYTD(SUM(Sales[SalesAmount]), DateTime[DateKey])
------------- 从 7 月 1 日开始计算的年累计销售额 --------------- 
Example2 = TOTALYTD(SUM(Sales[SalesAmount]), DateTime[DateKey],"6/30")
------------- 从 7 月 1 日开始计算的年累计销售额,忽略来自日期表的其他筛选器 --------------- 
Example3 = TOTALYTD(SUM(Sales[SalesAmount]), DateTime[DateKey],ALL(DateTime),"6/30")

从语义上,TOTALYTD 等价于下面的表达式:

CALCULATE (
    <Expression>, 
    DATESYTD ( <Dates>, [<YearEndDate>] ),
    [<Filter>]
)

与 TOTALYTD 类似的时间智能函数还有

  • 季度累计:TOTALQTD
  • 月累计:TOTALMTD

使用基础函数重写 DATESYTD

你已经学习了计算月累计、季度累计和年累计的 DAX 函数,如果使用 TOTALYTD、TOTALQTDTOTALMTD 这些标量函数,它们的实现方式是通过调用 DATESYTD、DATESQTDDATESMTD 来确定日期筛选器,而每个筛选器函数都可以通过在 DAX 中编写 FILTER 语句实现类似的结果。

这种编写方式虽然并不常用,但对于理解时间智能函数的本质非常重要。而且,当你使用 DirectQuery 模式时,时间智能函数是不可用的,你必须使用基础函数来实现时间智能的计算逻辑。

例如,考虑下面这个 DATESYTD 函数

DATESYTD ( 'Date'[Date] )

它相当于在日期列上使用由 CALCULATETABLE 调用的 FILTER 筛选器,如以下代码所示:

本文隐藏内容查看价格为3G币,请先
单独购买的内容长期有效,不受时间限制(购买前先刷新当前页面)。加入VIP会员可享受全站权益,性价比更高。

12
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
4 评论数
8 被回复的评论
6 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
181****7536

高老师,我测试DATESYTD函数,怎么显示的是明年的1月1日到12月31日啊

Capture.PNG
成员
舒鹏

指定了天和月份的 DATESYTD 对应的 FILTER 版本写法只考虑了月份,没有考虑天。
我觉得同一个月份时,还需要 DAY ( MAX ( ‘Date'[Date] ) ) <= 天

成员
shi_chaofengcc

————- 从 7 月 1 日开始计算的年累计销售额 —————
Example2 = CALCULATE(SUM(Sales[SalesAmount]), DATESYTD(DateTime[DateKey],”6/30″))

上面应该是从1月1日开始计算到6月30日的年累计销售额吧

成员
warwick3518

有处笔误 月累计:TOTALYTD

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数