您如何强制 Duration.FromText 识别特定的受支持格式?
How do you force Duration.FromText to recognize a particular supported format?
亲爱的同志们,你们好,
我有文本格式的持续时间数据 HHHH:MM:SS
。
当我使用 Duration.FromText() 函数时,它将 3873:05:43
转换为 3873.05:42:00
,这是不正确的。
它 returns 4161:51:05
以及中心段大于 30 的所有值上的错误。
根据文档 here [-]hh:mm[:ss]
是一个有效的格式选项,但它没有给出有关如何应用格式掩码以便正确解析文本的提示。
如何让 Duration.FromText() 正确解释 3873:05:43
?
如果在一行中,你可以这样做:
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
似乎 Duration.FromText("0.3873:05:43")
应该 正常工作 和 return 与 #duration(0, 3873, 05, 43)
.
相同的值
我会将其添加到我们的错误待办列表中。抱歉,您 运行 遇到了这个问题!
如果不查看代码,我不太清楚 3873:05:43
发生了什么。我们可以修复功能或更新文档。
更新(从一年前开始):我们在内部反复讨论过这个问题,并决定记录允许的 运行ges:
The following formats can be parsed by this function:
(-)hh:mm(:ss(.ff))
(-)ddd(.hh:mm(:ss(.ff)))
- ddd: Number of days.
- hh: Number of hours, between 0 and 23.
- mm: Number of minutes, between 0 and 59.
- ss: Number of seconds, between 0 and 59.
- ff: Fraction of seconds, between 0 and 9999999.
(All ranges are inclusive)
此新文档已在 Power Query / Power BI Desktop 中发布,它将发布到 MSDN...某个时候...
亲爱的同志们,你们好,
我有文本格式的持续时间数据 HHHH:MM:SS
。
当我使用 Duration.FromText() 函数时,它将 3873:05:43
转换为 3873.05:42:00
,这是不正确的。
它 returns 4161:51:05
以及中心段大于 30 的所有值上的错误。
根据文档 here [-]hh:mm[:ss]
是一个有效的格式选项,但它没有给出有关如何应用格式掩码以便正确解析文本的提示。
如何让 Duration.FromText() 正确解释 3873:05:43
?
如果在一行中,你可以这样做:
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
似乎 Duration.FromText("0.3873:05:43")
应该 正常工作 和 return 与 #duration(0, 3873, 05, 43)
.
我会将其添加到我们的错误待办列表中。抱歉,您 运行 遇到了这个问题!
如果不查看代码,我不太清楚 3873:05:43
发生了什么。我们可以修复功能或更新文档。
更新(从一年前开始):我们在内部反复讨论过这个问题,并决定记录允许的 运行ges:
The following formats can be parsed by this function:
(-)hh:mm(:ss(.ff)) (-)ddd(.hh:mm(:ss(.ff)))
- ddd: Number of days.
- hh: Number of hours, between 0 and 23.
- mm: Number of minutes, between 0 and 59.
- ss: Number of seconds, between 0 and 59.
- ff: Fraction of seconds, between 0 and 9999999.
(All ranges are inclusive)
此新文档已在 Power Query / Power BI Desktop 中发布,它将发布到 MSDN...某个时候...