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
相关产品推荐
相关产品推荐

