![摆脱嵌套 if 以允许更多过滤选项](https://linux22.com/image/1454958/%E6%91%86%E8%84%B1%E5%B5%8C%E5%A5%97%20if%20%E4%BB%A5%E5%85%81%E8%AE%B8%E6%9B%B4%E5%A4%9A%E8%BF%87%E6%BB%A4%E9%80%89%E9%A1%B9.png)
我希望能够获得一些帮助,以改进我目前使用的基于用户可以选择的过滤器对数据行进行求和和计数的方法。
目前我有 7 个过滤器,我会检查它们以确定是否应该在计算中包含一行。我们想添加其他过滤器,但我没有达到最大嵌套 if 数。我还担心我的公式可能存在错误,因为它很复杂。
因此,每行数据都有一些特征(销售数据),我会检查这些特征以确定是否应将该行包含在计算中。因此,一行数据将具有以下类型的特征,我会根据这些特征进行筛选:
交易类型(全部、新的、续订或附加)、地区(全部、东部、西部、中部)、竞争对手(全部,然后是特定竞争对手的名称)、日期过滤器(开始日期和结束日期)和交易规模(开始规模和结束规模)。
然后,我们根据一系列特征确定了我们赢得或输掉交易的原因。我们通过在单元格中使用“1”表示损失,“0”表示赢利来表明某个特征是否是导致交易结果的原因。所以我有标题为“价格”、“提案”、“演示”、“公司参考”等的列。
如果我们失去了一笔交易,并且我们认为我们因为价格和参考而失去这笔交易,那么我会在该行数据的每一列中都输入 1。
然后我有一个摘要部分,我试图找出我们由于“价格”而损失了多少交易(我计算了符合过滤条件的 1 的数量)以及我们由于价格而损失了多少收入(相同的公式,但我对交易规模求和而不是对交易进行计数)。
希望这能让您很好地了解我正在做的事情。我希望能够增强公式,以便我可以根据需要添加其他过滤器,并尽可能简化它以使其更易于维护。
我现在用来计算因特定原因造成的损失的公式如下所示(它基本上与胜利的公式相同,但我计算的是零而不是一):
=IF(AND($CU$1="ALL", $CR$2="ALL", $CU$2="ALL"),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2),
IF(AND($CU$1="ALL", $CR$2="ALL", NOT($CU$2="ALL")),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$D$7:$D$1000,"="&$CU$2),
IF(AND($CU$1="ALL", NOT($CR$2="ALL"), $CU$2="ALL"),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$K$7:$K$1000,"="&$CR$2),
IF(AND(NOT($CU$1="ALL"), $CR$2="ALL", $CU$2="ALL"),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$M$7:$M$1000,"="&$CU$1),
IF(AND(NOT($CU$1="ALL"), NOT($CR$2="ALL"), $CU$2="ALL"),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$M$7:$M$1000,"="&$CU$1,$K$7:$K$1000,"="&$CR$2),
IF(AND(NOT($CU$1="ALL"), NOT($CR$2="ALL"), NOT($CU$2="ALL")),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$M$7:$M$1000,"="&$CU$1,$K$7:$K$1000,"="&$CR$2,$D$7:$D$1000,"="&$CU$2),
IF(AND($CU$1="ALL", NOT($CR$2="ALL"), NOT($CU$2="ALL")),COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$D$7:$D$1000,"="&$CU$2,$K$7:$K$1000,"="&$CR$2),
COUNTIFS($Y$7:$Y$1000,"=1",$A$7:$A$1000,">="&$CN$1,$A$7:$A$1000,"<="&$CP$1,$J$7:$J$1000,">="&$CN$2,$J$7:$J$1000,"<="&$CP$2,$M$7:$M$1000,"="&$CU$1,$D$7:$D$1000,"="&$CU$2))))))))
因此,对于每个结果原因(价格、提案、参考资料等),我必须重复此公式四次。一次用于计算亏损,一次用于汇总亏损,一次用于计算盈利,一次用于汇总盈利。
最终结果是我得到了如下所示的表格:
决策驱动因素 | 赢利频率 | 赢利收入 | 亏损频率 | 亏损收入 ----------------------------------------------------------------------------- 价格 | 23 | 230,000 美元 | 12 | 165,000 美元 提案 | 12 | 140,000 美元 | 16 | 195,000 美元 ETC...
任何帮助将非常感激。