我一直在浏览多个不同的地方来尝试找到答案,但我认为我可能太厚重和/或过度简化了 Excel 的工作方式。
我想要得到的是一个矩阵,除非有更好的方法,我可以在这个例子中看到同一个客户在同一天与另一个产品一起购买了多少次产品。
数据如下:
A | B | C | |
---|---|---|---|
1 | 客户名称 | 预订日期 | 产品名称 |
2 | 约翰 | 2024 年 2 月 26 日 | 产品1 |
3 | 约翰 | 2024 年 2 月 26 日 | 产品1 |
4 | 约翰 | 2024 年 2 月 26 日 | 产品2 |
5 | 约翰 | 2024 年 2 月 26 日 | 产品3 |
6 | 约翰 | 2024 年 2 月 26 日 | 产品4 |
7 | 约翰 | 2024 年 3 月 30 日 | 产品1 |
8 | 约翰 | 2024 年 4 月 11 日 | 产品2 |
9 | 约翰 | 2024 年 4 月 11 日 | 产品3 |
10 | 戴夫 | 2024 年 6 月 24 日 | 产品3 |
11 | 戴夫 | 2024 年 6 月 24 日 | 产品1 |
12 | 戴夫 | 2024 年 6 月 24 日 | 产品3 |
13 | 戴夫 | 2024 年 6 月 24 日 | 产品1 |
14 | 戴夫 | 2024 年 7 月 17 日 | 产品2 |
15 | 戴夫 | 2024 年 7 月 17 日 | 产品1 |
16 | 鲍勃 | 2024 年 6 月 6 日 | 产品1 |
17 | 鲍勃 | 2024 年 6 月 6 日 | 产品2 |
18 | 鲍勃 | 2024 年 6 月 8 日 | 产品2 |
19 | 鲍勃 | 2024 年 6 月 8 日 | 产品3 |
我尝试实现各种 countif 和 xlookups 但没有任何实际效果,而且我开始认为我要求太多了。
这就是我期望的结果:
1 | 产品1 | 产品2 | 产品3 | 产品4 | |
---|---|---|---|---|---|
2 | 产品1 | 2 | 3 | 2 | 1 |
3 | 产品2 | 3 | 0 | 3 | 1 |
4 | 产品3 | 2 | 3 | 1 | 1 |
5 | 产品4 | 1 | 1 | 1 | 0 |
产品 2 结果的解释:
第一次购买:
John 2/26/2024 连同:产品 1(两次,但一起算作 1x),不与产品 2 一起(它本身需要大于 1 才能算作 一起),以及产品 3 和与产品 4 一起。
这算作 {1,0,1,1}。
第二次购买:
约翰 2024 年 4 月 11 日连同:产品 1,否;产品2;否,产品 3,是,产品 4,否。
这算作 {0,0,1,0}。
第三次购买:
Dave 7/17/2024 连同:产品 1,是;产品 2,编号,3 和 4,编号。
这算作 {1,0,0,0}。
第四次购买:
鲍勃 6/6/2024 连同:1,是; 2、没有; 3、没有; 4、没有。
这算作 {1,0,0,0}。
第五(最后)购买:
鲍勃 6/8/2024 连同:1,否; 2、没有; 3、是; 4、没有。
这算作 {0,0,1,0}。
按列(产品)求和:{3,0,3,1}
任何不太复杂的解决方法,这个请求有意义吗?谢谢!
这是可能的,但并不容易(感谢您的挑战!):
=LET(data,A2:C19, ab,TAKE(data,,1)&INDEX(data,,2), c,DROP(data,,2), u,UNIQUE(c),
REDUCE(HSTACK("",TOROW(u)), u,
LAMBDA(d,e,
LET(f,FILTER(HSTACK(data,ab),ISNUMBER(XMATCH(ab,FILTER(ab,c=e)))),
r,IFNA(REDUCE(0, UNIQUE(INDEX(f,,4)),
LAMBDA(x,y,
LET(z,FILTER(INDEX(f,,3),INDEX(f,,4)=y),
s,UNIQUE(DROP(SORTBY(z,INDEX(z,,1)<>e),1)),
VSTACK(x,
IFERROR(MMULT(SEQUENCE(,ROWS(s),,0),N(s=TOROW(u))),0))))),0),
VSTACK(d,
HSTACK(e, BYCOL(r,SUM)))))))
这将循环访问唯一产品
e
,过滤名称和日期以及产品行,其中产品列包含当前产品e
。
接下来,它会循环遍历唯一名称和日期,如果与当前产品一起购买,则将产品的计数加 1
e
(其中 1 购买的 e
不算作 在一起)。