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

PowerBI DAX时点学生人数统计:时间旅行功能实现求助

选定时点课程学生人数统计DAX解决方案

问题背景与规则明确

表结构

  • tblClass:包含studentid(学生ID)、EnrollDate(注册日期)、PassedDate(通过日期)字段
  • tblDate:含Date列,已与tblClass[EnrollDate]建立关联

统计规则

  • 已通过课程(PassedDate不为空):无论注册时长,直接计入统计人数
  • 未通过课程(PassedDate为空):仅当注册日期与统计日期的间隔超过30天时计入;注册后30天试用期内不计入
  • 统计日期支持历史日期(时间旅行),需动态计算对应时点的有效学生数

现有代码问题分析

你当前的DynDSE_Active度量值仅计算注册天数,未结合通过规则判断是否计入;同时依赖MonthEndDate的筛选逻辑限制了跨月份统计,且VALUES(tblClass[EnrollDate])在多学生场景下会返回多个值,导致计算逻辑失效。

解决方案DAX度量值

ActiveStudentCount = 
VAR SelectedStatsDate = 
    // 获取选定的统计日期,若选未来日期则替换为今日
    IF(
        SELECTEDVALUE(tblDate[Date]) >= TODAY(),
        TODAY(),
        SELECTEDVALUE(tblDate[Date])
    )
RETURN
    CALCULATE(
        COUNTROWS(tblClass),
        // 遍历所有学生,筛选符合条件的记录
        FILTER(
            ALL(tblClass),
            // 前提:学生在统计日期前已完成注册
            tblClass[EnrollDate] <= SelectedStatsDate
            && (
                // 条件1:已通过课程,且通过日期不晚于统计日期
                (NOT ISBLANK(tblClass[PassedDate]) && tblClass[PassedDate] <= SelectedStatsDate)
                ||
                // 条件2:未通过课程,且注册时长超过30天
                (ISBLANK(tblClass[PassedDate]) && DATEDIFF(tblClass[EnrollDate], SelectedStatsDate, DAY) > 30)
            )
        ),
        // 移除日期表的关联筛选,确保历史日期统计不受限制
        ALL(tblDate)
    )

代码说明

  1. SelectedStatsDate变量:准确获取用户选定的统计日期,若选择未来日期则自动替换为今日,避免无效统计。
  2. FILTER(ALL(tblClass), ...):移除tblClass的现有筛选,遍历所有学生逐一判断是否符合计入规则,确保统计逻辑覆盖全量学生。
  3. ALL(tblDate):解除日期表与EnrollDate的关联筛选限制,彻底解决跨月份、跨时段的历史日期统计问题。

场景验证

  • 场景1:学生2月1日注册,3月5日通过。2月28日统计时:未通过+注册间隔27天(≤30)→ 不计入;3月3日统计时:未通过+注册间隔31天(>30)→ 计入,符合规则。
  • 场景2:学生2月1日注册,2月4日通过。2月3日统计时:未通过+注册间隔2天(≤30)→ 不计入;2月4日统计时:已通过且通过日期≤统计日期→ 计入,符合规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:32