筛选有重复数据

题目:


现有一列数据,其中"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))

5 Replies to “筛选有重复数据”

  1. 源{[name=_[name]]},这样写就应该明白些了,相当于 取name列的值等于_[name]的那一行,结果是个record

  2. 此处[name=[name]]就是当前行,因此解法1中筛选可直接写成:
    筛选 = Table.SelectRows(源,each (try 源{ _ })[HasError])

  3. 解法2中的筛选还可以这样:
    筛选 = Table.SelectRows(源,each List.Count(Table.PositionOf(源,_,Occurrence.All))>1)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注