Power BI DAX中FILTER函数仅加载单列且不影响现有筛选的咨询
解决方案
可以实现,优化后计算逻辑和原有度量完全等价,不会影响现有筛选条件的生效。
优化思路
- 原有表达式性能差的核心原因是
FILTER函数迭代了AccountCommon整表,所有可见列都会被加载到内存参与计算,表数据量较大时会明显拖慢计算速度。 - 你可以将
FILTER的迭代对象替换为仅加载AccountCommon[AccountNumber]单列的结果,迭代过程仅需要处理这一列的数据,大幅降低内存占用。
优化代码
如果AccountCommon[AccountNumber]是表的唯一主键(无重复值),使用VALUES写法即可,性能最优:
Term Growth/Increase = CALCULATE( [Variance (Organic Loan)], FILTER( VALUES(AccountCommon[AccountNumber]), [Variance (Organic Loan)] > 0 ) )
如果AccountCommon[AccountNumber]存在重复值,需要完全对齐原逻辑的行级判断,可以用SELECTCOLUMNS返回保留所有行的单列,避免去重带来的计算差异:
Term Growth/Increase = CALCULATE( [Variance (Organic Loan)], FILTER( SELECTCOLUMNS(AccountCommon, "AccountNumber", AccountCommon[AccountNumber]), [Variance (Organic Loan)] > 0 ) )
逻辑一致性说明
两种写法的迭代对象都完全继承当前所有生效筛选条件,不会新增或移除任何筛选规则,每个迭代项对应的[Variance (Organic Loan)]计算结果和原有迭代整表时的结果完全一致,最终输出和原度量没有差异。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

