DAX函数ALLSELECTED嵌套ALLEXCEPT不被允许的替代方案咨询
核心问题说明
ALLSELECTED仅支持传入实体表或列作为参数,无法嵌套ALLEXCEPT这类返回虚拟表的表函数,你可以将两个需求的逻辑拆分实现,以下是两种可行方案:
方案1:ALLSELECTED + KEEPFILTERS组合(最常用)
该方案完全匹配你的需求,逻辑和你原本想要的ALLSELECTED(ALLEXCEPT())效果一致:
CALCULATE( [Revenue], DATESYTD(DATEADD('Date'[Date], -1, YEAR), "5/31"), ALLSELECTED(ClientType), KEEPFILTERS(VALUES(ClientType[FiscalYear])) )
逻辑说明:
ALLSELECTED(ClientType)清除当前查询上下文内所有对ClientType表的筛选,满足第一个需求KEEPFILTERS(VALUES(ClientType[FiscalYear]))保留外部上下文对ClientType[FiscalYear]的现有筛选,同时自动忽略ClientType表其他列的筛选,满足第二个需求
方案2:全局上下文清除+列筛选保留
如果你需要清除的是当前查询上下文内所有表的筛选(而非仅ClientType表),可以用这个方案:
CALCULATE( [Revenue], DATESYTD(DATEADD('Date'[Date], -1, YEAR), "5/31"), ALLSELECTED(), REMOVEFILTERS(ClientType), KEEPFILTERS(VALUES(ClientType[FiscalYear])) )
逻辑说明:
- 不带参数的
ALLSELECTED()清除当前查询上下文内所有表的筛选 REMOVEFILTERS(ClientType)显式清除ClientType表所有列的筛选- 最后通过
KEEPFILTERS保留FiscalYear列的外部筛选
注意事项
如果ClientType[FiscalYear]的筛选来自关联的维度表,只需要把VALUES(ClientType[FiscalYear])替换为对应维度表的财年列引用即可,整体逻辑无需调整。
内容的提问来源于stack exchange,提问作者Chicago1988
相关产品推荐
相关产品推荐

