DAX技术求助:筛选表首个非空值失败及筛选上下文异常
DAX筛选上下文与FIRSTNONBLANKVALUE问题解决方案
问题1:FILTER使用度量值/SELECTEDVALUE返回空表
原代码:
FILTER( 'BDD Index', 'BDD Index'[Ordre TimeLine] = [Mesure 2 MAX orderLine] && 'BDD Index'[Bat] = SELECTEDVALUE('BDD Index'[Bat]) )
修复方案
核心问题是度量值与SELECTEDVALUE的计算上下文和FILTER的行上下文冲突,导致条件不匹配。先在全局选中上下文里计算好固定值,再传入FILTER:
VAR MaxOrderLine = CALCULATE([Mesure 2 MAX orderLine], ALLSELECTED('BDD Index')) VAR CurrentBat = SELECTEDVALUE('BDD Index'[Bat]) RETURN FILTER( ALLSELECTED('BDD Index'), 'BDD Index'[Ordre TimeLine] = MaxOrderLine && 'BDD Index'[Bat] = CurrentBat )
通过ALLSELECTED锁定当前筛选范围,提前计算出MaxOrderLine和CurrentBat,避免FILTER内部的行上下文干扰度量值计算逻辑。
问题2:FIRSTNONBLANKVALUE无法运行
原代码:
Mesure FNBV = FIRSTNONBLANKVALUE( 'BDD Index'[Date & Heure], FILTER( 'BDD Index', 'BDD Index'[Ordre TimeLine] = [Mesure 2 MAX orderLine] && 'BDD Index'[Bat] = SELECTEDVALUE('BDD Index'[Bat]) ) )
修复方案
FIRSTNONBLANKVALUE的第二个参数要求返回标量值,你传入的表表达式不符合语法要求。先筛选目标行,再取首个非空日期:
Mesure FNBV = VAR MaxOrderLine = CALCULATE([Mesure 2 MAX orderLine], ALLSELECTED('BDD Index')) VAR CurrentBat = SELECTEDVALUE('BDD Index'[Bat]) VAR FilteredRows = FILTER( ALLSELECTED('BDD Index'), 'BDD Index'[Ordre TimeLine] = MaxOrderLine && 'BDD Index'[Bat] = CurrentBat ) RETURN FIRSTNONBLANK( FilteredRows[Date & Heure], 1 )
先通过变量筛选出符合条件的行集合,再用FIRSTNONBLANK提取Date & Heure列的首个非空值,第二个参数填1即可满足“非空即返回”的逻辑。
问题3:IF度量值破坏筛选上下文(KEEPFILTER无效)
原代码:
Mesure TEST_ = IF( HASONEVALUE('BDD Index'[Bat]) && SELECTEDVALUE('BDD Index'[Ordre TimeLine]) = [Mesure 2 MAX orderLine], 1, 0 )
修复方案
SELECTEDVALUE在IF的上下文里容易被筛选覆盖,改用MAX直接取当前行上下文的Ordre TimeLine值,避免冲突:
Mesure TEST_ = VAR MaxOrderLine = [Mesure 2 MAX orderLine] RETURN IF( HASONEVALUE('BDD Index'[Bat]) && MAX('BDD Index'[Ordre TimeLine]) = MaxOrderLine, 1, 0 )
如果必须保留SELECTEDVALUE,可以用CALCULATE+KEEPFILTERS强制锁定原始筛选上下文:
Mesure TEST_ = VAR MaxOrderLine = CALCULATE([Mesure 2 MAX orderLine], ALLSELECTED('BDD Index')) RETURN IF( HASONEVALUE('BDD Index'[Bat]) && CALCULATE(SELECTEDVALUE('BDD Index'[Ordre TimeLine]), KEEPFILTERS('BDD Index')) = MaxOrderLine, 1, 0 )
内容的提问来源于stack exchange,提问作者steven
相关产品推荐
相关产品推荐

