Делал-делал я один запрос, но в итоге вдруг у меня стали вываливаться ошибки. Сначала не понял, почему, но потом разобрался - PowerQuery после группировки (например, суммирование) не сохраняет типы данных, которые я присвоил столбцам в предыдущих шагах. Например, есть такая табличка:
Запрос PowerQuery:
Код
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ChangedType = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Date1", type date}, {"Sum", Int64.Type}}),
GroupedRows = Table.Group(ChangedType, {"ID"}, {{"SUM_GROUP", each List.Sum([Sum]), type number}, {"ALL_ROWS", each _, type table}}),
ExpandedALLROWS = Table.ExpandTableColumn(GroupedRows, "ALL_ROWS", {"ID", "Date1", "Sum"}, {"ALL_ROWS.ID", "ALL_ROWS.Sum", "ALL_ROWS.Date1"})
in
ExpandedALLROWS
На шаге ChangedType всё ОК:
Но на шаге ExpandedALLROWS типы данных слетают:
Это никак не лечится? Или придётся в конце заново изменять типы? Или лучше сначала вообще не изменять типы, а изменть их только в конце?
К столбцам типы не наследуются явно, но данные то свои типы не меняют и их наследуют корректно. В PQ не разу не натыкался на ошибки из-за того, что не правильно задан тип столбца. Это влияет только на вывод итогов например в модель данных. Внутри запроса косяки могут быть только если сами данные не того типа, который вы ожидаете (скажем функция работает с текстом, а вы ей дали на обработку число).
Цитата
SuperCat написал: Или лучше сначала вообще не изменять типы
Всегда удаляю шаги с автотипизированием и преобразование типов произвожу либо в формулах расчетных столбцов (типа Text.From, Duration.From) либо в конце запроса перед выводом результата. Иногда использую типизирование с целью выявить ошибочные данные и зачистить строки.
SuperCat написал: Но на шаге ExpandedALLROWS типы данных слетают:
такая же проблема... запрос рабоал-работал несколько лет... тут вдруг стал слетать тип тоже на шаге Table.ExpandTableColumn(joinSV, "joinedSV",... SuperCat (или кто-нибудь), как вы всё-таки решили эту пролему (или от чего она)?? p.s. нач данные из json (т.е. по сути текст) Ошибка: "Не удалось преобразовать в число 0.92000"
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
JeyCi, да вроде всегда "слетали" типы при Table.ExpandTableColumn. Ну если только на этапе добавления колонки joinedSV с таблицами (Table.AddColumn) вы явно не указали типы для колонок этих таблиц: Table.AddColumn(table as table, newColumnName as text, columnGenerator as function, optional columnType as nullable type) as table например
Код
#"Invoked Custom Function" =
Table.AddColumn(
Source,
"AddAndMult",
each AddAndMult([x], [y]),
type table [Operation=number, Result=number]
)
вот источник Еще Table.Combine вроде бы сохраняет типы (вдруг такой вариант вам тоже подойдет).
JeyCi написал: Ошибка: "Не удалось преобразовать в число 0.92000"
вычленила проблемные строки, препарирую код, сама очень удивлена: в текстовом поле с цифрами заменила разделитель (целой и дробной части) точку на разделитель запятую, принудительно задала тип "Десятичное" ==> всё OK ! (пока что == сейчас всковырну рабочий файл)... p.s. просто удивительно, что типы данных до 17.03.2023 моих данных сами неявно приводятся к норме в PQ-запросе, а после этой даты - Error... хотя входящий dataflow вроде не менялся !! и в настройках ОС стоит (как и раньше) явное задание точки для разделителя дробной и запятой... Office2016+PQ ru-версии... == может, какой-то bug по локали вдруг вылез ни с того ни с сего 20.03.2023? -- то ли у pq, то ли у microsofta что-то зашито на конкретную дату? - выглядит, как неприятная неожиданность (не хочется говорить "вирусняк"?) вряд ли источник данных начал другую точку давать в одном поле dataflow...( - это из области фантастики
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)