使用DAX或查询编辑器替换或替换-Power BI

时间:2018-10-24 11:09:08

标签: powerbi dax powerquery m

我有一个必须遍历文本字段中每个字符的要求

例如:

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. 在输入中区分ID的空格或“;”或使用','或'/'。在某些情况下会出现多个ID,但不限于两个。
  4. 为保持不变,我将所有这些连接器替换为“;”

注意:-我的步骤可能不正确,但是我期望的输出是我希望从数据中得到的结果。

我们如何在Power BI中使用DAX或查询编辑器来做到这一点?

1 个答案:

答案 0 :(得分:4)

我将分两步进行尝试。

首先,让我们删除所有不是数字或分隔符的内容。我们可以使用此公式创建一个自定义列(假设您的起始列名为Raw):

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

这使用了Windows-1252 character numbering,但是您可以使用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),
               ";"
           )
       )