我最近开始学习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.
提前致谢。
答案 0 :(得分:10)
DATEADD
函数采用包含日期作为第一个参数的列,您传递的是表格,因此导致错误。即使您传递的是单列表,也与列不同。
注意FIRSTNONBLANK
和FIRSTDATE
函数返回一个表,其中包含单个列和单行,分别带有计算出的第一个值或日期,因此您传递的是表。 / p>
即使您将一行一行传递给DATEADD
函数,它也不会抛出错误,但如果DATEADD
返回计算日期(如果它存在于列中),则不返回任何内容,因此,如果您有一个值,则不再有日期返回。如果您不清楚,请考虑此示例以了解DATEADD
的工作原理:
您的此表名为MyDates
如果您使用DATEADD
创建名为4MonthsAfter
的计算列:
4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)
它返回:
正如您可以看到日期4MonthsAfter
值的列24/08/2016
为空,因为该列不包含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中它需要一个明确的日期列作为第一个参数。
如果有帮助,请告诉我。
<强>参考文献:强>