Power Query: анализ длительности ЧЧ:ММ:СС, превышающей 24 часа

Я пытаюсь запросить данные из другого источника данных в Excel и получаю ошибки синтаксического анализа для любой длительности, превышающей 24:00:00.

Expression.Error: нам не удалось разобрать литерал Duration. Подробности: 51:33:08

Как правильно указать продолжительность синтаксического анализа excel, например 128:22:13, в качестве продолжительности?

Редактировать:

В настоящее время данные представляют собой текст в формате HH:MM:SS. Я использую инструменты запросов Excel для импорта данных из внешнего источника. Кода нет, и я не пытаюсь преобразовать ячейки на листе. Эти преобразования являются частью Инструментов запросов:

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


person Douglas Gaskell    schedule 11.08.2016    source источник
comment
Можете ли вы опубликовать код синтаксического анализа, который вызывает ошибку?   -  person xidgel    schedule 12.08.2016
comment
Для кого-то с репутацией 1K+ я ожидаю, что вы уже знаете, как задать вопрос о stackoverflow лучше, чем это, даже если вы спешите. Вы можете преобразовать его в текст, добавив ' впереди, или преобразовать в число в запросе.   -  person Slai    schedule 12.08.2016
comment
@xidgel Кода синтаксического анализа нет, я бы опубликовал его, если бы он был. Это автоматический анализ с использованием инструментов Excel Query.   -  person Douglas Gaskell    schedule 12.08.2016
comment
@Slai Пожалуйста, не будь излишне грубым. В настоящее время это текст в формате HH:MM:SS, который необходимо преобразовать в длительность с помощью инструментов запросов. Это не ячейки, которые я редактирую. Я добавил больше деталей.   -  person Douglas Gaskell    schedule 12.08.2016
comment
Вы можете добавить тег Power Query   -  person xidgel    schedule 12.08.2016
comment
@xidgel Спасибо, я даже не знал, что это Power Query. Я нашел это из Microsoft Query   -  person Douglas Gaskell    schedule 12.08.2016
comment
@DouglasGaskell Кстати, если щелкнуть эту маленькую (?) Вверху справа, есть еще несколько справочных страниц. Если вы умеете программировать, вы можете многое сделать с помощью Power Query и языка программирования M!   -  person Carl Walsh    schedule 12.08.2016


Ответы (2)


У нас есть библиотечная функция Duration.FromText, но документировано, что она разрешает только от 0 до 23 часа. Эта функция применяется «под капотом», когда вы меняете тип с текста на продолжительность.

К счастью, у конструктора #duration такого ограничения нет, поэтому вот простая небольшая функция синтаксического анализа, которую вы можете использовать.

let
    DurationFromYourText = (text as text) as duration => let
        Split = Text.Split(text, ":"),
        AsNumbers = List.Transform(Split, Number.FromText),
        Duration = #duration(0, AsNumbers{0}, AsNumbers{1}, AsNumbers{2})
    in
        Duration,
    Invoked = DurationFromYourText("128:22:13")
in
    Invoked
person Carl Walsh    schedule 12.08.2016
comment
Спасибо, Карл. Я новичок в Excel, но не в программировании. Куда бы я на самом деле поместил этот код в Excel, чтобы иметь возможность использовать его в Power Query? Или куда мне пойти, чтобы добавить новый тип в Power query. - person Douglas Gaskell; 12.08.2016
comment
@DouglasGaskell Вы можете вставить эту функцию в расширенный редактор (будьте осторожны с запятыми, так как у нас строгий синтаксис). Затем вы можете нажать «Добавить пользовательский столбец» с помощью = DurationFromYourText([Total Duration]). Если вы погуглите, как создавать собственные функции Power Query/M, вы найдете множество сообщений в блогах, в которых рассказывается более подробно, чем я. Возможно, mattmasson. com/2014/11/ подходит для начала? - person Carl Walsh; 12.08.2016
comment
@DouglasGaskell вот краткое руководство по M, которое может быть более полезным для изучения языка запросов M, чем сообщения в блоге, ориентированные на Excel: msdn.microsoft.com/en-us/library/mt270235.aspx - person Carl Walsh; 12.08.2016

Вы можете разделить текст на два или более столбца https://support.office.com/en-us/article/Split-a-column-of-text-Power-Query-5282d425-6dd0-46ca.-95bf-8e0da9539662#__toc354843579

После этого вы можете разделить столбец часов на 24, чтобы получить дни, и модуль 24, чтобы получить оставшиеся часы. Для мода вам, возможно, придется изменить некоторые языки формул Power Query M https://msdn.microsoft.com/en-us/library/mt253344.aspx

person Slai    schedule 11.08.2016