cqwcns 发表于 2022-8-23 14:55

Power Query(M语言),在原列进行格式转换的问题

我有一列数据为持续时间(duration)。
首先我需要做一下筛选,排序等操作。
最终我希望它显示的格式是Duration.ToText(duration,"d日h时m分s秒")这样的中文格式。
我不知道应该怎么写,我想到的思路是添加一个新列来做格式转文本,在删除旧列,这明显不科学。


所以,求教,这种需求,有没有在原列实现转换的?或者其他更好的方法?
感谢指教


let
    源 = #table({"持续时间"},{{#duration(17, 19, 11,32)},{#duration(16, 8, 35,5)},{#duration(15, 7, 32,33)},{#duration(12, 0, 25,8)},{#duration(1, 4, 44,42)},{#duration(10, 15, 46,11)},{#duration(11, 17, 14,39)},{#duration(15, 9, 39,15)},{#duration(20, 13, 38,18)},{#duration(4, 17, 18,24)},{#duration(6, 2, 22,19)},{#duration(15, 16, 13,24)},{#duration(9, 15, 41,10)},{#duration(7, 22, 6,23)},{#duration(3, 12, 54,14)},{#duration(19, 19, 47,59)},{#duration(17, 11, 31,19)},{#duration(6, 17, 33,21)},{#duration(4, 12, 46,7)},{#duration(11, 5, 36,21)},{#duration(12, 5, 3,58)},{#duration(19, 1, 1,46)},{#duration(20, 19, 5,24)},{#duration(16, 0, 7,44)},{#duration(5, 4, 58,16)},{#duration(18, 20, 29,20)},{#duration(16, 18, 39,42)},{#duration(12, 8, 20,43)},{#duration(17, 21, 35,36)},{#duration(10, 23, 22,58)}}),
    筛选时间 = Table.SelectRows(源,each [持续时间] > #duration(10,0,0,0))
in
    筛选时间

放羊的狼 发表于 2022-8-23 15:03

Table.TransformColumns(源,{"持续时间",each _})

cqwcns 发表于 2022-8-23 15:40

放羊的狼 发表于 2022-8-23 15:03
Table.TransformColumns(源,{"持续时间",each _})

= Table.TransformColumns(源,{"持续时间", each Duration.ToText(_, "d日h时m分s秒")})

报错Expression.Error: Duration.ToText 的 "format" 参数不起作用,不再受支持。

不知道哪里写错了,请指教,谢谢

cqwcns 发表于 2022-8-23 15:51

这样可以实现,但代码太冗长。

= Table.TransformColumns(来源, {"持续时间", each Text.From(Duration.Days(_)) & "日" & Text.From(Duration.Hours(_)) & "时" & Text.From(Duration.Days(_)) & "分" & Text.From(Duration.Days(_)) & "秒"})

放羊的狼 发表于 2022-8-23 16:35

cqwcns 发表于 2022-8-23 15:51
这样可以实现,但代码太冗长。

= Table.TransformColumns(来源, {"持续时间", each Text.From(Duration. ...

解决问题才是目的,Duration.ToText微软显示二参已经不能用了,而且PQ不宜嵌套太多,能分步尽量分布做,否则后续再读头疼的可以自己(变态大佬除外)。

cqwcns 发表于 2022-8-24 08:32

分享另一种实现方法:

let
    源 = #table({"持续时间"},{{#duration(17, 19, 11,32)},{#duration(16, 8, 35,5)},{#duration(15, 7, 32,33)},{#duration(12, 0, 25,8)},{#duration(1, 4, 44,42)},{#duration(10, 15, 46,11)},{#duration(11, 17, 14,39)},{#duration(15, 9, 39,15)},{#duration(20, 13, 38,18)},{#duration(4, 17, 18,24)},{#duration(6, 2, 22,19)},{#duration(15, 16, 13,24)},{#duration(9, 15, 41,10)},{#duration(7, 22, 6,23)},{#duration(3, 12, 54,14)},{#duration(19, 19, 47,59)},{#duration(17, 11, 31,19)},{#duration(6, 17, 33,21)},{#duration(4, 12, 46,7)},{#duration(11, 5, 36,21)},{#duration(12, 5, 3,58)},{#duration(19, 1, 1,46)},{#duration(20, 19, 5,24)},{#duration(16, 0, 7,44)},{#duration(5, 4, 58,16)},{#duration(18, 20, 29,20)},{#duration(16, 18, 39,42)},{#duration(12, 8, 20,43)},{#duration(17, 21, 35,36)},{#duration(10, 23, 22,58)}}),
    筛选时间 = Table.SelectRows(源,each [持续时间] > #duration(10,0,0,0)),
    已添加自定义 = Table.TransformColumns(筛选时间, {"持续时间", each Text.Format("#{0}天#{1}时#{2}分#{3}秒",Text.SplitAny(Text.From(_),".:"))})
in
    已添加自定义
页: [1]
查看完整版本: Power Query(M语言),在原列进行格式转换的问题