首页 文章

DAX中的DATEADD函数问题

提问于
浏览
0

我最近开始学习DAX . 我无法正确理解DATEADD功能 . Blow表达式给出了错误 .

DATEADD(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4,MONTH)
A table expression containing more than one column was specified in the call to function 'DATEADD'. This is not supported.

但它与EDATE合作

EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4)

并且FIRSTDATE不像FIRSTNONBLANK那样工作,DATATABLE使用有问题吗?请让我知道我错过了什么 .

FIRSTDATE(DATATABLE("Today1",DATETIME,{{"9/24/2016"}}))
A table expression containing more than one column was specified in the call to function 'FIRSTDATE'. This is not supported.

提前致谢 .

1 回答

  • 8

    DATEADD 函数采用包含日期作为第一个参数的 column ,您传递 table 以便导致错误 . 即使您传递单列表,它也不同于列 .

    注意 FIRSTNONBLANKFIRSTDATE 函数分别返回包含单个列和单行的 table ,其中包含计算的第一个值或日期,因此您将传递一个表 .

    即使您将一行中的一行传递给 DATEADD 函数,它也不会抛出错误但不返回任何内容,因为 DATEADD 返回计算日期(如果它存在于列中),因此如果您有一个值,则不再返回日期 . 如果您不清楚,请考虑此示例以了解 DATEADD 如何工作:

    你有这个名为 MyDates 的表

    enter image description here

    如果使用 DATEADD 创建名为 4MonthsAfter 的计算列:

    4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)
    

    它返回:

    enter image description here

    正如您所看到的, 24/08/2016 日期的列 4MonthsAfter 为空,因为该列不包含 24/12/2016 值, 24/01/2017 也会发生相同的情况,因为没有 24/05/2017 值 . 但是 24/09/2016 计算后4个月,因为列中存在 24/01/2017 .

    DATEADD 的工作方式与 EDATE 方式有很大不同 . EDATE 以日期时间或文本格式获取 date (不是日期的表格列),并计算日期之前或之后的给定月数 .

    本质上, DATEADD 期望一个日期的表列作为第一个参数Time Intelligence functions的大多数,它们被设计用于Date/Calendar表(日期维度) .

    如果你来自编程背景,你可能会对 DATEADD 在DAX中的工作方式感到困惑 . 通常 DATEADD 只需要一个日期,间隔数和特定间隔(MONTH,DAY,YEAR,QUARTER)来计算日期,在DAX中它需要一个明确的日期列作为第一个参数 .

    如果这有帮助,请告诉我 .

    REFERENCES:

    DATEADD
    FIRSTNONBLANK
    FIRSTDATE
    EDATE

相关问题