У Power Query ви можете замінити одне значення на інше у вибраному стовпці, певних значеннях або всьому значенні в клітинці. Ми будемо використовувати цю функцію для повної або часткової заміни тексту. Тож почнемо!
Зображення вище представляє наші дані, що складаються з кількох текстових рядків. У нас також є список заміни, який ви можете побачити нижче, який містить вигляд Значення, а потім те, що його замінює. Деякі значення ми хочемо замінити повністю, а інші – частково, але обидва перераховані тут.
Спочатку перейдіть на вкладку «Трансформування» , виберіть «Замінити значення» та натисніть «ОК» у вікні «Замінити значення» вище. Після цього ми відкриємо та використаємо вікно нижче.
Замінити текст у наборі даних LuckyTemplates
Ми хочемо шукати кожне значення в стовпці імені, тому ми вводимо кожне [Назва], кожне поруч із джерелом у четвертому рядку.
Далі ми хочемо виконати умовну заміну залежно від того, що є в нашому списку заміни. Якщо ми можемо відповідати , ми хочемо повністю замінити його.
А якщо ні, ми хочемо шукати часткові заміни тексту. Отже, ми продовжуємо, вводячи if List.Contains( Replacements, ,(“Name”) .
Тепер це не спрацює, оскільки наш список замін, як ми бачили раніше, містить список із вкладеним списком. І кожен перший пункт у списку – це те, що ми шукаємо.
Таким чином, нам потрібно оновити цей код і перетворити наші заміни на List.Transform( Replacements, List.First). Ми перемістили його на новий рядок і тепер маємо зображення нижче.
Замініть текст у LuckyTemplates відповідними елементами
Тому ми змінили наш список замін, і ми зберігаємо лише перші елементи, те, що ми шукаємо. Якщо він містить те, що міститься в стовпці імені, ми повинні виконати повнотекстову заміну, і ми можемо використати ListReplaceMatchingItems , щоб отримати це замінене значення.
Тож у наступному рядку ( 6-й рядок ) ми вводимо List.ReplaceItems . Йому потрібен список, тому ми введемо в нього ці фігурні дужки, стовпець «Ім’я» та список замін . І ми можемо зробити цей регістр нечутливим, додавши Compare.OrdinalIgnoreCase .
Ця дія поверне список з одним елементом і значенням, на яке його потрібно замінити. Щоб отримати це, ми можемо використати оператор доступу до елемента . І в цих фігурних дужках ми посилаємося на його першу позицію, 0 .
Інакше положення
Тепер речення else буде подібне до речення then , тому давайте скопіюємо попередній синтаксис і вставимо його в наступний рядок. Не забудьте поставити else на початку.
Text.Split
Замість Name нам потрібно перевірити, чи є часткова відповідність, тому ми розділимо рядок у стовпці name. Таким чином, ми можемо використовувати Text.Split і розділити це значення на пробіли. А оскільки він поверне список, немає потреби додавати сюди ці фігурні дужки.
Замінити текст у LuckyTemplates: Text.Combine
Оскільки він замінить лише відповідні елементи, ми повинні зібрати всі ці слова назад в один рядок. Потім я оберну Text.Combine навколо нього та додам пробіл, який ми видалили, разом із комою.
Нарешті ми натискаємо «Готово» внизу вікна розширеного редактора, і ми отримуємо таблицю нижче.
Наша таблиця, однак, має тип Будь-який. Щоб це виправити, нам потрібно змінити цей замінник на ReplaceText замість ReplaceValue і натиснути цю позначку, щоб завершити зміни.
Висновок
З деякою винахідливістю ми створили функцію, яка може виконувати умовну повну та часткову заміну тексту на основі списку значень. І ми завершили процес заміни тексту в Power in BI лише за один крок!
Головне – створити, який виконує умовну заміну залежно від того, що є в нашому списку заміни. Якщо він може відповідати всьому рядку, він замінює його повністю. А якщо ні, він шукає часткові заміни тексту.