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

PowerBI中计算Time Usage列总分钟数的高效方法

计算格式不一致的时间列总分钟数的最优方法

针对你遇到的时间格式混乱的问题,最优方案是在PowerQuery中完成数据转换——数据预处理阶段做清洗,比在DAX中实时计算效率高得多,逻辑也更清晰。

PowerQuery实现步骤

  1. 在PowerQuery编辑器中选中数据表,点击「添加列」→「自定义列」
  2. 输入以下M语言代码替换默认内容:
= List.Sum(
    List.Transform(
        Text.Split([Time Usage], " "),
        each 
            let 
                // 提取数字部分
                numValue = Number.From(Text.Remove(_, {"d", "h", "m", "i", "n"})),
                // 提取单位标识(仅保留d/h/m)
                timeUnit = Text.Select(_, {"d", "h", "m"})
            in
                // 根据单位转换为分钟数
                switch timeUnit
                    "d" => numValue * 1440, // 1天=1440分钟
                    "h" => numValue * 60,  // 1小时=60分钟
                    "m" => numValue,       // 分钟直接取数
                    0 // 无效值返回0
    )
)
  1. 点击确定后,新列将直接显示每个时间字符串对应的总分钟数。

代码说明

  • 按空格把时间字符串拆分成单个「数值+单位」元素列表
  • 遍历每个元素,分离数字和单位,再根据单位转换为对应分钟数
  • 最后对所有转换后的分钟数求和,得到总时长

这种方法完全不依赖时间单位的顺序,不管是「1d 10h 25min」还是「5m 2h 3d」都能正确计算。

DAX备选方案(不推荐)

如果一定要用DAX计算,可通过TEXTSPLIT函数拆分后迭代计算,但效率远不如PowerQuery,仅适合临时计算场景:

Total Minutes = 
VAR TimeParts = TEXTSPLIT([Time Usage], " ")
RETURN
SUMX(
    TimeParts,
    VAR Unit = RIGHT([Value], 1)
    VAR Num = VALUE(LEFT([Value], LEN([Value]) - 1))
    RETURN
        SWITCH(Unit,
            "d", Num * 1440,
            "h", Num * 60,
            "m", Num,
            0
        )
)

总结:优先用PowerQuery做预处理,后续报表直接使用转换后的数值列即可,性能和维护性都更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:01:12