吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 837|回复: 5
收起左侧

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

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


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


[JavaScript] 纯文本查看 复制代码
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
    筛选时间


微信图片_20220823145355.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

 楼主| 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不宜嵌套太多,能分步尽量分布做,否则后续再读头疼的可以自己(变态大佬除外)。

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

 楼主| 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
    已添加自定义
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表