从Excel导入数据时,在Power BI的Power Query编辑器中转换为时间格式

ztigrdn8  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(222)

我在EXCEL表中有一些数据,其中有总工作时间和实际工作时间,并且类似于%s形式的持续时间,如下面提到的屏幕截图:

现在,我将在POWER BI中使用此Excel文件并显示相同的持续时间和%s。但不幸的是,在PowerBI中,数据类型被视为文本,因此无法将其转换为Excel文件的格式。如果我尝试将其更改为日期或日期/时间,十进制或持续时间,则会抛出错误。我需要执行计算,例如所有持续时间的总和等,
以下是我转换为持续时间数据类型时的一种错误类型,同样,它显示了我尝试的所有数据类型的错误。

感谢您的帮助,谢谢!

ipakzgxi

ipakzgxi1#

对于小时组件,持续时间文字的最大值只能为23。否则,您必须自己创建该值。
您可以添加自定义列:

您需要更改公式中的列名以适合您的实际数据

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQ2tDIytTI2VorViVYyMbQyMLYyNAFzDI0srEzMrQwMlGJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Time = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Time", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Duration", each 
      let 
        Split = List.Reverse(List.Transform(Text.Split([Time],":"),each Number.From(_))),
        sec = Split{0},
        min = Split{1},
        hrs = Number.Mod(Split{2},24),
        dys = if List.Count(Split)=4 
                then Split{3} 
                else Number.IntegerDivide(Split{2},24)
      in  
        #duration(dys,hrs,min,sec), type duration)
in
    #"Added Custom"

或者你可以在不添加额外列的情况下就地更改它:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQ2tDIytTI2VorViVYyMbQyMLYyNAFzDI0srEzMrQwMlGJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Time = _t]),
    #"Transform to Duration" = Table.TransformColumns(Source, {"Time", (c)=> 
      let 
        Split = List.Reverse(List.Transform(Text.Split(c,":"),each Number.From(_))),
        sec = Split{0},
        min = Split{1},
        hrs = Number.Mod(Split{2},24),
        dys = if List.Count(Split)=4 
                then Split{3} 
                else Number.IntegerDivide(Split{2},24)
      in  
        #duration(dys,hrs,min,sec)}),
    #"Set Data Type" = Table.TransformColumnTypes(#"Transform to Duration", {"Time", type duration})

in
    #"Set Data Type"

结果

46scxncf

46scxncf2#

我找到了解决办法。
添加新列并更新该自定义列的以下M代码:

Number.FromText ( 
    Text.BeforeDelimiter([duration],":") 
    ) * 60 * 60
+ Number.FromText ( 
    Text.BetweenDelimiters([duration], ":", ":" ) 
    ) * 60
+ Number.FromText ( 
    Text.AfterDelimiter([duration], ":", {0, RelativePosition.FromEnd})  
    )

欲了解更多详情,请查看此链接:https://community.powerbi.com/t5/Power-Query/Convert-to-Time-Format-in-the-Power-Query-Editor-in-Power-BI/m-p/3178431#M102141
如果我说错了,请纠正我,谢谢!

相关问题