DAX中的DATEADD函数问题

时间:2016-09-24 17:40:39

标签: powerbi dax tabular ssas-tabular

我最近开始学习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 个答案:

答案 0 :(得分:10)

DATEADD函数采用包含日期作为第一个参数的,您传递的是表格,因此导致错误。即使您传递的是单列表,也与列不同。

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

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

您的此表名为MyDates

enter image description here

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

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

它返回:

enter image description here

正如您可以看到日期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中它需要一个明确的日期列作为第一个参数。

如果有帮助,请告诉我。

<强>参考文献:

DATEADD
FIRSTNONBLANK
FIRSTDATE
EDATE