Select 真实且按特定顺序回馈的客户属性
Select customer attributes that are true and give back in specific order
我正在使用 excel 2010 并且每个 customer id
某些事件可以是 true
或 false
.
此外,用户可以配置返回客户 ID 真实事件的顺序。
例如,我有以下客户发生了以下事件:
| Customer ID | Event 1 | Event 2 | Event 3 | Event 4 |
|------------- |--------- |--------- |--------- |--------- |
| 1 | TRUE | FALSE | TRUE | FALSE |
| 2 | FALSE | TRUE | FALSE | FALSE |
| 3 | TRUE | TRUE | TRUE | TRUE |
| 4 | FALSE | TRUE | FALSE | FALSE |
| 5 | TRUE | FALSE | TRUE | TRUE |
| 6 | TRUE | TRUE | FALSE | FALSE |
| 8 | FALSE | FALSE | TRUE | TRUE |
| 9 | TRUE | TRUE | FALSE | TRUE |
其次,可以优先考虑所有真实事件应该返回的顺序:
| Events | Prioritized (1...most important - 4... least important) |
|--------- |--------------------------------------------------------- |
| Event 3 | 1 |
| Event 1 | 2 |
| Event 2 | 3 |
| Event 4 | 4 |
因此,例如,对于 ID 为 3
的客户,应给出以下输出和事件顺序:
对于 ID 为 8
的客户,应给出以下输出和事件顺序:
我的示例 excel 如下所示:
我正在考虑使用几个 IFs
,但实际上我有大约 100 events
和 10.000 customers
。
关于如何在 excel 中实现这个的任何建议?
感谢您的回复!
我想出了一个不完美但应该可行的选项。
首先,我会将您的 table 转换为列表,因此它看起来像这样:
是的,在我创建一个辅助列后,它会充当每个显示 ID 和优先级的真实列的 unique_Reference id:
该值将是 "id"_"priority" 使用公式(对于单元格 B3):
=IF(E3=TRUE,C3&"_"&VLOOKUP(D3,$G:$H,2,FALSE),"")
然后,我将创建结果列表,由于没有使用数组公式来节省计算时间,因此出现空白问题:
单元格 L3(具有最高优先级的事件)的公式为:
=+IF(ISERROR(VLOOKUP($L&"_"&K3,$B:$D,3,FALSE)),"",VLOOKUP($L&"_"&K3,$B:$D,3,FALSE))
使用这个数组公式:
=IFERROR(INDEX($H:$H,AGGREGATE(15,7,(ROW($H:$H)-MIN(ROW($H:$H))+1)/(INDEX(INDEX(B:E,MATCH($A,A:A,0),0),N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))=TRUE),ROW(1:1))),"")
作为一个数组公式,你需要把它放在B19中点击Ctrl-Shift-Enter然后复制下来。
需要注意的是列表的顺序是按顺序排序的。这不会查看 I 列中的数字,而是 H 列中列出事件的顺序。
N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))
创建一个相对列编号 (B:E) 的数组,以便它们在列 H 中列出。
INDEX(B:E,MATCH($A,A:A,0),0)
returns 找到客户 ID 的行。
INDEX(INDEX(B:E,MATCH($A,A:A,0),0),N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))
returns 正确行中正确顺序的 TRUE/FALSE 的完整数组。
聚合然后 returns 第一个为真的相对列号,然后是第二个和第三个......因为它被拖到外部索引。然后 returns H 列的正确值
如果在正确的 k
处没有找到 True,那么它 returns 一个错误并且 IFERROR returns 一个空字符串。
我正在使用 excel 2010 并且每个 customer id
某些事件可以是 true
或 false
.
此外,用户可以配置返回客户 ID 真实事件的顺序。
例如,我有以下客户发生了以下事件:
| Customer ID | Event 1 | Event 2 | Event 3 | Event 4 |
|------------- |--------- |--------- |--------- |--------- |
| 1 | TRUE | FALSE | TRUE | FALSE |
| 2 | FALSE | TRUE | FALSE | FALSE |
| 3 | TRUE | TRUE | TRUE | TRUE |
| 4 | FALSE | TRUE | FALSE | FALSE |
| 5 | TRUE | FALSE | TRUE | TRUE |
| 6 | TRUE | TRUE | FALSE | FALSE |
| 8 | FALSE | FALSE | TRUE | TRUE |
| 9 | TRUE | TRUE | FALSE | TRUE |
其次,可以优先考虑所有真实事件应该返回的顺序:
| Events | Prioritized (1...most important - 4... least important) |
|--------- |--------------------------------------------------------- |
| Event 3 | 1 |
| Event 1 | 2 |
| Event 2 | 3 |
| Event 4 | 4 |
因此,例如,对于 ID 为 3
的客户,应给出以下输出和事件顺序:
对于 ID 为 8
的客户,应给出以下输出和事件顺序:
我的示例 excel 如下所示:
我正在考虑使用几个 IFs
,但实际上我有大约 100 events
和 10.000 customers
。
关于如何在 excel 中实现这个的任何建议?
感谢您的回复!
我想出了一个不完美但应该可行的选项。
首先,我会将您的 table 转换为列表,因此它看起来像这样:
是的,在我创建一个辅助列后,它会充当每个显示 ID 和优先级的真实列的 unique_Reference id:
该值将是 "id"_"priority" 使用公式(对于单元格 B3):
=IF(E3=TRUE,C3&"_"&VLOOKUP(D3,$G:$H,2,FALSE),"")
然后,我将创建结果列表,由于没有使用数组公式来节省计算时间,因此出现空白问题:
单元格 L3(具有最高优先级的事件)的公式为:
=+IF(ISERROR(VLOOKUP($L&"_"&K3,$B:$D,3,FALSE)),"",VLOOKUP($L&"_"&K3,$B:$D,3,FALSE))
使用这个数组公式:
=IFERROR(INDEX($H:$H,AGGREGATE(15,7,(ROW($H:$H)-MIN(ROW($H:$H))+1)/(INDEX(INDEX(B:E,MATCH($A,A:A,0),0),N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))=TRUE),ROW(1:1))),"")
作为一个数组公式,你需要把它放在B19中点击Ctrl-Shift-Enter然后复制下来。
需要注意的是列表的顺序是按顺序排序的。这不会查看 I 列中的数字,而是 H 列中列出事件的顺序。
N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))
创建一个相对列编号 (B:E) 的数组,以便它们在列 H 中列出。
INDEX(B:E,MATCH($A,A:A,0),0)
returns 找到客户 ID 的行。
INDEX(INDEX(B:E,MATCH($A,A:A,0),0),N(IF({1},MODE.MULT(IF({1},MATCH($H:$H,$B:$E,0)*{1,1})))))
returns 正确行中正确顺序的 TRUE/FALSE 的完整数组。
聚合然后 returns 第一个为真的相对列号,然后是第二个和第三个......因为它被拖到外部索引。然后 returns H 列的正确值
如果在正确的 k
处没有找到 True,那么它 returns 一个错误并且 IFERROR returns 一个空字符串。