Заменить или заменить с помощью DAX или редактора запросов - Power BI - PullRequest
0 голосов
/ 24 октября 2018

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

Например:

a#123456; 12341 becomes 123456;12341
a123456 12341bd becomes 123456;12341
a2017d  12341ds becomes 12341
a123456/12341bd becomes 123456;12341
n/a becomes (empty)

В основном я очищаю свои данные здесь:

  1. Я удалю любой символ, который не является числом.
  2. Номер действителен, только если существует как минимум 5 последовательных чисел.
  3. На входе для дифференциации идентификатора пробел или ";"или ',' или '/' могли быть использованы.В некоторых случаях будут присутствовать несколько идентификаторов, не ограничиваясь двумя.
  4. Чтобы сохранить его неизменным, я заменю все эти разъемы на ";"

Примечание:- Мои шаги могут быть неверными, но я ожидаю получить ожидаемые результаты из этих данных.

Как мы можем сделать это с помощью DAX или редактора запросов в Power BI?

1 Ответ

0 голосов
/ 24 октября 2018

Я попытаюсь сделать это в два этапа.

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

Text.Remove([Raw], List.Transform({33..43,60..255}, each Character.FromNumber(_)))

При этом используется нумерация Windows-1252 , но выможно просто написать большой список символов для удаления с помощью функции Text.Remove.

Этот пользовательский столбец теперь выглядит следующим образом:

Custom
123456; 12341
123456 12341
2017  12341
123456/12341
/

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

Функция Text.SplitAny позволяет указать несколько разделителей.Например, формула Text.SplitAny("1;23 4.5-6/ 7:8,9", " ,-./:;") вернет {"1","23","4","5","6","","7","8","9"}.

Как только у нас будет список подстрок, мы можем отфильтровать те, которые нам не нужны, с помощью List.Select, а затемобъединить их из списка подстрок в одну строку, используя Text.Combine.

Собрав все это вместе, мы получим следующую формулу

Text.Combine(List.Select(Text.SplitAny([Custom], " ,-./:;"), each Text.Length(_) > 4), ";")

Вы можете разбить еевсе в один шаг, если вы предпочитаете:

= Table.AddColumn(#"Previous Step", "Clean",
      each Text.Combine(
               List.Select(
                   Text.SplitAny(
                       Text.Remove(
                           [Raw],
                           List.Transform(
                               {33..43,60..255},
                               each Character.FromNumber(_)
                           )
                       ),
                       " ,-./:;"
                   ),
                   each Text.Length(_) > 4),
               ";"
           )
       )
...