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

Power BI DAX技术求助:如何计算周期内平均去重人数?

解决DAX计算周期内月均去重人员数的问题

核心需求

计算选定周期内每个月的去重人员数之和,再除以周期内的月份数量,得到月均去重人数。

问题根源

你之前的公式存在两个关键问题:

  • 第一个公式未按月份迭代计算,ALLEXCEPT与PERIOD的筛选组合无法实现分月统计,最终得到的是整个周期的总去重人数而非分月求和。
  • 第二个公式直接迭代REF_DATE[MONTH]会因同一月份存在多条日期记录导致重复计算,且未限制每个迭代上下文仅对应单个月份,统计结果不准确。

正确DAX度量值

假设你已有与人员记录表关联的日期表PERIOD,且日期表包含年份和月份列,使用以下度量值:

月平均去重人数 = 
VAR 月度去重人数总和 = 
    SUMX(
        SUMMARIZE(PERIOD, PERIOD[年份], PERIOD[月份]), // 按年月分组,生成周期内的唯一月份集合
        CALCULATE(DISTINCTCOUNT('人员记录表'[ID_PEOPLE])) // 计算当前分组月份的去重人数
    )
VAR 周期内月份总数 = 
    COUNTROWS(SUMMARIZE(PERIOD, PERIOD[年份], PERIOD[月份])) // 统计周期内的月份数量
RETURN
    DIVIDE(月度去重人数总和, 周期内月份总数, 0) // 用DIVIDE处理除数为0的边界情况

适配无年月列的日期表

如果你的PERIOD日期表没有单独的年份/月份列,可通过生成月度标识来实现分组:

月平均去重人数 = 
VAR 月度分组集合 = 
    SUMMARIZE(PERIOD, 
        "月度标识", DATE(YEAR(PERIOD[Date]), MONTH(PERIOD[Date]), 1)
    )
VAR 月度去重人数总和 = 
    SUMX(
        月度分组集合,
        CALCULATE(
            DISTINCTCOUNT('人员记录表'[ID_PEOPLE]),
            FILTER(
                '人员记录表',
                DATE(YEAR('人员记录表'[记录日期]), MONTH('人员记录表'[记录日期]), 1) = [月度标识]
            )
        )
    )
VAR 周期内月份总数 = COUNTROWS(月度分组集合)
RETURN
    DIVIDE(月度去重人数总和, 周期内月份总数, 0)

验证逻辑

以你提供的示例测试:

  • 选择1-3月时,月度去重人数总和为30+30+90=150,周期内月份总数为3,返回150/3=50,符合预期。
  • 选择2-3月时,总和为30+90=120,月份数为2,返回120/2=60,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:02:40