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

MMS*_*MMS 3 m dax powerquery powerbi

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

例如:

输入 预期输出
a#123456;12341 123456;12341
a123456 12341bd 123456;12341
a2017d 12341ds 12341
a123456/12341bd 123456;12341
不适用 无效的

基本上我在这里清理我的数据:

  1. 我将删除所有不是数字的字符。
  2. 仅当至少有 5 个连续数字时,该数字才有效。
  3. 在输入中区分 ID 的空格或“;” 或者可以使用“,”或“/”。在某些情况下会出现多个ID,并且不限于两个。
  4. 为了保持不变,我将用“;”替换所有这些连接器。

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

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

Ale*_*son 5

我将分两步进行尝试。

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

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

这使用Windows-1252 字符编号,但您可以使用该函数编写一个大的字符列表来删除Text.Remove

这个自定义列现在看起来像这样:

Custom
123456; 12341
123456 12341
2017  12341
123456/12341
/
Run Code Online (Sandbox Code Playgroud)

从这里开始,计划是使用每个分隔符将其分割并过滤掉太短的字符串。

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), ";")
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以将其全部分解为一个步骤:

= 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),
               ";"
           )
       )
Run Code Online (Sandbox Code Playgroud)