DAX报错求助:如何按行对比日期并返回符合逻辑的目标日期
DAX公式报错解决及需求实现方案
报错原因
你触发的错误是因为把计算列的逻辑写成了度量值:度量值运行在筛选上下文环境中,直接引用'tabell'[Datum]这类列时,当上下文包含多行数据,DAX无法确定要取该列的哪个值,必须通过聚合函数(如MAX、MIN)指定单个值,因此报错。
你的需求是为表中每一行返回对应结果,这更适合创建计算列,而非度量值。
正确实现方案
方案1:创建计算列(推荐,直接满足每行返回结果的需求)
Desired Value = VAR SelectedDate = SELECTEDVALUE(vwdatum[datum].[date], DATE(2022, 9, 1)) -- 第二个参数是默认选中日期,避免无筛选时返回空白 RETURN IF('tabell'[Datum] > SelectedDate, 'tabell'[Datum], SelectedDate)
这个公式会为tabell表的每一行计算出符合要求的日期:
- 若当前行
Datum晚于选中日期,返回该行日期 - 若更早,返回选中日期(无筛选时默认用2022-09-01)
方案2:用度量值实现(适合需在可视化中动态计算的场景)
如果必须用度量值(比如在报表可视化中按行展示),需要用迭代函数遍历每行数据,确保每行都有独立的计算上下文:
Desired Value Measure = VAR SelectedDate = SELECTEDVALUE(vwdatum[datum].[date], DATE(2022, 9, 1)) RETURN MAXX( 'tabell', IF('tabell'[Datum] > SelectedDate, 'tabell'[Datum], SelectedDate) )
在表格可视化中把'tabell'[Datum]拖入行区域,这个度量值会自动对应每行返回正确结果。
原公式错误分析
- 第一个公式:
MAX('tabell'[Datum], SELECTEDVALUE(...))——MAX函数的第一个参数是列时,必须用聚合形式(如MAX('tabell'[Datum])),直接引用列会因为多值报错 - 第二个公式:缺少右括号(语法错误),且在度量值中直接用
'tabell'[Datum]没有行上下文,无法确定单个值
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

