Страницы: 1
RSS
PowerQuery не сохраняет типы данных после Table.ExpandTableColumn?
 
Делал-делал я один запрос, но в итоге вдруг у меня стали вываливаться ошибки. Сначала не понял, почему, но потом разобрался - 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 типы данных слетают:



Это никак не лечится? Или придётся в конце заново изменять типы? Или лучше сначала вообще не изменять типы, а изменть их только в конце?
Изменено: SuperCat - 26.07.2019 22:48:07
There is no knowledge that is not power
 
К столбцам типы не наследуются явно, но данные то свои типы не меняют и их наследуют корректно. В PQ не разу не натыкался на ошибки из-за того, что не правильно задан тип столбца. Это влияет только на вывод итогов например в модель данных. Внутри запроса косяки могут быть только если сами данные не того типа, который вы ожидаете (скажем функция работает с текстом, а вы ей дали на обработку число).
Цитата
SuperCat написал:
Или лучше сначала вообще не изменять типы
Всегда удаляю шаги с автотипизированием и преобразование типов произвожу либо в формулах расчетных столбцов (типа Text.From, Duration.From) либо в конце запроса перед выводом результата.
Иногда использую типизирование с целью выявить ошибочные данные и зачистить строки.
Вот горшок пустой, он предмет простой...
 
Цитата
SuperCat написал:
Но на шаге ExpandedALLROWS типы данных слетают:
такая же проблема... запрос рабоал-работал несколько лет... тут вдруг стал слетать тип тоже на шаге Table.ExpandTableColumn(joinSV, "joinedSV",...
SuperCat (или кто-нибудь), как вы всё-таки решили эту пролему (или от чего она)??
p.s.
нач данные из json (т.е. по сути текст)
Ошибка: "Не удалось преобразовать в число 0.92000"
Изменено: JeyCi - 08.04.2023 08:14:11
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
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...( - это из области фантастики
Изменено: JeyCi - 08.04.2023 18:11:24
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
Alien Sphinx написал:
вроде всегда "слетали" типы при Table.ExpandTableColumn
да, странный какой-то синтаксис в части "column as text":
Код
Table.ExpandTableColumn(table as table, column as text, columnNames as list, optional newColumnNames as nullable list) as table
Изменено: JeyCi - 08.04.2023 11:01:38
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
странный
почему? Это ж имя колонки, которую мы того-самого...
Пришелец-прораб.
 
да если имя, то понятно, думала тип колонки...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1
Наверх