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

请求协助:统计指定时间段内的Opened Tickets数量(DAX代码优化)

统计指定时间段内处于Opened状态的工单解决方案

需求分析

需要统计在选定年月结束时,状态为Opened的工单数量。核心逻辑是确定每个工单在统计周期结束日的最终状态,再筛选出状态为Opened的工单。

原代码问题分析

第一种DAX代码问题

  1. 筛选条件偏差:使用NOT(Fac_Jira[IdStatus] IN {[Closed], [Finished], [Cancelled]})会包含prepared等非目标状态,无法精准定位Opened状态。
  2. 范围限制过窄:仅统计状态变更日期在指定时间段内的记录,若工单最后一次状态变更在时间段之后,会遗漏该工单在时间段内的有效Opened状态。

第二种DAX代码问题

  1. 初始筛选错误:Fac_Jira[CreationDate] > DATE(2024, 06, 01)会排除2024年6月1日及之前创建的工单,导致数据不全。
  2. 逻辑完全倒置:NOT([LastDateState] IN {[Opened], [Finished], [Cancelled]})混淆了日期和状态字段,且错误排除了目标Opened状态。

正确DAX实现

VAR _SelectedMonth = SELECTEDVALUE(DimCalendarIssues[Month])
VAR _SelectedYear = SELECTEDVALUE(DimCalendarIssues[Year])
VAR _PeriodEnd = EOMONTH(DATE(_SelectedYear, _SelectedMonth, 1), 0)

// 获取每个工单在周期结束前的最后一次状态变更记录
VAR _LastStatusBeforeEnd =
    ADDCOLUMNS(
        SUMMARIZE(
            FILTER(Fac_Jira, Fac_Jira[statusChangedDate] <= _PeriodEnd),
            Fac_Jira[idissue],
            "MaxStatusDate", MAX(Fac_Jira[statusChangedDate])
        ),
        "CurrentStatus",
            CALCULATE(
                MAX(Fac_Jira[Status]),
                FILTER(
                    Fac_Jira,
                    Fac_Jira[idissue] = EARLIER(Fac_Jira[idissue])
                    && Fac_Jira[statusChangedDate] = EARLIER([MaxStatusDate])
                )
            )
    )

// 处理周期内创建但无状态变更(或变更在周期后)的工单,默认创建状态为Opened
VAR _NewTicketsWithoutChange =
    SELECTCOLUMNS(
        FILTER(
            Fac_Jira,
            Fac_Jira[creation] <= _PeriodEnd
            && NOT(Fac_Jira[idissue] IN SELECTCOLUMNS(_LastStatusBeforeEnd, "Issue", [idissue]))
        ),
        "idissue", Fac_Jira[idissue],
        "CurrentStatus", "Opened"
    )

// 合并数据并筛选Opened状态的工单
VAR _OpenedTickets =
    FILTER(
        UNION(_LastStatusBeforeEnd, _NewTicketsWithoutChange),
        [CurrentStatus] = "Opened"
    )

RETURN COUNTROWS(DISTINCT(_OpenedTickets))

代码解释

  1. 周期日期计算:通过选定的年月计算统计周期的最后一天_PeriodEnd。
  2. 获取最后状态:筛选所有状态变更日期不晚于周期结束日的记录,按工单分组取最后一次变更的状态。
  3. 处理新工单:对于周期内创建但无有效状态变更记录的工单,默认其状态为Opened(符合工单创建初始状态的常规逻辑)。
  4. 统计结果:合并两类工单数据,筛选出状态为Opened的工单并去重计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:04:53