如何在Power BI日历表中填充测试间隔日期的对应代码?
Power BI 实现无测试日期沿用最近Code的DAX方案
已通过DAX创建Calendar表,与存储Grower、Orchard、ManagementArea测试结果的Maturity表通过Date/SampleDate建立1对多关系。现有度量值仅在有测试结果的日期显示对应Code,需求是让无测试结果的日期自动沿用最近一次测试的Code,直到新测试完成。此前尝试的MAX函数会导致所有后续日期填充最后一个Code,另写的DAX公式无输出,无法定位问题。
以下是两种可行的解决方法:
方法一:使用LASTNONBLANKVALUE
LastValidCode = VAR CurrentDate = MAX(Calendar[Date]) RETURN LASTNONBLANKVALUE( FILTER(ALL(Maturity[SampleDate]), Maturity[SampleDate] <= CurrentDate), CALCULATE(MAX(Maturity[Code])) )
- 逻辑:先获取当前上下文的日期,筛选出该日期及之前的所有测试日期,取最后一个有有效Code的结果。
方法二:结合CALCULATE与筛选上下文
LastValidCode_Alt = VAR CurrentDate = MAX(Calendar[Date]) VAR LastTestDate = CALCULATE( MAX(Maturity[SampleDate]), Maturity[SampleDate] <= CurrentDate ) RETURN CALCULATE( MAX(Maturity[Code]), Maturity[SampleDate] = LastTestDate )
- 逻辑:先定位当前日期之前的最后一次测试日期,再匹配该日期对应的Code。
注意事项
- 确保Calendar表的日期连续覆盖需要展示的全时间段
- 若涉及Grower、Orchard、ManagementArea等多维度筛选,需在视觉对象中添加这些字段,DAX会自动继承筛选上下文
- 若仍无输出,排查方向:
- 检查Calendar[Date]与Maturity[SampleDate]的关系是否正确激活,筛选方向是否符合需求
- 测试日期存在空值的话,可在筛选条件中添加
NOT(ISBLANK(Maturity[SampleDate]))过滤空值
内容的提问来源于stack exchange,提问作者tigzik
相关产品推荐
相关产品推荐

