DAX函数FILTER致无前日销售数据行缺失,如何显示该行并赋值0?
解决DAX度量值跳过无前日销售数据行的问题
我懂你现在卡在哪了——当某一天没有前一日的销售记录时,对应的行直接被Power BI给隐藏了,而你希望这些日期能正常显示,并且把前日销售额设为0对吧?咱们来一步步搞定这个问题:
问题出在哪?
你当前的SumInRange度量值有两个小问题:一是当找不到前一日的销售数据时,会返回空白值,而Power BI默认会隐藏带空白值的行;二是原度量的写法绕了弯路,其实可以更简洁准确。
修改后的解决方案
我们需要做两件事:确保所有日期维度表中的日期都被计算,同时把空白的前日销售额替换成0。直接用下面的度量值替换你的SumInRange:
PreviousDaySales = VAR CurrentSelectedDate = SELECTEDVALUE('Dim Date'[Date]) VAR TargetPrevDate = CurrentSelectedDate - 1 -- 计算前一日的销售额,基于日期维度表关联事实表 VAR PrevDayTotal = CALCULATE( SUM('Table'[Sale]), -- 如果你的需求是单日最大销售额,把SUM换成MAX即可 'Dim Date'[Date] = TargetPrevDate ) -- 用COALESCE把空白值转成0 RETURN COALESCE(PrevDayTotal, 0)
另外,当日销售额的度量值可以直接写得更清晰:
CurrentDaySales = SUM('Table'[Sale])
为什么这么改?
- 锚定日期维度表:我们从
Dim Date(你的日期维度表)中取当前选中的日期,而不是事实表Table的日期,这样维度表里所有的日期都会被纳入计算,不会因为事实表没数据就被跳过。 - COALESCE补全空白:这个函数专门用来处理空白值——如果前一日没有销售额,
PrevDayTotal会返回空白,COALESCE就会把它替换成你想要的0。 - 简化销售额计算:原度量里的
SUMX(DISTINCT('Table'[Date]),CALCULATE(MAX('Table'[Sale])))其实只返回了单日的最大单笔销售额,而不是总销售额。如果你的需求是总销售额,用SUM更准确;要是确实需要最大单笔值,把SUM换成MAX就行。
验证效果
把这两个度量值加到表格视觉对象里,行字段选Dim Date[Date],你就能看到2019/8/1这类日期正常显示了——CurrentDaySales显示200,PreviousDaySales显示0,完全符合你的要求。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

