Страницы: 1
RSS
Обработка ошибок в Power Query, В зависимости от последовательности шагов результат разный
 
Загружаю текстовый файл с помощью Power Query.
Если сначала удаляю строки, содержащие ошибки в столбце Tran Date, а потом снимаю в фильтре галочку с null, всё Ok.
Если сначала снимаю в фильтре галочку с null, то внизу показывает одну строку с Error, которую удалить нельзя.
И, похоже, часть строк пропадает.
Почему в этом месте важна последовательность действий?
Собственно, обрабатываемый файл:GL Jan-Mar.TXT (17.08 КБ)Спасибо.
 
https://docs.microsoft.com/ru-ru/powerquery-m/m-spec-error-handling
 
s_bag, потому что у вас перед этим идет шаг определения типа. на этом шаге у вас возникает ошибка из-за того, что данные (слова "Tran Amount") не распознались как дата.
Если вы не избавились от этой ошибки, то при включении фильтра по null у вас происходит явное вычисление значений столбца для сравнения с nul. Оно длится до первой ошибки, далее операция прерывается, поэтому всё, что после первой ошибки, не показывается. Удалить ее не получается, потому что это такая "вложенная" ошибка.
В общем, обрабатывать ошибки желательно прямо сразу после их возможного возникновения, во избежание
F1 творит чудеса
 
Доброе время суток
Может лучше так?
Скрытый текст
 
Максим, спасибо за разъяснения.
Андрей, это высший пилотаж! Пошел изучать код.
 
Цитата
s_bag написал:
это высший пилотаж
Ну, я бы так не сказал. Только либо имея чёткий стандарт формирования таких файлов, либо достаточную базу фактических файлов, можно сказать достаточно ли для идентификации строки с данными в файле по существованию не пустой строки между двумя символами /.
 
Народ, а есть ли в PQ на M возможность прописать обработчик ошибок , который будет например при возникновении ошибки на каком -то шаге , заменять ошибку на null или на что-то другое?
 
Цитата
t330 написал:
Народ
И вам - здравствуйте, человечище!
Что - настолько лень прочитать в спецификации языка Error Handling? Microsoft считает, что на это достаточно трёх минут.
 
Андрей, спасибо за ссылку, только я не смог применить ...

Например, хочу сделать так, чтобы ошибка для преобразовании типа данных обрабатывалась как в коде ниже, но не срабатывает
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица3"]}[Content],
    #"Измененный тип" = try Table.TransformColumnTypes(Источник,{{"Num", Int64.Type}}) otherwise Table.TransformColumnTypes(Источник,{{"Num", type text}})
in
    #"Измененный тип"
Изменено: t330 - 31.08.2020 16:23:53 (добавлен файл примера)
 
Цитата
t330 написал:
ошибка для преобразовании типа данных
где? По вашему примеру, если поменять имя таблицы на Таблица3_2, то всё прекрасно загружается. Правда, вы сделали sefl reference таблицу, ну, это уже не та проблема.
Или вы хотели разобрать обработку ошибки, когда неверный источник?
 
Все равно не срабатывает
Вот видео на 1 минуту  https://radikal.ru/video/WUyGMi7CDdE
Изменено: t330 - 31.08.2020 17:58:53
 
Цитата
Андрей VG написал:
где? По вашему примеру, если поменять имя таблицы на Таблица3_2, то всё прекрасно загружается. Правда, вы сделали sefl reference таблицу, ну, это уже не та проблема.Или вы хотели разобрать обработку ошибки, когда неверный источник?
Да , если в источнике заменить Таблица3 на Таблица3_2 , то якобы мой неправильный код сработает. На самом деле нет, так как в этом случае в самом источнике (Таблица3_2) в столбце Num просто не возникает никаких ошибок при изменении типа переменной с Text на int.64 , потому что в этом столбце только цифры и пустые ячейки. В общем, мой "обработчик" просто ничего не делает.  
 
Цитата
t330 написал:
не возникает никаких ошибок при изменении типа переменной с Text на int.64
Суть не в этом. ОБработка ошибок начинается только тогда, когда есть ошибка. Table.TransformColumnTypes разве возвращает ошибку? Функция возвращает таблицу. Но вот ошибки содержаться в некоторых или всех ячейках столбца, для которого был указан не верный тип данных. Следовательно, нужно отдельно проверять, содержит ли столбец какую-нибудь ошибку и на основании этого менять указание типа данных. Иначе никак.
 
Цитата
Андрей VG написал:
Следовательно, нужно отдельно проверять, содержит ли столбец какую-нибудь ошибку и на основании этого менять указание типа данных. Иначе никак.
Научите пожалуйста как это сделать?
Вот такой код не работает


И еще вы сказали, что можно сделать обработку ошибок , если к примеру у меня ошибка появляется на уровне слияния запросов из-за того, что например в одном запросе поменялись какие-то источники (поменялся состав столбцов в файлу одного запроса) ... Не сочтите за наглость , но как это прописать?
Код
let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица3_2"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник, {each try {"Num", Int64.Type} otherwise  {"Num", type text} })
in
    #"Измененный тип"  



 
Цитата
t330 написал:
Вот такой код не работает
И не должен. Тут два пути, либо попытаться указать тип числовой и проверить столбец на ошибки, или проверить, что столбец содержит не целые числа (в примере просто числа).
 
Цитата
Андрей VG написал:
И не должен. Тут два пути, либо попытаться указать тип числовой и проверить столбец на ошибки, или проверить, что столбец содержит не целые числа (в примере просто числа).
Спасибо!
Страницы: 1
Читают тему (гостей: 2)
Наверх