Powerbi DAX中的DATEADD函数存在问题
我最近开始学习DAX。我无法正确理解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
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现在非常清晰,我有数据仓库知识,可以与