【发布时间】:2019-02-19 07:05:47
【问题描述】:
我有一个超过 50,000 行的数据表。数据包含商店、日期和产品排列的销售信息。但是,产品实际上是初级产品 (PP) 和次级产品 (SP) 的组合,其中 1 个 PP 的销售数量应转换为 1 个或更多 SP 的销售。我有另一张表,其中包含 PP 到 SP 的转换,其中包含相应的乘数(超过 500 行)。 PPs和SPs是多对多的关系; PP可以转换成几个不同的SP,同一个SP也可以从其他PP转换。
目前,产品仅存在未转换的销售数量,如果存在乘数,我的工作是将这些数字转换为每个 PP 各自的 SP。
示例:https://i.stack.imgur.com/YdGHn.png
我可以使用以下 SUMPRODUCT() 公式来做到这一点,它看起来比数组公式更有效:
=SUMPRODUCT(
(Conversions[Multiplier]),
--(Conversions[SP]=[@Product]),
SUMIFS([Quantity],[Product],Conversions[PP],[Store],[@Store],[Date],[@Date])
)
但是,鉴于我的数据集的大小,它仍然需要很长时间才能处理。有没有更有效的方法来做到这一点?
编辑:
我尝试将公式包装在条件中,以便 SUMPRODUCT 仅评估是否可以在转换表中作为 SP 找到相关产品(并且它现在还显示没有任何转换的 PRODUCTS 的值)。这似乎加快了一些速度,但仍然远远不够快......
=IFERROR(IF(MATCH([@Product],Conversions[SP],0)>0,
SUMPRODUCT(
(Conversions[Multiplier]),
--(Conversions[SP]=[@Product]),
SUMIFS([Quantity],[Product],Conversions[PP],[Store],[@Store],[Date],[@Date])
),0),0)+[@Quantity]
【问题讨论】:
-
您是否考虑过在 vba 代码中使用该公式仅填充尚未计算的“新”产品
-
@SolarMike 我突然想到了,但问题是我每天都会收到一个这样的全新文件,所以从技术上讲,所有产品数量都是新的。但是我以不同的方式尝试了您的建议;在继续使用 SUMPRODUCT 之前,将公式包装在条件中以检查产品是否存在于另一个表中。谢谢!
-
进步了,我喜欢 :) 干得好。
-
如果数据透视表可以提供您所追求的结果,那么数据透视表可能是一个更快的替代方案。如果不能选择使用数据库,那么我会推荐下一个方法,否则,大量数据势必需要更长的时间来处理。
-
@Jerry 我可以看到你的建议可能是最好的方向,但由于 PP 和 SP 之间的多对多关系,我不知道如何去做。当我试图想用哪些字段填充数据透视表以及从那里去哪里时,我的大脑就失去了动力...... :(
标签: arrays excel many-to-many formula sumproduct