Power Query中超过24小时的时间字段汇总

时间:2019-11-25 15:26:05

标签: excel powerbi powerquery

我在excel中有一个超级查询链接到另一个文件。该文件有一个时间列。我知道M语言在不进行任何工作的情况下不会自动超过24小时,因为它使用日期时间引用,因此,如果我导入25小时的时间,它将恢复2小时回到1小时...

在下面的图片的第三列中,使用第二行作为参考,这实际上应该阅读为47:47:38。如何获得值大于24小时的实例以显示真实时间?

我尝试使用duration.hours(#hours()),由于某些原因,它也无法正常工作。

来自源excel文件的相同数据也在下面

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

Power Query没有自定义格式来显示数据。如果您将其读取的数据作为“持续时间”而不是“日期时间”,它将显示为[d] .hh.mm.ss格式,但仍不显示总时数。最终,尽管这并不重要,因为即使您将数据格式化为在Excel中显示总小时数,它实际上仍在内部存储为天+小时+分钟+秒。因此,它在Power Query中的显示方式无关紧要,因为只要将数据输出到任何地方都可以使用小时格式。

现在,如果您需要使用小时数来计算不是另一个“持续时间”的时间,则可以通过执行

来提取小时数。
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> <textarea class="mdl-textfield__input" type="text" rows="3" id="emailbody" data-required="true"></textarea> <label class="mdl-textfield__label" for="sample5">Email body</label> </div>

或者,现在我来看一下,还有一个TotalHours函数,可以为您提供小时数加上mm:ss的分数

Duration.Days([Your Hours]) * 24 + Duration.Hours([Your Hours])

答案 1 :(得分:0)

Power BI无法很好地处理这种情况。一种解决方案是将持续时间转换为数字以使其具有可加性(以便您可以执行计算和汇总),并在需要对其进行可视化时将其转换为所需的格式(HH:MM:SS)。

DurationTime经常被混淆。读取此类Excel文件时,列的类型通常为DateTime,并将日期1899-12-31添加到“时间”部分。您可以将列的数据类型更改为“十进制数”,但是不幸的是,Excel中的“零点”是一天假(1899-12-30),因此您需要从结果中减去1才能获得实际的“数”天数”(即0.25表示06:00:00)。

因此,您必须执行一些数据转换。我将在模型中添加一个新列,以获取所需的最低粒度的持续时间(在您的示例中为秒)。在Power Query Editor中,添加一个自定义列来计算持续时间(以秒为单位)(其中Column1是原始持续时间列的名称):

Duration in seconds = Duration.TotalSeconds([Column1] - #datetime(1899, 12, 31, 0, 0, 0))

enter image description here

确保此列的数据类型为“整数”(必要时进行更改)。这里9144秒被计算为2 * 3600 + 32 * 60 + 2402:32:24。现在,您可以在此列上计算总和,例如以秒为单位的总持续时间。但是,当您可视化此列时,请勿直接进行操作,而应采取措施将数据转换为所需的格式。我可以这样写吗:

Measure Duration = 
    VAR duration_in_seconds = SUM(Sheet1[Duration in seconds])
    VAR hours = ROUNDDOWN ( duration_in_seconds / 3600; 0 )
    VAR minutes = ROUNDDOWN ( MOD ( duration_in_seconds; 3600 ) / 60; 0 )
    VAR seconds = INT ( MOD ( duration_in_seconds; 60 ) )
    RETURN hours & ":" & FORMAT(minutes; "00") & ":" & FORMAT(seconds; "00")

duration_in_seconds变量保存上下文中数据的总持续时间(以秒为单位)。根据它,我们正在计算hoursminutesseconds,并构造一个字符串以所需的格式表示持续时间。 FORMAT用于确保分钟数或秒数少于10时前导零。

这是可视化时所有三列的外观:

enter image description here

希望这会有所帮助!

相关问题