DAX中的DATEADD函数问题

Gok*_*kul 0 tabular dax ssas-tabular powerbi

我最近开始学习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.
Run Code Online (Sandbox Code Playgroud)

但它与EDATE合作

EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4)
Run Code Online (Sandbox Code Playgroud)

并且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.
Run Code Online (Sandbox Code Playgroud)

提前致谢.

ale*_*eta 12

DATEADD函数采用包含日期作为第一个参数的,您正在传递一个,从而导致错误.即使您传递单列表,它也不同于列.

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

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

你有这个表叫 MyDates

在此输入图像描述

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

4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)
Run Code Online (Sandbox Code Playgroud)

它返回:

在此输入图像描述

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

该方法DATEADD的工作原理是非常不同EDATE的方式.EDATE日期时间或文本格式获取日期(不是日期的表格列),并计算日期之前或之后的给定月数.

本质上,DATEADD期望一个日期表列作为第一个参数,作为大多数时间智能函数,它们被设计用于日期/日历表(日期维度).

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

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

参考文献:

DATEADD
FIRSTNONBLANK
FIRSTDATE
EDATE