首页 > 解决方案 > 先进先出库存(FIFO)公式计算很慢

问题描述

我有一张表,其中包括从库存到另一个以及从供应商到另一个的产品交易,我将用于 FIFO 评估的公式从 excel 表导入到 google 表,但是当我将该公式填充到所有字段表时会变得非常慢。在我的工作表的链接下方。

这是公式之一

=ARRAY_CONSTRAIN(ARRAYFORMULA(SUM(--IF(MMULT(--(ROW(F$17:F18)>=TRANSPOSE(ROW(F$17:F18))),--IF(E$17:E18=N19,F$17:F18,0))<SUMIF(N$18:N19,N19,O$18:O19),1,0))), 1, 1)

=ARRAY_CONSTRAIN(ARRAYFORMULA(SUMPRODUCT(--IF(OFFSET(E$17,,,V19+1)=N19,1,0),OFFSET(F$17,,,V19+1),OFFSET(H$17,,,V19+1))-SUMIF(N$18:N18,N19,Z$18:Z18)), 1, 1)

=ARRAY_CONSTRAIN(ARRAYFORMULA((SUMIF(N$18:N19,N19,O$18:O19)-SUMPRODUCT(--IF(OFFSET(E$17,,,V19+1)=N19,1,0),OFFSET(F$17,,,V19+1)))*OFFSET(H$17,V19,,,)), 1, 1)

最后

=IF(SUMIF(N$18:N19,N19,O$18:O19)>SUM(E$18:E19,N19,F$18:F19),MAX(SUMIF(E$18:E19,N19,G$18:G19)-SUMIF(N$18:N18,N19,P$18:P18),0),Y19)

https://docs.google.com/spreadsheets/d/1xJxCipSh-Q5ltSaGo-kpEPomrZdAI1T8PDH57rc-sOw/edit?usp=sharing

更新....

H 列中的公式 =IF(F19=0,0,G19/F19) 替换为 =ARRAYFORMULA(IF(LEN(F19:F), IF(F19:F=0, 0, G19:G/F19:F), ))

P 列中的公式 =Z19 替换为 =ARRAYFORMULA(IF(LEN(O19:O), IF(O19:O=0, 0, Z19:Z), ))

公式 在列 O =P19/O19 替换为 =ARRAYFORMULA(IF(LEN(O19:O), IF(O19:O=0, 0, P19:P/O19:O), ))

但是这些公式仍然需要帮助

=ARRAY_CONSTRAIN(ARRAYFORMULA(SUM(--IF(MMULT(--(ROW(F$17:F18)>=TRANSPOSE(ROW(F$17:F18)))),--IF(E$17:E18=N19,F$17 :F18,0))

=ARRAY_CONSTRAIN(ARRAYFORMULA(SUMPRODUCT(--IF(OFFSET(E$17,,,V19+1)=N19,1,0),OFFSET(F$17,,,V19+1),OFFSET(H$17,,,V19) +1))-SUMIF(N$18:N18,N19,Z$18:Z18)), 1, 1)

=ARRAY_CONSTRAIN(ARRAYFORMULA((SUMIF(N$18:N19,N19,O$18:O19)-SUMPRODUCT(--IF(OFFSET(E$17,,,V19+1)=N19,1,0),OFFSET(F$17) ,,,V19+1)))*OFFSET(H$17,V19,,,)), 1, 1)

=IF(SUMIF(N$18:N19,N19,O$18:O19)>SUM(E$18:E19,N19,F$18:F19),MAX(SUMIF(E$18:E19,N19,G$18:G19)- SUMIF(N$18:N18,N19,P$18:P18),0),Y19)

问候

标签: performancegoogle-sheetsgoogle-sheets-formula

解决方案


表格 FIFO 在从第 19 行到第 5395 行的 H 列(可能还有其他列)上有一个很长的“公式链”。通过公式链,我指的是一个公式,包括向下/向右填充的相对引用,因此差异在公式之间的 A1 表示法中,下一个只是相对引用,但在 R1C1 表示法中,公式看起来相同。

要提高电子表格的性能,您应该减少公式的数量。如果您不需要这么多行,请尝试删除不必要的行。如果这还不够,或者您正在寻找最佳性能,请在可能的情况下将公式链替换为数组公式或使用 Google Apps 脚本

笔记

为了优化使用您的网络浏览器/设备/网络资源

  • 避免使用打开的引用或将它们包含在 ARRAY_CONSTRAIN 函数中以仅返回所需的值。
  • 在 Google Apps 脚本上,至少在执行时避免或保持对电子表格服务的调用,特别是避免在循环中调用电子表格服务,例如使用 for 循环一次编辑一个单元格。

推荐阅读