Отчеты об исключениях в Power Query и Power BI; Часть 2. Перехват ошибок в строках для всех столбцов в таблице, раздел 2

Tags: Power BI, Power Query

В первой части этой серии вы узнали, как создавать отчеты об исключениях для столбца в таблице с помощью Power Query в Power BI. Во второй части вы узнали, как запустить этот процесс для всех столбцов в таблице. Эта статья продолжает первый раздел создания отчетов об исключениях для всех столбцов таблицы с помощью Power Query и Power BI.

Необходимое условие

Было бы полезно прочитать первую часть отчета об исключениях в этой статье.

Вы можете скачать набор данных, использованный для этого примера, здесь.

Продолжим с последнего шага

В конце предыдущей части мы получили таблицу, которая содержит все строки в таблице, которая вызвала ошибку в одном или нескольких столбцах в неразвернутой структуре;

 

Хранение ошибки

Помните, что мы хотим сохранить только те столбцы, которые вызвали ошибку. Теперь наши столбцы являются строками, поэтому нам нужно сохранить только те строки, которые вызвали ошибку. И ошибка может возникнуть только в столбце Value, потому что именно там существует значение ячейки. Выберите столбец  Value, а затем Keep Rows -> Keep Errors.

 

Выходная таблица - это таблица со списком всех строк с единственными столбцами, которые вызвали ошибку!

 

Получите подробную информацию об ошибке: try

Поздравляем! Вы сделали сложную часть. Теперь все остальное, как было в части 1. Вам нужно получить подробности об ошибке и добавить пользовательский столбец с попыткой, поскольку выражение даст вам следующее:

try [Value]

 

Новый столбец будет иметь запись с деталями ошибок в каждой строке;

 

Новый столбец после расширения содержит два столбца, где мы  заинтересованы только в столбце Error;

 

В качестве следующего шага разверните столбец Error, чтобы получить три столбца с информацией об ошибке:

 

И вот вывод:

 

И в качестве последнего шага удалите столбец с ошибками, который является столбцом Value. (Если вы не выполните этот шаг, вы получите сообщение об ошибке при загрузке данных в Power BI).

 

Мы не объяснили процесс использования «try» и получения подробностей об ошибке, потому что мы подробно объяснил это в предыдущей части (ссылка). Чтобы узнать больше о процессе получения сведений об ошибках, прочитайте первую часть цикла “Отчеты об исключениях” здесь.

Пользовательская функция: Повторное использование кода

Чтобы получить лучший результат, мы собираемся создать функцию из этого процесса. Функция, которая получает таблицу в качестве входных данных, а также имя KeyColumn и выдает мне все строки ошибок, возникающих во всех столбцах, в качестве выходных данных таблицы.

 

Чтобы создать такую функцию, вам понадобится параметр типа table. Однако, используя графический интерфейс Power Query, на момент написания этой статьи невозможно создать параметр таблицы типов. Мы покажем вам еще один простой способ сделать это.

Создайте функцию без параметров!

Первый шаг - создать функцию из того, что вы сделали в DimCustomer - Error Rows. Щелкните правой кнопкой мыши по этой таблице и затем создайте функцию:

 

Вы получите предупреждение, что эта функция, которую вы собираетесь создать, не имеет каких-либо входных параметров, которые вы найдете в этом? Подтвердите это, нажав Create.

 

 

Давайте вызовем функцию как GetErrorsFromTable (имя функции тоже может содержать пробел, но это сделает наш код намного чище, если мы его избежим);

 

Чтобы узнать больше о пользовательских функциях в Power Query и о том, как их использовать, прочитайте эту статью.

Добавьте параметры в функцию

Теперь, когда функция создана, нажмите на функцию слева и разверните панель формул:

  Самая первая строка кода в строке формул и, более конкретно, раздел в скобках - это то место, где мы должны сделать изменения. Это место, где устанавливаются параметры функции. Чтобы узнать больше о функциях и их определениях кода в M, прочитайте эту статью (ссылка).

Чтобы добавить параметры в существующую функцию, добавьте их в следующем синтаксисе:

 

(<parameter> as <data type>, <parameter> as <data type, …)

 

Таким образом, изменение в первой строке будет следующим:

 

1

= (InputTable as table, KeyColumn as text) => let

 

После внесения этого изменения, установите флажок рядом с панелью формул, и вы получите изменение пользовательского интерфейса функции с принятием двух параметров.

 

Использование параметров в коде

Теперь вам нужно использовать оба параметра в коде, потому что иначе нет смысла иметь параметры. Снимок экрана ниже показывает, где в коде должны быть изменения с соответствующими именами параметров;:

 

Вот весь код функции:



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

= (InputTable as table, KeyColumn as text) => let

Source = InputTable,

#"Kept Errors" = Table.SelectRowsWithErrors(Source, Table.ColumnNames(Source)),

#"Renamed Columns" = Table.RenameColumns(#"Kept Errors",{{KeyColumn, "KeyColumn"}}),

#"Added Custom" = Table.AddColumn(#"Renamed Columns", "Current Row", each _),

#"Added Custom1" = Table.AddColumn(#"Added Custom", "Current Row as a Table", each Record.ToTable([Current Row])),

#"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"KeyColumn", "Current Row as a Table"}),

#"Expanded Current Row as a Table" = Table.ExpandTableColumn(#"Removed Other Columns", "Current Row as a Table", {"Name", "Value"}, {"Name", "Value"}),

#"Kept Errors1" = Table.SelectRowsWithErrors(#"Expanded Current Row as a Table", {"Value"}),

#"Added Custom2" = Table.AddColumn(#"Kept Errors1", "Custom", each try [Value]),

#"Expanded Custom" = Table.ExpandRecordColumn(#"Added Custom2", "Custom", {"Error"}, {"Error"}),

#"Expanded Error" = Table.ExpandRecordColumn(#"Expanded Custom", "Error", {"Reason", "Message", "Detail"}, {"Error.Reason", "Error.Message", "Error.Detail"}),

#"Removed Columns" = Table.RemoveColumns(#"Expanded Error",{"Value"})

in

#"Removed Columns"

После внесения этого изменения вы увидите сообщение, подобное приведенному ниже, подтвердите его, нажав кнопку ОК.

 

Вызов пользовательской функции

Теперь, когда вы создали функцию, вы можете легко вызвать ее и получить сообщение об ошибке. Нам больше не нужно, чтобы DimCustomer - Error Rows больше рассчитывался отдельно. Наличие этого решения означает, что у нас будет два экземпляра одного и того же кода для обнаружения строк ошибок, что приводит к более высокому обслуживанию. Давайте удалим DimCustomer - Error Rows.

 

И мы можем создать его на этот раз, вызвав функцию GetErrorsFromTable. Нажмите на функцию и установите параметры, как показано ниже:

 

Обратите внимание, что вам нужно выбрать таблицу в раскрывающемся списке InputTable, а KeyColumn - это имя с учетом регистра. Результат будет таким, как показано ниже:

 

Просто вызвав эту функцию, мы получим все строки ошибок и столбцы ошибок в таблице. Это имя вызванной функции теперь можно переименовать в DimCustomer - Error Rows.

 

Отчет об исключении

После выполнения всей серверной работы вы можете создать страницу отчета с некоторыми визуализациями, которые служат отчетом об исключении.

Обратите внимание, что в выходных данных таблицы под KeyColumn фактически указан идентификатор строки, а Name - Column Name, вызвавшее ошибку.

 

Мы создали отчет с некоторыми визуализациями, которые показывают количество ошибочных строк по столбцам и некоторым другим факторам:

 

Резюме

В первой части отчета об исключениях (ссылка) вы узнали о том, как создавать отчеты об исключениях для одного столбца в таблице набора данных. Во второй части вы узнали, как получить отчет об исключении, даже если вы не знаете, какой столбец вызывает ошибку. Этот новый метод будет искать во всех строках и во всех столбцах, которые вызывают ошибку. Метод, реализованный в этой статье, в конечном итоге получил функцию, которую можно использовать для любой таблицы для получения вывода строк с ошибками.



No Comments

Add a Comment