Power BI中如何对时间类型列执行求和聚合操作?
解决Power BI中时间类型Duration列无法求和的问题
我太懂你这个困扰了——把SQL Server里的time类型Duration字段导入Power BI后,想做个按Phase分组的时长总和条形图,结果发现Duration字段只能选计数、非重复计数,根本找不到求和选项。这其实是Power BI的默认逻辑导致的:它把time类型识别成单个时间点,而不是可累加的时长数值,自然不会提供求和的聚合方式。
你提到已经在TBL1里加了DurationMeasure度量值,这里给你一个能完美解决问题的标准DAX公式,以及使用说明:
正确的Duration总和度量值写法
DurationMeasure = VAR TotalSeconds = SUMX(TBL1, HOUR(TBL1[Duration])*3600 + MINUTE(TBL1[Duration])*60 + SECOND(TBL1[Duration])) VAR Hours = INT(TotalSeconds / 3600) VAR RemainingSeconds = MOD(TotalSeconds, 3600) VAR Minutes = INT(RemainingSeconds / 60) VAR Seconds = MOD(RemainingSeconds, 60) RETURN FORMAT(Hours, "00") & ":" & FORMAT(Minutes, "00") & ":" & FORMAT(Seconds, "00")
这个度量值的工作逻辑:
- 第一步把每条记录的Duration拆解成小时、分钟、秒,转换成总秒数——只有数值类型才能被SUMX累加
- 再把累加后的总秒数转换回大家熟悉的HH:MM:SS格式,保证可读性
条形图的配置步骤
- 把
Phase字段拖到条形图的轴区域,用来分组 - 把你创建好的
DurationMeasure拖到值区域,这时就能看到每个Phase对应的总时长了
额外实用提示
- 如果你的Duration有超过24小时的情况,这个公式完全能hold住,因为它是基于总秒数计算的,不会像原生
time类型那样被截断成24小时以内 - 要是你需要在表格可视化里也展示总时长,直接把这个度量值拖到表格列里就行
- 以后如果再遇到类似的时间类型转时长求和的需求,这个思路通用:先转成可累加的数值(秒/分钟),再转回时间格式
内容的提问来源于stack exchange,提问作者Filip Popović




