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

PowerBI:在聚合表中按最小粒度计算中位数、Q1和Q3

PowerBI 计算带权重的批次-区域维度下仪表年龄中位数、Q1/Q3

针对你在聚合表中需要按部门区域+批次维度,计算带仪表数量权重的年龄中位数、Q1、Q3的需求,普通MEDIAN函数无法处理权重问题,可通过以下DAX度量值实现:

先定义基础度量值

总仪表数 = SUM('仪表聚合表'[仪表数量])

1. 仪表年龄中位数

仪表年龄中位数 = 
VAR 总数量 = [总仪表数]
VAR 半数 = 总数量 / 2
VAR 排序年龄累计 = 
    ADDCOLUMNS(
        SUMMARIZE('仪表聚合表', '仪表聚合表'[安装后使用年限]),
        "@累计数量", 
            CALCULATE(
                SUM('仪表聚合表'[仪表数量]),
                FILTER(
                    ALLSELECTED('仪表聚合表'[安装后使用年限]),
                    '仪表聚合表'[安装后使用年限] <= EARLIER('仪表聚合表'[安装后使用年限])
                )
            )
    )
VAR 中位数候选 = 
    MINX(
        FILTER(排序年龄累计, [@累计数量] >= 半数),
        '仪表聚合表'[安装后使用年限]
    )
VAR 前一位候选 = 
    MAXX(
        FILTER(排序年龄累计, [@累计数量] < 半数),
        '仪表聚合表'[安装后使用年限]
    )
RETURN
    IF(
        MOD(总数量, 2) = 0,
        (中位数候选 + 前一位候选) / 2,
        中位数候选
    )

2. 仪表年龄Q1(下四分位数)

仪表年龄Q1 = 
VAR 总数量 = [总仪表数]
VAR Q1阈值 = 总数量 * 0.25
VAR 排序年龄累计 = 
    ADDCOLUMNS(
        SUMMARIZE('仪表聚合表', '仪表聚合表'[安装后使用年限]),
        "@累计数量", 
            CALCULATE(
                SUM('仪表聚合表'[仪表数量]),
                FILTER(
                    ALLSELECTED('仪表聚合表'[安装后使用年限]),
                    '仪表聚合表'[安装后使用年限] <= EARLIER('仪表聚合表'[安装后使用年限])
                )
            )
    )
VAR Q1候选 = 
    MINX(
        FILTER(排序年龄累计, [@累计数量] >= Q1阈值),
        '仪表聚合表'[安装后使用年限]
    )
VAR 前一位候选 = 
    MAXX(
        FILTER(排序年龄累计, [@累计数量] < Q1阈值),
        '仪表聚合表'[安装后使用年限]
    )
RETURN
    IF(
        MOD(总数量, 4) = 0,
        (Q1候选 + 前一位候选) / 2,
        Q1候选
    )

3. 仪表年龄Q3(上四分位数)

仪表年龄Q3 = 
VAR 总数量 = [总仪表数]
VAR Q3阈值 = 总数量 * 0.75
VAR 排序年龄累计 = 
    ADDCOLUMNS(
        SUMMARIZE('仪表聚合表', '仪表聚合表'[安装后使用年限]),
        "@累计数量", 
            CALCULATE(
                SUM('仪表聚合表'[仪表数量]),
                FILTER(
                    ALLSELECTED('仪表聚合表'[安装后使用年限]),
                    '仪表聚合表'[安装后使用年限] <= EARLIER('仪表聚合表'[安装后使用年限])
                )
            )
    )
VAR Q3候选 = 
    MINX(
        FILTER(排序年龄累计, [@累计数量] >= Q3阈值),
        '仪表聚合表'[安装后使用年限]
    )
VAR 前一位候选 = 
    MAXX(
        FILTER(排序年龄累计, [@累计数量] < Q3阈值),
        '仪表聚合表'[安装后使用年限]
    )
RETURN
    IF(
        MOD(总数量, 4) = 0,
        (Q3候选 + 前一位候选) / 2,
        Q3候选
    )

关键逻辑说明

  • 通过SUMMARIZE合并同一维度下的重复年龄,避免重复计算
  • ALLSELECTED确保计算范围限定在当前矩阵的部门区域+批次上下文内,不受其他筛选器干扰
  • 基于累计数量阈值(半数/25%/75%)定位分位数,同时处理奇偶数量的边界情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:07:35