首页 > 解决方案 > Excel 不同值列表

问题描述

我在 A 列中有一张客户电子邮件的表格,在 B 列中有他们购买的产品 - 大约有 60k 行。

数据

------------------------------------------------------
Email              |  Product  |        Time         | 
------------------------------------------------------
nayena@gmail.com   |     P1    | 27/02/2020 18:09:41 |
yenaye@hotmail.com |     P2    | 28/02/2020 17:09:32 |
nayena@gmail.com   |     P1    | 29/02/2020 14:05:46 |
yenaye@hotmail.com |     P1    | 29/02/2020 13:02:04 |
yenaye@hotmail.com |     P2    | 29/02/2020 20:05:21 |

我正在尝试制作两个新专栏

一个应该是客户卖出了多少不同的产品。另一个应该是这些不同产品的列表。(最好按日期排序,这将在另一列中)期望的结果:

期望的结果

---------------------------------------------------------------------
Email              |  Product  |        Time         |  Orders |  n  |
---------------------------------------------------------------------
nayena@gmail.com   |     P1    | 27/02/2020 18:09:41 |  P1     |  1
yenaye@hotmail.com |     P2    | 28/02/2020 17:09:32 |  P1|P2  |  2
nayena@gmail.com   |     P1    | 29/02/2020 14:05:46 |  P1     |  1
yenaye@hotmail.com |     P1    | 29/02/2020 13:02:04 |  P1|P2  |  2
yenaye@hotmail.com |     P2    | 29/02/2020 20:05:21 |  P1|P2  |  2

我试过类似的东西

=FILTER(B:B,A:A=A2)

但它降低了值,溢出到下面的单元格中。而且它没有独特的价值。这是 Python 中相当标准的操作,但我想知道如何以最简单的方式在 excel 中执行此操作 - 我想它应该是相当简单的。

我试过类似的东西

=AGGREGATE(3,0,FILTER(B:B,A:A=A2))

但我不清楚如何FILTER传递给AGGREGATE

标签: excelexcel-formula

解决方案


如果您希望订单按日期排序,则无法完全获得您想要的输出显示的内容。

您的一位客户P2既有最早的也有最新的,所以无论您以哪种方式排序,它都会出来P2|P1

下面的Orders公式按日期排序。n(公式中无需排序)

Orders:  =TEXTJOIN("|",TRUE,UNIQUE(INDEX(FILTER(SORT($A$2:$C$6,3,1 ),A2 = INDEX(SORT($A$2:$C$6,3,1 ),0,1)),0,2)))
n:       =COUNTA(UNIQUE(INDEX(FILTER($A$2:$C$6,A2=$A$2:$A$6),0,2)))

在此处输入图像描述

要复制您的Desired Result,您必须按产品排序:

Orders:  =TEXTJOIN("|",TRUE,UNIQUE(INDEX(FILTER(SORT($A$2:$C$6,2,1 ),A2 = INDEX(SORT($A$2:$C$6,2,1 ),0,1)),0,2)))

  

在此处输入图像描述

笔记:

  • 您可以使用整列引用,但会显着增加计算时间
  • Power Query 解决方案也很容易实现,但取决于您希望如何呈现结果的具体细节

推荐阅读