我有一个Excel中的Power Query链接到另一个文件。这个文件有一个时间列。我知道M语言不会自动求和超过24小时而不做一些工作,因为它使用日期时间参考,因此如果我导入25小时的时间,它会恢复2小时到1小时...在我下面的图像中的第三列中,使用第二行作为参考,实际上应该是47:47:38。我如何获得值高于24小时的示例来显示真实的小时数?我试过使用duration.hours(#hours()),但由于某种原因,它也不起作用。同样的数据从源excel文件也在下面
xtfmy6hx1#
Power Query没有自定义格式来显示数据。如果您让它将数据读取为Duration而不是DateTime,它将显示为[d].hh.mm.ss格式,但仍然不显示总小时数。最终,尽管这并不重要,因为即使您的数据被格式化为在Excel中显示总小时数,它实际上是以天+小时+分钟+秒的形式在内部存储的。所以它在Power Query中如何显示并不重要,因为您可以在任何地方使用小时格式输出数据。现在,如果您需要使用小时数来计算不是另一个Duration的时间,则可以通过执行以下操作来提取小时数
Duration.Days([Your Hours]) * 24 + Duration.Hours([Your Hours])
现在我来看一下,还有一个TotalHours函数,它提供小时数加上mm:ss作为小时数的分数
Duration.TotalHours([Your Hours])
tjvv9vkg2#
Power BI无法很好地处理这种情况。解决方案可能是将持续时间转换为数字,使其具有可加性(以便您可以执行计算和聚合),并在需要可视化时将其转换为所需的格式(HH:MM:SS)。Duration和Time经常被混淆。当读取此类Excel文件时,列的类型通常为DateTime,并在“时间”部分添加日期1899-12-31。您可以将列的数据类型更改为Decimal Number,但Excel中的“零点”不幸的是少了一天(1899-12-30),所以你需要从结果中减去1,以获得持续时间的实际“天数”(即0. 25意味着06:00:00)。所以你必须对数据进行一些转换。我会在模型中创建一个新列,以获得我需要的最低粒度的持续时间(在你的例子中是秒)。在Power Query Editor中添加一个自定义列来计算以秒为单位的持续时间(其中Column1是原始持续时间列的名称):
Duration
Time
DateTime
Column1
Duration in seconds = Duration.TotalSeconds([Column1] - #datetime(1899, 12, 31, 0, 0, 0))
确保此列的数据类型为“整数”(如有必要,请更改)。这里9144秒的计算公式为2 * 3600 + 32 * 60 + 24或02:32:24。现在,您可以计算此列的总和,以获得总持续时间(例如,以秒为单位)。但是,当您可视化此列时,不要直接执行此操作,但要采取措施将数据转换为所需的格式。它可以像这样:
9144
2 * 3600 + 32 * 60 + 24
02: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变量保存上下文中数据的总持续时间(以秒为单位)。从它我们正在计算hours,minutes和seconds,并构造一个字符串以表示所需格式的持续时间。FORMAT用于确保在分钟或秒小于10的情况下有一个前导零。以下是可视化时所有三列的外观:
duration_in_seconds
hours
minutes
seconds
希望这有帮助!
dkqlctbz3#
上述所有解决方案的问题是,它们不会生成格式为hhh:mm的持续时间输出。当你把它格式化为字符串时,对这一列的排序将不起作用。我目前也在为这个问题而挣扎。可惜的是,他们deprecated的格式选项Duration.ToText:
hhh:mm
Duration.ToText
Duration.ToText(duration as nullable duration, optional format as nullable text) as nullable text
3条答案
按热度按时间xtfmy6hx1#
Power Query没有自定义格式来显示数据。如果您让它将数据读取为Duration而不是DateTime,它将显示为[d].hh.mm.ss格式,但仍然不显示总小时数。最终,尽管这并不重要,因为即使您的数据被格式化为在Excel中显示总小时数,它实际上是以天+小时+分钟+秒的形式在内部存储的。所以它在Power Query中如何显示并不重要,因为您可以在任何地方使用小时格式输出数据。
现在,如果您需要使用小时数来计算不是另一个Duration的时间,则可以通过执行以下操作来提取小时数
现在我来看一下,还有一个TotalHours函数,它提供小时数加上mm:ss作为小时数的分数
tjvv9vkg2#
Power BI无法很好地处理这种情况。解决方案可能是将持续时间转换为数字,使其具有可加性(以便您可以执行计算和聚合),并在需要可视化时将其转换为所需的格式(HH:MM:SS)。
Duration
和Time
经常被混淆。当读取此类Excel文件时,列的类型通常为DateTime
,并在“时间”部分添加日期1899-12-31。您可以将列的数据类型更改为Decimal Number,但Excel中的“零点”不幸的是少了一天(1899-12-30),所以你需要从结果中减去1,以获得持续时间的实际“天数”(即0. 25意味着06:00:00)。所以你必须对数据进行一些转换。我会在模型中创建一个新列,以获得我需要的最低粒度的持续时间(在你的例子中是秒)。在Power Query Editor中添加一个自定义列来计算以秒为单位的持续时间(其中
Column1
是原始持续时间列的名称):确保此列的数据类型为“整数”(如有必要,请更改)。这里
9144
秒的计算公式为2 * 3600 + 32 * 60 + 24
或02:32:24
。现在,您可以计算此列的总和,以获得总持续时间(例如,以秒为单位)。但是,当您可视化此列时,不要直接执行此操作,但要采取措施将数据转换为所需的格式。它可以像这样:duration_in_seconds
变量保存上下文中数据的总持续时间(以秒为单位)。从它我们正在计算hours
,minutes
和seconds
,并构造一个字符串以表示所需格式的持续时间。FORMAT用于确保在分钟或秒小于10的情况下有一个前导零。以下是可视化时所有三列的外观:
希望这有帮助!
dkqlctbz3#
上述所有解决方案的问题是,它们不会生成格式为
hhh:mm
的持续时间输出。当你把它格式化为字符串时,对这一列的排序将不起作用。我目前也在为这个问题而挣扎。
可惜的是,他们deprecated的格式选项
Duration.ToText
: