通过使用范围(E11:E16)中的数组公式根据上面的例子:
计算范围 (E2:E7) 中仅满足以下条件的唯一客户数:
1- 购买产品 1,无论他们是否购买了其他产品
2- 总计购买少于 5 件。如果有任何回头客
3- 其区域代码与范围内的相应代码匹配(D11:D16)
我使用以下数组公式在E11中:
=SUM(IF(FREQUENCY(IF($G$2:$G$7=D11,IF($I$2:$I$7="Product1",IF($J$2:$J$7<5,IF($E$2:$E$7<>"",MATCH($E$2:$E$7,$E$2:$E$7,0))))),ROW($E$2:$E$7)-ROW(G2)+1),1))
这个公式效果很好,但当在包含大量行和列的庞大数据库中使用它时,excel 需要大约 3 分钟才能计算出一个单元格,这样继续下去就太糟糕了
有什么方法可以将这个数组公式转换为常规公式...任何帮助都将不胜感激...提前致谢
答案1
我会为此使用 Power Query。Power Query 是 Microsoft 为 Excel 2010 和 2013 提供的免费插件,内置于 Excel 2016 中的“数据”功能区中的“获取和转换”下。
我不确定您对“吨”的定义,但 Power Query 可以轻松扩展到大约 1000 万行输入。如果您的数据源实际上是一个数据库(例如 SQL Server、Oracle 等),Power Query 会将尽可能多的工作转移到数据库。
对于您的挑战,我将首先使用以下方式创建查询:来自表格按钮从第一个表读取,然后选择关闭并加载/关闭并加载到,然后选择仅创建连接。如果您的源数据实际上来自真实数据库或其他文件,那么将 Power Query 直接指向该源会更有效率。
然后我将从范围 D11:D16 中的区域代码列表中启动实际输出查询,使用来自表格按钮。
我将添加一个合并步骤来加入区号的第一个查询,然后展开它的所有列。
然后我会添加一个条件列称为产品 1,指定:如果(列)产品等于(值)产品 1,则(列)产品
然后我会添加一个通过...分组步骤,分组区号和顾客,并汇总销售总额和产品 1 的最大值。
然后我会过滤产品 1列仅包含值为“产品 1”的行,然后过滤销售量列小于 5。
最后我再说一遍通过...分组步骤,分组区号并汇总默认数数。
默认情况下,Power Query 会将其传送到新工作簿的新表中 - 最好将其保留在那里以避免与其他对象发生冲突。
当源数据发生变化时,只需刷新查询即可重新生成输出表。