如何在 Power BI 中使用 DAX 计算动态截断均值

发布: (2026年1月7日 GMT+8 05:57)
4 min read
原文: Dev.to

Source: Dev.to

封面图片:在 Power BI 中使用 DAX 计算动态截断均值

为什么需要截断均值

在数据分析中,标准的 AVERAGE 函数是常用工具,但它有一个显著的弱点:对离群值极其敏感。一个极端值(无论是高还是低)都可能扭曲整体结果,导致对数据真实中心趋势的误判。

这正是截断均值发挥作用的地方。它通过在计算时排除一定比例的最小值和最大值,提供了更稳健的平均度量。

虽然现代 Power BI 模型内置了 TRIMMEAN 函数,但在使用对旧版 Analysis Services(SSAS)模型的实时连接时,该函数往往不可用。下面的 DAX 模式复现了该功能,并保持完全动态,能够响应报表中的所有切片器和筛选器。

动态截断均值的 DAX 解决方案

此度量通过在求平均之前去除最低 10 % 和最高 10 % 的值,计算出 20 % 截断均值(即对剩余 80 % 的值求平均)。

您可以直接将以下代码粘贴到 New Measure 公式栏中。

Trimmed Mean (20%) = 
VAR TargetTable = 'FactTable'
VAR TargetColumn = 'FactTable'[MeasureColumn]
VAR LowerPercentile = 0.10 // Defines the bottom 10% to trim
VAR UpperPercentile = 0.90 // Defines the top 10% to trim (1.0 - 0.10)

// 1. Find the value at the 10th percentile
VAR MinThreshold =
    PERCENTILEX.INC(
        FILTER( 
            TargetTable, 
            NOT( ISBLANK( TargetColumn ) ) 
        ),
        TargetColumn,
        LowerPercentile
    )

// 2. Find the value at the 90th percentile
VAR MaxThreshold =
    PERCENTILEX.INC(
        FILTER( 
            TargetTable, 
            NOT( ISBLANK( TargetColumn ) ) 
        ),
        TargetColumn,
        UpperPercentile
    )

// 3. Calculate the average, including only values between the thresholds
RETURN
CALCULATE(
    AVERAGEX(
        FILTER(
            TargetTable,
            TargetColumn >= MinThreshold &&
            TargetColumn <= MaxThreshold
        ),
        TargetColumn
    )
)

拆解 DAX 逻辑

该公式分为三个独立步骤,全部在当前筛选上下文中执行(例如,用户选择的任何切片器)。

1. 定义关键变量

  • TargetTable & TargetColumn – 将表名和列名分配给变量,以实现简洁、可复用的代码。将 'FactTable'[MeasureColumn] 替换为模型中相应的列。
  • LowerPercentile / UpperPercentile – 定义边界。0.100.90 用于去除最低 10 % 和最高 10 %。若要两端各去除 5 %(共计 10 %),使用 0.050.95

2. 找到分位阈值

  • MinThreshold & MaxThreshold – 保存对应于分位边界的实际数值。
  • PERCENTILEX.INC – 作为迭代器使用,以便我们先 FILTER 表。
  • FILTER(…, NOT(ISBLANK(…))) – 确保仅对目标列非空的行计算分位数,防止 BLANK() 值扭曲计算。

结果是 MinThreshold 保存第 10 百分位的值(例如 4.5),MaxThreshold 保存第 90 百分位的值(例如 88.2),对应当前可见的数据。

3. 计算最终平均值

  • RETURN CALCULATE(…) – 使度量值动态化,遵循切片器或可视化对象所施加的任何筛选。
  • AVERAGEX(FILTER(…)) – 在过滤后的表上迭代,计算满足修剪条件的行的 TargetColumn 的简单平均值。
  • 内部 FILTER 仅保留 TargetColumn ≥ MinThreshold AND ≤ MaxThreshold 的行。

结论

通过实现此 DAX 模式,您可以创建一个稳健、动态且对异常值具有抵抗力的 KPI。该度量提供了更准确的数据中心趋势图,并将在用户与 Power BI 报表交互时自动重新计算。

Back to Blog

相关文章

阅读更多 »