Power Query中如何将h/m/s格式时长列转换为总秒数?
在Power BI的Power Query中将"XhYmZs"格式时长转换为总秒数
实现步骤:添加自定义列计算总秒数
- 进入Power Query编辑器:在Power BI数据视图中,点击顶部菜单栏的转换数据打开编辑器。
- 确认时长列格式:右键目标列→更改类型→选择文本(如果当前列不是文本格式的话)。
- 添加自定义列:点击添加列选项卡→自定义列,在弹出的编辑框中输入以下M语言代码,记得把
[你的时长列名]替换成实际的列名:
= let DurationText = [你的时长列名], // 清理文本中的空格(如果数据里带空格,比如"9h 8m 4s") CleanText = Text.Remove(DurationText, " "), // 按h/m/s拆分文本,提取数字部分 SplitParts = List.RemoveNulls(Text.SplitAny(CleanText, "hms")), // 提取时/分/秒数值,无对应部分则设为0 Hours = if List.Count(SplitParts) >= 1 then Number.From(SplitParts{0}) else 0, Minutes = if List.Count(SplitParts) >= 2 then Number.From(SplitParts{1}) else 0, Seconds = if List.Count(SplitParts) >= 3 then Number.From(SplitParts{2}) else 0, // 计算总秒数 TotalSeconds = Hours * 3600 + Minutes * 60 + Seconds in TotalSeconds
代码说明
Text.SplitAny(CleanText, "hms"):将清理后的时长文本按h/m/s拆分,提取出数字列表(比如"9h8m4s"会拆成{"9","8","4"})。List.RemoveNulls:移除拆分过程中可能产生的空值,兼容格式不规范的情况。- 通过列表长度判断,确保即使数据只有部分时长单位(比如仅"30m"或"120s"),也能正确计算总秒数。
- 最终通过单位换算:1小时=3600秒、1分钟=60秒,累加得到总秒数。
示例验证
输入9h8m4s时:
- Hours=9,Minutes=8,Seconds=4
- 总秒数=9×3600 + 8×60 +4 = 32400 + 480 +4 = 32884,与预期结果一致。
内容的提问来源于stack exchange,提问作者egflame
相关产品推荐
相关产品推荐

