В Power Query не работает удаление дубликатов для Power BI? Вот решение!

Tags: Power BI, Power Query

Одним из наиболее распространенных преобразований в Power Query является удаление дубликатов. Это преобразование используется во многих сценариях, одним из примеров является создание таблицы измерений с уникальными идентификаторами в ней, поэтому ее можно использовать в качестве источника отношений один ко многим с таблицами фактов на диаграмме отношений Power BI. Удаление дубликатов даст вам уникальный результат, но иногда это не будет работать, как вы ожидаете. Иногда вы применяете удаление дубликатов, но остаются еще дубликаты! как это исправить? Об этом мы и поговорим сегодня.

Как работает удаление дубликатов?

Удаление дубликатов - это преобразование в Power Query, которое удалит дублирующиеся записи в выбранных столбцах. Например, если вы рассматриваете подобный набор данных:

 

Если мы используем преобразование Remove Duplicate в указанном ниже столбце, как:

 

то у нас будет уникальный список стран в качестве следующего результата:

 

Как вы можете видеть, Remove Duplicate - это простой способ получить уникальный список значений в Power Query.

Удаление дубликатов помогает в моделировании

Теперь давайте посмотрим на другой пример. Допустим, у нас есть две таблицы; одна таблица для продукта и одна для продаж. Вот записи таблицы Product:

а вот таблица Sales:

 

Если мы загрузим эти две таблицы как есть в Power BI и попытаемся создать связь между ними, мы получим следующее:

 

Мы получаем ошибку, говоря: «Эти отношения имеют эквивалентность “многие ко многим”. Это следует использовать только в том случае, если ожидается, что ни один из столбцов (Product ID и Product ID) не содержит уникальных значений и что понимается существенно различное поведение отношений «многие ко многим» ».

Если вы ранее не использовали отношения «многие ко многим» в Power BI, мы бы порекомендовали не использовать их и сейчас! Этот тип отношений также называют слабыми отношениями, потому что он подразумевает проблемы моделирования. Вместо этого лучше использовать отношения “один ко многим” и “многие к одному”. В нашем случае нам нужно, чтобы отношение было “один ко многим” из таблицы Product в таблицу Sales, потому что в таблице Product должен быть УНИКАЛЬНЫЙ список продуктов, а не повторяющиеся записи.

Когда удаление дубликатов не работает!

Таким образом, приведенный выше пример показывает, что нам нужно использовать Remove Duplicate, чтобы избавиться от дубликатов записей в таблице продукта. что вы можете сделать в Power Query Editor, как показано ниже. Щелкните правой кнопкой мыши столбец Product ID и выберите Remove Duplicates:

После этого действия все должно быть правильно, но на этот раз вы получите ту же ошибку!

 

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

 

Решение: будьте осторожны с чувствительностью к регистру!

Power Query - чувствительный к регистру язык. В результате два значения 324Abd и 324abd рассматриваются как два разных значения. Это не имеет ничего общего с Remove Duplicate, где-нибудь в Power Query, эти два значения рассматриваются как два разных значения. Если вы собираетесь удалять дубликаты, несмотря на их регистр букв, вам придется применить преобразование, чтобы изменить их все на один регистр: либо на верхний, либо на нижний.

 

После этого вы можете удалить дубликаты, и на этот раз это будет вывод:

 

В результате вы можете легко создавать отношения;

 

Другие сценарии? Символы, которые вы не видите!

Чувствительность к регистру не единственная проблема, когда речь идет об удалении дубликатов. некоторые символы, которых вы не видите, также могут быть проблемой. Например; пробел в конце текста! Если вы измените его на UPPERCASE, у вас все равно останется лишний пробел, из-за которого два текста будут разными. Допустим, приведенный выше пример работает сейчас, но позже, когда мы обновим модель, мы получим ошибку, подобную этой:

 

Как вы можете видеть, в сообщении об ошибке говорится, что идентификатор продукта 324ABD содержит повторяющиеся записи. И вот что мы получили!

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

  

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

 

Теперь, на этот раз, у нас снова будет уникальный список:

 

Внимание: удалите дубликаты для текстовых значений

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

  • используйте преобразование TRIM, чтобы убедиться, что в начале или конце текстовых значений нет лишних пробелов
  • используйте CLEAN-преобразование, чтобы убедиться, что в текстовых значениях нет символов, которые не будут видны
  • используйте UPPERCASE или преобразование в нижний регистр, чтобы убедиться, что вы удалите дубликаты, несмотря на чувствительность к регистру

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

 

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

Резюме

Преобразование Remove Duplicate не имеет проблем, оно просто выполняет ту работу, о которой вы просили: удаление дубликатов. Однако иногда у вас есть дополнительные символы (например, пробел в конце текста), которые необходимо удалить перед использованием  Remove Duplicate. Power Query - это язык, чувствительный к регистру, вам нужно убедиться, что вы используете преобразования в верхнем или нижнем регистре, если хотите удалить дубликаты, несмотря на чувствительность к регистру.




No Comments

Add a Comment