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

如何用DAX计算指定时间段内工作项的完成工时差值?

计算工作项完成工时增量的DAX表达式修复方案

我有一个数据集,每条记录对应一个工作项的一次更新(每天最多更新一次),包含WorkItem、CompletedWork、ChangedDate三个字段,示例数据如下:

WorkItemCompletedWorkChangedDate
12392401/04/23
123924.503/04/23
12394102/04/23
12394407/04/23
12530606/05/23

需求是编写DAX表达式计算各时间段内的完成工时增量,用于制作X轴为周维度的折线图,展示时段内完成的工时。自行编写的DAX代码无法正确运行,代码如下:

CompletedWorkDifference = 
SUMX (
    VALUES ( Task_Revisions[WorkItemId] ),
    VAR CurrentRowWorkItemId = Task_Revisions[WorkItemId]
    VAR CurrentRowChangedDate = Task_Revisions[ChangedDate]
    VAR PreviousCompletedWork =
        CALCULATE (
            LASTNONBLANK ( Task_Revisions[CompletedWork], 1 ),
            FILTER (
                ALL ( Task_Revisions ),
                Task_Revisions[WorkItemId] = CurrentRowWorkItemId
                    && Task_Revisions[ChangedDate] < CurrentRowChangedDate
            )
        )
    VAR CurrentCompletedWork = Task_Revisions[CompletedWork]
    RETURN
        IF ( PreviousCompletedWork <> BLANK (), CurrentCompletedWork - PreviousCompletedWork, BLANK () )
)

问题分析与修复方案

原代码的核心问题在于迭代逻辑不匹配上下文、历史工时获取方式精准度不足,导致无法正确计算时段内的增量。以下是修复后的DAX表达式:

CompletedWorkDifference = 
SUMX (
    -- 迭代每个工作项的所有更新记录
    Task_Revisions,
    VAR CurrentWorkItem = Task_Revisions[WorkItem]
    VAR CurrentDate = Task_Revisions[ChangedDate]
    -- 获取当前工作项在当前日期之前的最新完成工时
    VAR PreviousWork =
        CALCULATE (
            MAX ( Task_Revisions[CompletedWork] ),
            FILTER (
                ALL ( Task_Revisions ),
                Task_Revisions[WorkItem] = CurrentWorkItem
                    && Task_Revisions[ChangedDate] < CurrentDate
            )
        )
    -- 计算增量:有历史记录则取差值,首次记录可按需返回初始工时或空值
    RETURN
        IF (
            NOT ISBLANK ( PreviousWork ),
            Task_Revisions[CompletedWork] - PreviousWork,
            -- 若需将初始工时计入对应时段,替换为 Task_Revisions[CompletedWork],否则保持BLANK
            BLANK ()
        )
)

使用注意事项

  • 确认ChangedDate字段为日期/时间类型,避免文本格式导致日期比较错误
  • 按周维度展示时,需在模型中创建日期表,建立与Task_Revisions[ChangedDate]的关系,使用日期表的周字段作为折线图X轴
  • 若需要将工作项的初始工时(首次记录的CompletedWork)计入对应周的增量,可修改返回部分的BLANK()为Task_Revisions[CompletedWork]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:04:56