F# 如何根据Power Query中Power BI参数中以逗号分隔的值列表删除行?
我有一个数据列表,在许多其他列中有一个标题列,还有一个Power BI参数,例如,它的值为a、b、c。我要做的是循环遍历参数的值,并删除以这些字符开头的任何行 例如:F# 如何根据Power Query中Power BI参数中以逗号分隔的值列表删除行?,f#,powerbi,powerquery,m,F#,Powerbi,Powerquery,M,我有一个数据列表,在许多其他列中有一个标题列,还有一个Power BI参数,例如,它的值为a、b、c。我要做的是循环遍历参数的值,并删除以这些字符开头的任何行 例如: Title a b c d 应该成为 Title d 这个逗号分隔的列表可以有一个值,也可以有二十个值。我知道我可以使用 parameterList = Text.Split(<parameter-name>,",") 但我不确定如何继续使用它来过滤。对于一个值,我只使用 #"Filtered Rows" = T
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>))
但这只允许一个值
编辑:我可能把我原来的问题写得很糟糕。参数列表中以逗号分隔的值可以是任意数量的字符,例如: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], _)
)
)
)
对于每一行,这将通过检查当前键是否以列表中的每个文本字符串开头,将parameterList转换为真/假值列表。如果有任何值为true,则List.AnyTrue返回true,我们选择不选择该行。由于您希望从参数中筛选出所有值,因此可以使用以下方法:
= Table.SelectRows(#"Changed Type", each List.Contains(Parameter1,Text.Start([Title],1))=false)
另一种方法是在表中创建一个自定义列,该列的第一个字符为title:
= 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替换为表名,将Parameter1替换为参数名。因此,我正在尝试此操作,我的查询从不到2秒变为几分钟,然后由于内存不足异常而失败。虽然我认为这个解决方案在理论上可能有效,但在实践中它似乎非常慢,这个表中只有大约3000行,所以我很惊讶它运行得这么慢,除非我做错了什么。这很奇怪。不确定它是否有用,但在选择行行行中使用它之前,我会尝试将列表保存到内存中:parameterList=list.BufferText.Split,,好的,这实际上是我的错误-我不小心添加了导致无限调用的行。所以,我可能对我最初的问题措词不当。参数列表中以逗号分隔的值可以是任意数量的字符,例如:a、abcd、foo、bar,我想看看[key]中的值是否以该字符串开头。有没有一种方法可以修改这一点以适应这种情况?我很抱歉-我的问题可能措辞有点糟糕。我在底部的编辑中更新了更多信息。我只是在问题的底部添加了一个新的编辑,以增加一点清晰度。我的参数并不总是单个字符,可以是不同长度的。是否有可能使该用例工作?