Динамическое переименование полей в Power BI

by Андрей Белобородов
Динамическое переименование полей в Power BI

Если ты прожженный жизнью кликвьюшник, то начиная работать в Power BI, наверняка столкнёшься с той же мыслью, что и я:

А как мне тут переименовать столбцы в одной таблице по значениям из другой?

Другими словами ты захочешь использовать аналог функции «rename fields using mapping ...», которая всем хорошо известна в QlikView.

Порывшись в документации, я не обнаружил ни таблиц мэппинга, ни их аналога в Power BI.

Ну, что ж, отличный повод апнуть свои навыки программирования и написать простенькую функцию «RenameColumnsWithMapping».

Подготовка к работе

Прежде чем начать, давайте создадим подходящие условия. Для этого нам понадобится 2 файла:

  1. Исходная табличка, в которой мы будем переименовывать поля
  2. Таблица мэппинга названий

Я создам эти таблицы в Excel.

Исходная табличка (будет в материалах статьи):

Как видим, в ней отсутствуют имена полей. Это значит, что Power BI они будут иметь названия Column1,Column2,Column3... (ну вы поняли).

Одна и та же табличка может использоваться в разных проектах, более того со временем колонки могут меняться местами, что вообще приведет к стихийному бедствию - придется переделывать скрипт во всех приложениях.

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

Таблица мэппинга (будет в материалах статьи):


Видим, что в ней три колонки:

  1. «Sales_excel» - наименования полей в источнике данных из Excel
  2. «Sales_dwh» - наименования полей в источнике данных из DWH (для примера)
  3. «Sales_pbi» - наименования полей, как они будут выглядеть в Power BI


Теперь давайте загрузим все это в Power BI. Начнем с исходной таблицы:

А теперь и мэппинг:

Далее, нам нужно создать функцию, а затем применить ее к исходной таблице...

Создаем функцию «RenameColumnsWithMapping»

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

Для этого нажимаем правой кнопкой но разделу «Queries», в появившемся окне выбираем «New Query» > «Blank Query».

Переименовываем его в «RenameColumnsWithMapping», а после щелкаем по нему правой кнопкой и выбираем «Advanced Editor».


В редакторе добавляем код, приведенный ниже:

(RenameTable as table, OldColumnNames as list, NewColumnNames as list) =>
let
    RenameList = List.Zip({OldColumnNames, NewColumnNames}),
    RenameColumns = Table.RenameColumns(RenameTable, RenameList)
in
    RenameColumns


После того, как вы нажмете «Done», этот пустой запрос автоматически преобразуется в функцию, удобно не правда ли?


Итак, мы создали функцию, которая принимает 3 параметра:

  1. «RenameTable» - исходная таблица, в которой будем переименовывать поля
  2. «OldColumnNames» - список со старыми названиями полей
  3. «NewColumnNames» - список с новыми названиями полей


Теперь давайте применим ее для нашей таблицы «Orders»:

Пояснения к скриншоту:

  1. Переходим в таблицу «Orders»
  2. Заходим в «Advanced Editor»
  3. Применяем функцию «RenameColumnsWithMapping»

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

Ну вот и все! Смотрим результат!

Было:

Стало:




Материалы статьи (скачать):

  1. PBIX-файл с реализацией
  2. Excel-файл с исходными данными и мэппингом

Качайте, пользуйтесь, делитесь статьей :)

Если вам понравилась статья или у вас есть идеи как сделать это лучше, пишите мне на почту: me@andbel.it

December 4, 2018
by Андрей Белобородов
Разработка
Power BI