Для следующей проблемы я нашел решение, которое работает в PowerBI (особая благодарность Marco Vos).Теперь я понимаю, что для моих целей было бы удобнее, если бы этот расчет уже выполнялся PowerQuery.
Что я хочу сделать:
Производственная линия записывает метку времени в файл CSV при запуске события (например, запуск машины, остановка машины и т. Д.).Файл CSV обрабатывается PowerQuery таким образом, что все даты начала доступны в одном столбце таблицы.Столбец называется «Начало события».
Для дальнейшего анализа событий машины, я хотел бы добавить еще один столбец «Конец события», который также содержит дату окончания каждого события.Дата окончания не указывается в файле CSV, но она совпадает с датой начала следующего события.
Так что мне нужно сделать в PoweryQuery, чтобы создать пользовательский столбец, который принимает в каждой строке значение«Дата начала» из следующей строки и поместите ее в текущую строку.
То, что я пробовал:
Я пытался использовать тот же принцип, который был дан Марко Восом в моей исходной теме: Эквивалент Sumif в PowerBI не работает должным образом с функцией DAX
НО PowerQuery сообщает, что не знает таких выражений, как CALCULATE.
Кто-нибудь может поддержать эту тему?
Отредактировано:
КомуЧтобы приблизиться к решению и показать вам проблему, с которой я в данный момент сталкиваюсь, я попробовал следующий код с очень простой таблицей: Таблица содержит порядковый номер от 1 до 10.000 в столбце A («ID»).Чтобы создать столбец B («ID-1»), который должен включать «порядковый номер - 1», я использовал следующий код, основанный на комментарии Оллиса.
Обратите внимание: я не могу загрузить таблицу, потому что каждыйзагрузка заблокирована нашим ИТ-отделом.
let
Source = Excel.Workbook(File.Contents("C:\Users\machine2321\Desktop\ID_sample.xlsx"), null, true),
Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ID", Int64.Type}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Added ID-1" = Table.AddColumn(#"Added Index", "ID-1", each try #"Added Index"[ID]{[Index]+1} otherwise null),
#"Removed Index" = Table.RemoveColumns(#"Added ID-1",{"Index"})
in
#"Removed Index"
Проблема, которую я распознаю, заключается в следующем:
Обработка этой простой таблицы с помощью PowerQuery в Excel занимает уже несколько минут.В исходном запросе я обрабатываю более 2000 файлов, каждый из которых содержит до 1000 событий.Используя описанный выше подход, исходный запрос выполняется часами, прерывается и возвращает сообщение «Неожиданная ошибка» в конце.
Любая подсказка, почему код требует такой большой производительности обработки?