如何根据 Power Query 中 Power BI 参数中的 comma-separated 值列表删除行?

How do i remove rows based on comma-separated list of values in a Power BI parameter in Power Query?

我有一个带有标题列(在许多其他列中)的数据列表,并且我有一个 Power BI 参数,例如,值为 "a,b,c"。我想要做的是遍历参数的值并删除以这些字符开头的所有行。

例如:

Title
a
b
c
d

应该变成

Title
d

这个逗号分隔的列表可以有一个值,也可以有二十个。我知道我可以使用

将参数转换为列表
parameterList = Text.Split(<parameter-name>,",")

但后来我不确定如何继续使用它进行过滤。对于一个值,我只使用

#"Filtered Rows" = Table.SelectRows(#"Table", each Text.StartsWith([key], <value-to-filter-on>))

但这只允许一个值。

编辑:我最初的问题可能措辞不当。 parameterList 中的逗号分隔值可以是任意数量的字符(例如:a、abcd、foo、bar),我想查看 [key] 中的值是否以该字符串开头。

尝试使用List.Contains检查起始字符是否在参数列表中。

each List.Contains(parameterList, Text.Start([key], 1)

编辑: 既然你已经改变了要求,试试这个:

Table.SelectRows(
    #"Table",
    (C) => not List.AnyTrue(
                   List.Transform(
                       parameterList,
                       each Text.StartsWith(C[key], _)
                    )
                )
 )

对于每一行,这会通过检查当前 key 是否以列表中的每个文本字符串开头来将 parameterList 转换为 true/false 值的列表。如果有任何为真,则 List.AnyTrue returns 为真,我们选择不 select 该行。

因为你想从参数中过滤掉所有的值,你可以使用类似的东西:

= Table.SelectRows(#"Changed Type", each List.Contains(Parameter1,Text.Start([Title],1))=false)

另一种方法是在 table 中创建一个自定义列,它的第一个字符是标题:

= Table.AddColumn(#"Changed Type", "FirstChar", each Text.Start([Title],1))

然后在筛选步骤中使用此字段:

= Table.SelectRows(#"Added Custom", each List.Contains(Parameter1,[FirstChar])=false)

我用一个小样本集测试了它,它似乎 运行 没问题。您可以同时测试两者,看看它是否有助于提高性能。如果您仍然遇到性能问题,如果您可以共享 pbix 文件,可能会更容易。

这似乎工作得很好:

= List.Select(Source[Title], each Text.Contains(Parameter1,Text.Start(_,1))=false)

Source 替换为您的 table 的名称,将 Parameter1 替换为您的参数的名称。