1

问候亲爱的同志们,

我有文本格式的持续时间数据HHHH:MM:SS

当我使用 Duration.FromText() 函数时,它转换3873:05:433873.05:42:00,这是不正确的。

4161:51:05它在中心段大于 30 的所有值上返回错误。

根据文档,这里 [-]hh:mm[:ss]是一个有效的格式选项,但它没有提示如何应用格式掩码以便正确解析文本。

如何让 Duration.FromText() 正确解释3873:05:43

4

2 回答 2

2

如果在一行中,您可以这样做:

TransfromDur = Table.TransformColumns(Source, {{"Column1", each #duration(0,Number.From(Text.Split(_,":"){0}),Number.From(Text.Split(_,":"){1}),Number.From(Text.Split(_,":"){2})), type duration}})

你会从 3873:05:43 得到 161.09:05:43

这个想法是通过用“:”符号将文本解析为小时、分钟和秒,然后将结果提供给#duration(days,hours,minutes,seconds)

AFAIK,这个符号 [-]hh:mm[:ss] 在将其转换为持续时间时只允许两位数。

或者您可以通过几个步骤来完成:

let
    Source = Excel.CurrentWorkbook(){[Name="dftext"]}[Content],
    SplitIt = Table.SplitColumn(Table.TransformColumnTypes(Source, {{"Column1", type text}}),"Column1",Splitter.SplitTextByDelimiter(":"),{"Column1.1", "Column1.2", "Column1.3"}),
    ChangeType = Table.TransformColumnTypes(SplitIt,{{"Column1.1", Int64.Type}, {"Column1.2", Int64.Type}, {"Column1.3", Int64.Type}}),
    AddDur = Table.AddColumn(ChangeType, "Column1", each #duration(0,[Column1.1],[Column1.2],[Column1.3])),
    RemCols = Table.RemoveColumns(AddDur,{"Column1.1", "Column1.2", "Column1.3"})
in
    RemCols
于 2015-12-02T18:11:11.907 回答
1

似乎Duration.FromText("0.3873:05:43")应该可以正常工作并返回与#duration(0, 3873, 05, 43).

我将把它添加到我们的错误积压中。很抱歉您遇到了这个问题!

如果不看代码,我不太清楚3873:05:43. 我们可以修复该功能或更新文档。


更新(从一年前开始):我们在内部反复讨论了这个问题,并决定记录允许的范围:

此函数可以解析以下格式:

(-)hh:mm(:ss(.ff))
(-)ddd(.hh:mm(:ss(.ff))) 
  • ddd:天数。
  • hh:小时数,介于 0 到 23 之间。
  • mm:分钟数,介于 0 和 59 之间。
  • ss:秒数,介于 0 到 59 之间。
  • ff:秒的分数,介于 0 和 9999999 之间。

(所有范围都包括在内)

这个新文档已在 Power Query / Power BI Desktop 中发布,它会在 MSDN 上发布……有时……

于 2015-12-05T04:01:47.137 回答