如何通过DAX度量值按日/周统计待办工单的最新状态数量
解决方案
可以通过DAX度量值实现该统计需求。你遇到的重复计数问题,核心原因是原有待办度量值为工单维度的聚合值,直接关联步骤表的StepStatus字段时,会将单个工单的所有历史步骤变更记录都纳入统计,既没有限定取统计日期对应的工单最新状态,也没有提前过滤已关闭工单。
你可以使用下方的DAX度量值实现需求:
每日Backlog工单最新状态计数 = VAR 统计日期 = MAX('q_Calendar'[Date]) // 筛选统计日期当天仍属于待办的工单:已创建且未关闭 VAR 有效Backlog工单 = FILTER( VALUES('Data per ticket'[工单号]), 'Data per ticket'[创建日期] <= 统计日期 && (ISBLANK('Data per ticket'[解决日期]) || 'Data per ticket'[解决日期] > 统计日期) ) // 为每个有效工单匹配统计日期前的最新步骤状态 VAR 工单最新状态映射 = ADDCOLUMNS( 有效Backlog工单, "最新状态", VAR 当前工单 = [工单号] VAR 该工单最新步骤日期 = CALCULATE( MAX('Data per step'[步骤日期]), 'Data per step'[工单号] = 当前工单, 'Data per step'[步骤日期] <= 统计日期 ) RETURN CALCULATE( SELECTEDVALUE('Data per step'[StepStatus]), 'Data per step'[工单号] = 当前工单, 'Data per step'[步骤日期] = 该工单最新步骤日期 ) ) // 按当前筛选上下文的StepStatus统计对应工单数量 RETURN COUNTROWS( FILTER( 工单最新状态映射, [最新状态] = SELECTEDVALUE('Data per step'[StepStatus]) ) )
逻辑说明
- 第一步先圈定统计日的有效待办工单范围:排除已在统计当日及之前关闭的工单、还未创建的工单,满足已关闭工单后续不纳入统计的规则
- 第二步逐个匹配每个有效工单在统计日期前的最后一次步骤变更状态,避免同一个工单的多个历史步骤被重复计数
- 第三步按当前上下文的
StepStatus做匹配计数,不会出现多状态重复统计的问题
周统计适配
如果需要按周统计,直接将该度量值放到周维度的上下文环境中即可,会默认按周的最后一天计算当周的待办工单状态分布;如果需要自定义周统计逻辑,可搭配WEEKNUM等时间智能函数调整统计日期的取值规则即可。
性能优化提示
如果你的数据量较大,可以将工单最新状态的计算逻辑改为用SUMMARIZE预聚合,同时给Data per step表的工单号、步骤日期字段增加索引,可大幅提升计算速度。
内容的提问来源于stack exchange,提问作者MalyMajo
相关产品推荐
相关产品推荐

