Согласованность формата продолжительности запроса мощности

#powerquery #time-format

#powerquery #формат времени

Вопрос:

я использую Power Query в Excel для фильтрации некоторых файлов .txt, извлечения значения времени из каждого и отображения результатов. Проблема заключается в исходных данных, которые поступают в 3 разных форматах:

 3:42.807
0:01:48.19
3:46
  

как я могу преобразовать их в согласованный формат (например, 3: 42.80).
Мне нужно показывать минуты, секунды и, в конечном итоге, миллисекунды.

Я попробовал несколько разных Duration.ToText или Duration.From , но у меня было больше проблем. Также я хотел бы избежать добавления дополнительного столбца только для вычисления формата продолжительности. Возможно ли преобразовать только исходный столбец?

 = Table.TransformColumnTypes(#"Reordered Columns",{{"Time", type duration}})
  

Это формула из Power query, которую я подал в суд на преобразование в duration, но мне не нравится этот формат «d.hh.mm.ss» и т.д. это выдает мне ошибки. Было бы идеально, если бы это был тип длительности, но отображающий только минуты, секунды и миллисекунды (3:41.23)

Любая помощь, пожалуйста?

введите описание изображения здесь

Ответ №1:

Я не думаю, что вы можете изменить отображаемый формат для данного типа столбца в редакторе запросов. Если вам нужен другой формат, вам придется преобразовать его в текстовый столбец.

Вот как я с этим справился:

 let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMrYyMdKzMDBXitWJVjKwMjC0MrHQM7QEc4FyZkqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Time = _t]),
    StandardizeFormat = Table.TransformColumns(Source,{{"Time", each Duration.ToText(Duration.FromText(if List.Count(Text.Split(_, ":")) = 2 then "0:" amp; _ else _)), type text}}),
    TrimZeros = Table.TransformColumns(StandardizeFormat, {{"Time", each Text.TrimEnd(Text.AfterDelimiter(_, "00:0"),"0"), type text}})
in
    TrimZeros
  

if List.Count(Text.Split(_, ":")) = 2 then "0:" amp; _ else _ Часть указывает ему добавлять 0: начало, если еще нет двух двоеточий (чтобы длительность выполнения преобразования не прерывалась).

Комментарии:

1. спасибо за ответ, Алексис. я забыл упомянуть, что 3 временных формата присутствуют в 3 разных файлах Excel. таким образом, каждый файл имеет только 1 тип формата (как на картинке). Также как я могу реализовать свою формулу, чтобы не потерять все предыдущие шаги, которые я сделал (фильтровать строки, разделять текст и т.д.)?

2. Вы можете добавить эти шаги после всех предыдущих шагов. Просто ссылайтесь на любой предыдущий шаг вместо Source .

3. я сделал это. у меня просто проблема, когда формат «0:00» содержит 2 цифры для минут (например, 14:24,98). TrimZero обрезает всю строку, оставляя пустую ячейку

4. = Table.TransformColumns(StandardizeFormat, {{"Column1", each Text.TrimEnd(Text.AfterDelimiter(_, "00:0"),"0"), type text}})

5. Вместо этого вы могли бы использовать "00:" , и это добавило бы к однозначным минутам ноль.