题目:
现有一列数据,其中"A"和"F"都不止出现了一次,需要将它们找出来。
解法1:
根据表获取行的另一种方式为表{[name="A"]}
,但是这种方式仅限于字段下命名唯一,如果[name]下有两个"A"会报错,只有一个 "C"则不报错。
根据这个特性,再利用try能够测试表达式是否错误,返回record,其中[HasError]为一个布尔值,筛选即可:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 筛选 = Table.SelectRows(源,each (try 源{[name=[name]]})[HasError]) in 筛选
解法2:
使用两次筛选,先筛选出[name]=当前上下文的list,再筛选出计数>1的行:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 筛选 = Table.SelectRows(源,(x)=>List.Count(List.Select(源[name],each _=x[name]))>1) in 筛选
DAX解法:
EVALUATE FILTER('表1',CALCULATE(COUNTROWS('表1')>1))
喜欢这类多方法比对文章
[name=[name]]弄不明白,[name]是取一列,name=一列值?
源{[name=_[name]]},这样写就应该明白些了,相当于 取name列的值等于_[name]的那一行,结果是个record
此处[name=[name]]就是当前行,因此解法1中筛选可直接写成:
筛选 = Table.SelectRows(源,each (try 源{ _ })[HasError])
解法2中的筛选还可以这样:
筛选 = Table.SelectRows(源,each List.Count(Table.PositionOf(源,_,Occurrence.All))>1)