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,它也不同于一列。
注意 FIRSTNONBLANK
和 FIRSTDATE
函数 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中它需要一个明确的日期列作为第一个参数。
如果有帮助请告诉我。
参考资料:
我最近开始学习 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,它也不同于一列。
注意 FIRSTNONBLANK
和 FIRSTDATE
函数 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中它需要一个明确的日期列作为第一个参数。
如果有帮助请告诉我。
参考资料: