Powerbi DAX中的DATEADD函数存在问题

Powerbi DAX中的DATEADD函数存在问题,powerbi,dax,tabular,ssas-tabular,Powerbi,Dax,Tabular,Ssas Tabular,我最近开始学习DAX。我无法正确理解DATEADD功能。下面的表达式给出了错误 DATEADD(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4,MONTH) 在对函数“DATEADD”的调用中指定了包含多个列的表表达式。这是不受支持的 但是它与EDATE一起工作 EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate&q

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

DATEADD(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4,MONTH)
在对函数“DATEADD”的调用中指定了包含多个列的表表达式。这是不受支持的

但是它与EDATE一起工作

EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4)
而且
FIRSTDATE
的工作方式与
FIRSTNONBLANK
不同。
DATATABLE
使用是否有问题

FIRSTDATE(DATATABLE("Today1",DATETIME,{{"9/24/2016"}}))
在对函数“FIRSTDATE”的调用中指定了包含多个列的表表达式。这是不受支持的


DATEADD
函数将包含日期的列作为第一个参数,您正在传递一个,从而导致错误。即使您传递的是一列表,它也与一列不同

注意
FIRSTNONBLANK
FIRSTDATE
函数返回一个,该表分别包含一列和一行计算出的第一个值或日期,因此传递一个表

即使将一列一行传递给
DATEADD
函数,它也不会抛出错误,但不会返回任何内容,因为
DATEADD
返回计算的日期(如果该日期存在于列中),因此如果有一个值,则没有更多的日期可返回。如果还不清楚,请考虑这个例子来理解<代码> DATEADOD/<代码>是如何工作的:

您有一个名为
MyDates

如果使用
DATEADD
创建名为
4个月后的计算列

4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)
它返回以下内容:

如您所见,日期
24/08/2016
4个月后的列
值为空,因为该列不包含
24/12/2016
值,2017年1月24日的
24
也是如此,因为没有
24/05/2017
值。但由于2017年1月24日
2017年1月24日
列中存在,因此计算了2016年9月24日
后的4个月

DATEADD
的工作方式与
EDATE
的工作方式大不相同
EDATE
以datetime或文本格式获取日期(不是日期表列),并计算日期前后的给定月数

本质上,
DATEADD
要求将日期表列作为大多数参数的第一个参数,这些参数设计用于处理表(日期维度)

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

让我知道这是否有帮助

参考文献:





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

注意
FIRSTNONBLANK
FIRSTDATE
函数返回一个,该表分别包含一列和一行计算出的第一个值或日期,因此传递一个表

即使将一列一行传递给
DATEADD
函数,它也不会抛出错误,但不会返回任何内容,因为
DATEADD
返回计算的日期(如果该日期存在于列中),因此如果有一个值,则没有更多的日期可返回。如果还不清楚,请考虑这个例子来理解<代码> DATEADOD/<代码>是如何工作的:

您有一个名为
MyDates

如果使用
DATEADD
创建名为
4个月后的计算列

4MonthsAfter = DATEADD(MyDates[Date],4,MONTH)
它返回以下内容:

如您所见,日期
24/08/2016
4个月后的列
值为空,因为该列不包含
24/12/2016
值,2017年1月24日的
24
也是如此,因为没有
24/05/2017
值。但由于2017年1月24日
2017年1月24日
列中存在,因此计算了2016年9月24日
后的4个月

DATEADD
的工作方式与
EDATE
的工作方式大不相同
EDATE
以datetime或文本格式获取日期(不是日期表列),并计算日期前后的给定月数

本质上,
DATEADD
要求将日期表列作为大多数参数的第一个参数,这些参数设计用于处理表(日期维度)

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

让我知道这是否有帮助

参考文献:





非常感谢,DATEADD非常清晰。现在,我有数据仓库知识,可以与DateDimension相关。我认为这就是DATEADD被放在时间智能函数下而不是日期时间函数下的原因:)这是第三个表达式不工作的原因吗,因为我们传递的是表而不是列?但如果是这种情况,FIRSTNONBLANK也不应该工作,是吗?@Gokul,
FIRSTNONBLANK
FirstParameter可以是对列、表(您要传递的内容)的引用,也可以是定义单列表的布尔表达式。所以FIRSTNONBLANK应该可以工作,但是它返回一个表,当DATEADD函数按照前面的解释进行计算时会导致错误。非常感谢,DATEADD现在非常清晰,我有数据仓库知识,可以与