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

3
我有一个需求,需要循环遍历文本字段中的每个字符。
例如:
输入:
a#123456;12341
期望输出:
123456; 12341
输入:
a123456 12341bd
期望输出:
123456; 12341
输入:
a2017d 12341ds
期望输出:
12341
输入:
a123456/12341bd
期望输出:
123456; 12341
如果没有输入,输出为 null。
基本上我在清理我的数据:
1. 我将删除任何不是数字的字符。 2. 只有在至少连续出现5个数字时,数字才有效。 3. 在输入中,要区分ID,可以使用空格或“;”或“,”或“/”等符号。某些情况下会有多个ID存在,不限于两个。 4. 为了保持一致,我将用 “;”替换所有这些连接符。
请注意:我的步骤可能不正确,但我期望从数据中获得的输出就是我所寻求的。如何使用 Power BI 中的 DAX 或 Query Editor 完成此操作?
1个回答

5
我会分两步尝试解决这个问题。
首先,让我们移除任何不是数字或分隔符的内容。我们可以使用以下公式创建一个自定义列来实现这一点(假设您的起始列名为“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),
               ";"
           )
       )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接