You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:DAX中可忽略度量值筛选的ALLEXCEPT替代函数

问题描述

我在表格中创建了如下度量Value Month 1,用于显示数值及对应百分比(另有Month 2和Month 3两个度量,仅日期范围不同):

Value Month 1 = 
IF(
    ISBLANK([# Failures Month 1]), 
    BLANK(), 
    CALCULATE(
        [# Failures Month 1] & " | " & ((ROUND([% Failures Month 1] * 100 , 2) & "%")),
        ALLEXCEPT('AcuteAll', 'AcuteAll'[Failure Code], 'Asset Location'[Care Setting Description])
    )
)

同时添加了基于度量# Failures 3 Months的表格筛选器,仅显示三个月中至少一个月故障数≥1的行:

# Failures 3 Months = 
IF (
    [# Failures Month 1] >= 1 ||
    [# Failures Month 2] >= 1 ||
    [# Failures Month 3] >= 1,
    1,
    0
)

应用该筛选后,[% Failures Month 1]的计算结果异常。尝试将# Failures 3 Months加入ALLEXCEPT参数,但由于它是度量而非列,无法被识别。请问使用哪个DAX函数可忽略该度量的筛选来计算百分比?

解决方案

要忽略基于度量的筛选器对百分比计算的影响,可以用REMOVEFILTERS()函数清除筛选上下文,或配合KEEPFILTERS()精准保留需要的维度上下文,以下是两种可行的修改方式:

方式1:直接调整[% Failures Month 1]度量

在百分比计算的CALCULATE中加入REMOVEFILTERS(),如果需要保留Failure Code和Care Setting Description的维度上下文,就用KEEPFILTERS嵌套ALLEXCEPT:

[% Failures Month 1] = 
CALCULATE(
    DIVIDE([# Failures Month 1], [Total Failures Month 1]),
    -- 保留指定维度的上下文,清除其他筛选(包括基于度量的筛选)
    KEEPFILTERS(ALLEXCEPT('AcuteAll', 'AcuteAll'[Failure Code], 'Asset Location'[Care Setting Description]))
)

方式2:在Value Month 1中单独处理百分比计算

直接在拼接百分比的部分,用CALCULATE包裹并清除筛选:

Value Month 1 = 
IF(
    ISBLANK([# Failures Month 1]), 
    BLANK(), 
    CALCULATE(
        [# Failures Month 1] & " | " & ((ROUND(CALCULATE([% Failures Month 1], REMOVEFILTERS()) * 100 , 2) & "%")),
        ALLEXCEPT('AcuteAll', 'AcuteAll'[Failure Code], 'Asset Location'[Care Setting Description])
    )
)

核心逻辑是:基于度量的筛选属于计算后的结果筛选,REMOVEFILTERS()可以清除这类筛选带来的上下文干扰,让百分比计算回到未应用该筛选器时的状态;如果需要保留特定维度的分组逻辑,就用KEEPFILTERS()配合ALLEXCEPT锁定需要的维度。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:34:56