【问题标题】:How to convert hours, minutes, second in PowerBI to minutes?如何将 Power BI 中的小时、分钟、秒转换为分钟?
【发布时间】:2022-01-26 19:32:16
【问题描述】:

大家好,

我有一个名为 Table1 的表格,其中有一列显示学生完成考试所用的时间(如上面的屏幕截图所示)。我可以知道如何将列转换为分钟吗?基本上需要将hrs(如果存在)转换为分钟并将sec转换为分钟。

为了简化输出,如果sec大于等于30sec,则算作1分钟,否则忽略sec。我还是 PowerBI 的新手,任何帮助将不胜感激!

建议答案的输出

【问题讨论】:

    标签: time powerbi format


    【解决方案1】:

    您可以在表格中执行以下步骤以获得所需的输出-

    高级查询编辑器代码

    let
        //... your previous steps,
        // Change the PREVIOUS STEP NAME accordingly in the NEXT line
    
    
        #"Replaced Value1" = Table.ReplaceValue(#"PREVIOUS STEP NAME"," hrs","hrs",Replacer.ReplaceText,{"Time Taken"}),
        #"Replaced Value" = Table.ReplaceValue(#"Replaced Value1"," min","min",Replacer.ReplaceText,{"Time Taken"}),
        #"Replaced Value2" = Table.ReplaceValue(#"Replaced Value"," sec","sec",Replacer.ReplaceText,{"Time Taken"}),
        #"Duplicated Column" = Table.DuplicateColumn(#"Replaced Value2", "Time Taken", "Time Taken - Copy"),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Duplicated Column", "Time Taken - Copy", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), {"Time Taken - Copy.1", "Time Taken - Copy.2", "Time Taken - Copy.3"}),
        #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Time Taken - Copy.1", type text}, {"Time Taken - Copy.2", type text}, {"Time Taken - Copy.3", type text}}),
        #"Replaced Value3" = Table.ReplaceValue(#"Changed Type1",null,"",Replacer.ReplaceValue,{"Time Taken - Copy.1", "Time Taken - Copy.2", "Time Taken - Copy.3"}),
        #"Added Custom" = Table.AddColumn(#"Replaced Value3", "hrs", each if Text.PositionOf([#"Time Taken - Copy.1"],"hrs") > 0 then Text.Replace([#"Time Taken - Copy.1"],"hrs","")
    else if Text.PositionOf([#"Time Taken - Copy.2"],"hrs") > 0 then Text.Replace([#"Time Taken - Copy.2"],"hrs","")
    else if Text.PositionOf([#"Time Taken - Copy.3"],"hrs") > 0 then Text.Replace([#"Time Taken - Copy.3"],"hrs","")
    else "0"),
        #"Added Custom1" = Table.AddColumn(#"Added Custom", "min", each if Text.PositionOf([#"Time Taken - Copy.1"],"min") > 0 then Text.Replace([#"Time Taken - Copy.1"],"min","")
    else if Text.PositionOf([#"Time Taken - Copy.2"],"min") > 0 then Text.Replace([#"Time Taken - Copy.2"],"min","")
    else if Text.PositionOf([#"Time Taken - Copy.3"],"min") > 0 then Text.Replace([#"Time Taken - Copy.3"],"min","")
    else "0"),
        #"Added Custom2" = Table.AddColumn(#"Added Custom1", "sec", each if Text.PositionOf([#"Time Taken - Copy.1"],"sec") > 0 then Text.Replace([#"Time Taken - Copy.1"],"sec","")
    else if Text.PositionOf([#"Time Taken - Copy.2"],"sec") > 0 then Text.Replace([#"Time Taken - Copy.2"],"sec","")
    else if Text.PositionOf([#"Time Taken - Copy.3"],"sec") > 0 then Text.Replace([#"Time Taken - Copy.3"],"sec","")
    else "0"),
        #"Removed Columns" = Table.RemoveColumns(#"Added Custom2",{"Time Taken - Copy.1", "Time Taken - Copy.2", "Time Taken - Copy.3"}),
        #"Changed Type2" = Table.TransformColumnTypes(#"Removed Columns",{{"hrs", Int64.Type}, {"min", Int64.Type}, {"sec", Int64.Type}}),
        #"Added Custom3" = Table.AddColumn(#"Changed Type2", "final_minutes", each ([hrs]*60) + [min] + (if [sec]>=30 then 1 else 0))
    in
        #"Added Custom3"
    

    样本输出-

    【讨论】:

    • 感谢您的解决方案!它适用于大多数数据,但是当涉及到 1hrs 47sec25min1hrs 时,输出是错误的。我应该如何更改它以使其适合所有条件?
    • @weizer,检查更新的代码。如果有帮助,请接受答案并投赞成票。
    • 我尝试了最新的代码,但似乎还是一样,我在我的问题中附上了输出的屏幕截图。 25min1hrs 47sec 仍然会出错
    • 哦,知道了。你有时间在一些其他的模式。我会检查的。你也只有像“25 sec”这样的秒吗?
    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多