【问题标题】:Issue with DATEADD function in DAXDAX 中的 DATEADD 函数问题
【发布时间】:2016-09-24 17:40:38
【问题描述】:

我最近开始学习 DAX。我无法正常理解DATEADD 的功能。下面的表达式给出了错误。

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

在对函数“DATEADD”的调用中指定了包含多个列的表表达式。这不受支持。

但它适用于EDATE

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

并且FIRSTDATE 不像FIRSTNONBLANK 那样工作。 DATATABLE使用有问题吗?

FIRSTDATE(DATATABLE("Today1",DATETIME,{{"9/24/2016"}}))

在对函数“FIRSTDATE”的调用中指定了包含多个列的表表达式。这不受支持。

【问题讨论】:

    标签: powerbi dax tabular ssas-tabular


    【解决方案1】:

    DATEADD 函数将包含日期的 column 作为第一个参数,您传递的是 table,因此会导致错误。即使您传递的是单列表,它也不同于一列。

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

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

    你有这张表叫MyDates

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

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

    它返回这个:

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

    DATEADD 的工作方式与EDATE 的工作方式截然不同。 EDATE 采用日期时间或文本格式的日期(不是日期的表格列)并计算日期之前或之后的给定月数。

    本质上,DATEADD 需要一个日期表列作为大多数Time Intelligence functions 的第一个参数,它们旨在与Date/Calendar 表(日期维度)一起使用。

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

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

    参考:

    DATEADD
    FIRSTNONBLANK
    FIRSTDATE
    EDATE

    【讨论】:

    • 非常感谢,现在对 DATEADD 非常清楚,我有数据仓库知识并且可以与 DateDimension 相关。我认为这就是将 DATEADD 置于时间智能功能下而不是日期时间功能下的原因:)
    • 是不是因为我们传递的是表而不是列而导致第三个表达式不起作用?但如果是这样的话,FIRSTNONBLANK 也不应该起作用,不是吗?
    • @Gokul, FIRSTNONBLANK 第一个参数可以是对列的引用、table(您传递的内容)或定义单列的布尔表达式桌子。所以 FIRSTNONBLANK 应该可以工作,但是它返回一个表,当如前所述评估 DATEADD 函数时会导致错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多