PowerQuery заменяет текстовые значения множественным оператором If - PullRequest
0 голосов
/ 19 января 2020

Используя PowerQuery, у меня есть столбец с длинными описаниями RAG, например, «Нет значительных проблем [зеленый]», который я хочу заменить на R, A или G на основе текста или оставить, как есть, если совпадение не найдено.

Следующий код работает для Green, но не заменяет оператор Amber. Я точно скопировал текст.

= Table.ReplaceValue(#"Reordered Columns",each[RAGQuality],each if [RAGQuality]="No Significant Issues [Green]" then "G" else each if [RAGQuality]="Significant Issues [Amber]" then "A" else [RAGQuality], Replacer.ReplaceText,{"RAGQuality"})

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Это добилось цели:

= Table.ReplaceValue(#"Reordered Columns",each[RAGQuality],each if Text.Contains([RAGQuality], "[Red]") then "n" else if Text.Contains([RAGQuality], "[Amber]") then "u" else if Text.Contains([RAGQuality], "[Green]") then "l" else [RAGQuality], Replacer.ReplaceText,{"RAGQuality"})

И это более подходящее решение, чем поиск каждого текста для замены, поскольку теперь легко редактировать имена столбцов для других 5 столбцов, у всех из которых есть [Красный] или [Янтарный ] или [Зеленый] в качестве основного текста, но оставшийся текст отличается

0 голосов
/ 19 января 2020

Я думаю, else each if, возможно, должно быть else if. Попробуйте:

= Table.ReplaceValue(#"Reordered Columns", each [RAGQuality], each if [RAGQuality] = "No Significant Issues [Green]" then "G" else if [RAGQuality] = "Significant Issues [Amber]" then "A" else [RAGQuality], Replacer.ReplaceText, {"RAGQuality"})
  • Я думаю, ваш код выполняет сравнение с учетом регистра (и поэтому, например, не заменит "No significant issues [Green]" на "G"). Это может быть именно то, что вы хотите, но я упоминаю об этом на случай, если это не так. Comparer.OrdinalIgnoreCase может использоваться для сравнения без учета регистра.
  • Кажется, в коде нет выражения else if для R / [Red], но, возможно, вы не получили это еще далеко.
  • Возможно, вы захотите взглянуть на Record.FieldOrDefault, который может уменьшить количество if проверок, которые вы делаете (или создать какую-то record или list замен, которые вы нужно сделать, а потом просто l oop над ним).
...