#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:"
, и это добавило бы к однозначным минутам ноль.