Select 真实且按特定顺序回馈的客户属性

Select customer attributes that are true and give back in specific order

我正在使用 excel 2010 并且每个 customer id 某些事件可以是 truefalse.

此外,用户可以配置返回客户 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 events10.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 一个空字符串。