DAX 中的 DATEADD 函数问题

Issue with DATEADD function in DAX

我最近开始学习 DAX。我无法正确理解 DATEADD 的功能。以下表达式出错。

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.

DATEADD 函数采用包含日期的 作为第一个参数,您传递的是 table 所以这是导致错误的原因。即使您传递的是一列 table,它也不同于一列。

注意 FIRSTNONBLANKFIRSTDATE 函数 return a table 包含单列和单行,首先计算值或日期,所以你传递的是 table.

即使您将一行一行的一列传递给 DATEADD 函数,它也不会抛出错误,但 return 不会抛出任何错误,因为 DATEADD returns date 如果它出现在列中,那么如果您有一个值,则没有更多日期到 return。如果您不清楚,请考虑此示例以了解 DATEADD 的工作原理:

你有这个 table 叫做 MyDates

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

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

它return是这样的:

如您所见,日期 24/08/2016 值的 4MonthsAfter 列为空,因为该列不包含 24/12/2016 值,24/01/2017 也是如此因为没有 24/05/2017 值。但是在计算 24/09/2016 后 4 个月,因为 24/01/2017 出现在列中。

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

本质上,DATEADD 期望 table 列日期作为大多数 Time Intelligence functions, which are designed to work with Date/Calendar tables(日期维度)的第一个参数。

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

如果有帮助请告诉我。

参考资料:

DATEADD
FIRSTNONBLANK
FIRSTDATE
EDATE