【和EXCEL对比】在多个分组中计算交集

    已知某支篮球队最近三场的得分统计,现在需要统计哪些球员在所有比赛中得分均在前5位。

  • 为了解决问题,需要统计每场比赛得分的名次,因此首先需要按照主要关键字场次升序,次要关键字得分降序排序,结果如下:
  • 按照场次分类汇总,删除总汇总行,结果如下:
  • 为了统计出每场比赛得分均在前五名的运动员的信息,可以用下面两种不同方法:

    1. 方法一,首先添加计算列,计算每场比赛中得分名次。为此需要为每场比赛分别填写表达式,如在E3中填写表达式=row()-2,然后拖拽公式到E3:E10区域,等等。结果如下:

      然后过滤名次小于或等于5的数据,结果如下:

      过滤数据也可以不添加计算列,而是手工分别过滤每一组的数据来完成,但是操作效率更低。
      将过滤出的数据复制到新的工作表中,并按球员升序排序,结果如下:

      然后按球员分类汇总,统计出每位球员得分在前5名的总场数,结果如下:

      如果总场数是3,说明该球员3场比赛的得分均在前5名。因此,将结果收缩到球员合计行,再过滤总场次为3的球员,即可得到所有场次得分均在前5位的球员,结果如下:

      在这种方法中,将问题中,求集合的交集转化为在各个集合中出现的次数,操作的步骤复杂;而且需要手工整理数据,当数据量较大、分组较多时,工作繁重。
    2. 方法二,在按场次分组之后,也可以在另外的区域中直接用表达式计算,如在A31中填写表达式:=IF(AND(COUNTIF($A$12:$A$16,A3),COUNTIF($A$20:$A$24,A3)),A3,””),然后拖拽公式到A31:A35区域,结果如下:

      虽然这种方法步骤较少,但是由于Excel中并没有直接针对集合的函数,因此只能通过各种方法将问题转化,如上面的方法将一个单元格集合中的数值依次在另两个集合中查找计数,从而判断是否是交集中的元素。这样填写公式时难度较高,当分组越多时,公式也会变得越复杂,也越容易出现错误。

    由于Excel中并没有直接针对集合的函数,十分不方便。因此在计算交集等问题时,无法直接获得结果,只能转换思路,使得问题变得非常复杂。而当数据量变大,分组变多时,工作量也会随之增大。

  • 首先按场次分组,结果如下:
  • 然后,选择D3格,执行排序操作,将记录按得分降序排序,按场次分组。在默认情况下,计算表中的排序操作会对所有同位行,在所有分组中执行,结果如下:
  • 接下来进行过滤操作,保留每场比赛得分前5名的数据,其余删除,过滤操作面板中设定如下:
  • 执行过滤操作,结果如下:
  • 在分组行中统计每场比赛得分前5名的球员集合,为此在E2中填入表达式={A3},结果如下:

    E2和其同位格中的结果均为序列,选中单元格后,在右侧的属性区中可以查看。如在E2中的结果为[Kerron Diaz,Ryan Williams,Jerome Horton,Steffen Ivey,Keith Parker]。
  • 计算每场比赛的得分都在前5名的集合,为此,在E1中填入表达式={E2}.isect(),结果如下:

    选中E1,可以在右侧的属性区中查看结果,为[Kerron Diaz,Ryan Williams,Jerome Horton,Steffen Ivey]。

    在计算表中,完全提供了对集合的支持,而且可以在分组后进行排序、过滤等操作。因此在处理此类问题时,不必殚精竭虑去转换思路,只需要从商业逻辑出发,就可以逐步解决问题,专业高效。