DAX计算YTD报错:提供多值表但预期单值
解决DAX公式中“多值表预期单值”的错误
错误根源在于DISTINCT('Append'[Date Ref.EoMonth]):DISTINCT返回的是包含所有唯一值的表对象,但DATE函数参数、比较运算符>=/<=都需要单个标量值,当Date Ref.EoMonth列存在多个不同值时,就会触发报错。
以下分场景给出解决方案:
场景1:每行对应唯一基准日期(计算列场景)
如果Is YTD是计算列,且每行的Attribute - Date需要和当前行的Date Ref.EoMonth对比,直接去掉DISTINCT,使用列名本身即可:
Is YTD = IF ( 'Append'[Attribute - Date] >= DATE ( YEAR ( 'Append'[Date Ref.EoMonth] ), 1, 1 ) && 'Append'[Attribute - Date] <= 'Append'[Date Ref.EoMonth], "YTD", "Other" )
场景2:基于全局唯一基准日期(如最新月末日期)
如果所有行需要共用整个表中唯一的基准日期(比如取最大的Date Ref.EoMonth),用MAX提取单个标量值替代DISTINCT:
Is YTD = VAR GlobalRefDate = MAX('Append'[Date Ref.EoMonth]) VAR YTDStart = DATE(YEAR(GlobalRefDate), 1, 1) RETURN IF ( 'Append'[Attribute - Date] >= YTDStart && 'Append'[Attribute - Date] <= GlobalRefDate, "YTD", "Other" )
场景3:筛选上下文下的单值基准
如果Date Ref.EoMonth的唯一值由筛选上下文决定,可使用SELECTEDVALUE(适用于度量值或受筛选的计算场景),它会返回筛选后的单个值,多值时返回指定默认值:
Is YTD = VAR SelectedRefDate = SELECTEDVALUE('Append'[Date Ref.EoMonth], BLANK()) VAR YTDStart = DATE(YEAR(SelectedRefDate), 1, 1) RETURN IF ( NOT ISBLANK(SelectedRefDate) && 'Append'[Attribute - Date] >= YTDStart && 'Append'[Attribute - Date] <= SelectedRefDate, "YTD", "Other" )
内容的提问来源于stack exchange,提问作者Yolanda CB
相关产品推荐
相关产品推荐

