performance - 先进先出库存(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)
问候
解决方案
表格 FIFO 在从第 19 行到第 5395 行的 H 列(可能还有其他列)上有一个很长的“公式链”。通过公式链,我指的是一个公式,包括向下/向右填充的相对引用,因此差异在公式之间的 A1 表示法中,下一个只是相对引用,但在 R1C1 表示法中,公式看起来相同。
要提高电子表格的性能,您应该减少公式的数量。如果您不需要这么多行,请尝试删除不必要的行。如果这还不够,或者您正在寻找最佳性能,请在可能的情况下将公式链替换为数组公式或使用 Google Apps 脚本
笔记
为了优化使用您的网络浏览器/设备/网络资源
- 避免使用打开的引用或将它们包含在 ARRAY_CONSTRAIN 函数中以仅返回所需的值。
- 在 Google Apps 脚本上,至少在执行时避免或保持对电子表格服务的调用,特别是避免在循环中调用电子表格服务,例如使用 for 循环一次编辑一个单元格。
推荐阅读
- lightningchart - 从闪电图中的仪表板查找图表位置
- visual-studio-code - 控制台从 fetch() 函数记录一个常量 response.text() 但我的代码被控制台记录为文本而不是我获取的内容。怎么修?
- python - 在python中将pdf文件转换为文本?我也使用过 pypdf2 和 pdfminer,它们无法正常工作
- python - 为什么我不能使用 python-binance 库下订单?
- javascript - 如何在 React 的类组件中传递数组对象?
- javascript - Ant 设计 - 折叠面板内的 Object.map 不起作用
- angular11 - 不能绑定到“dismissible”,因为它不是“ngb-alert”的已知属性
- reactjs - 反应 js 内联 css 变量
- jquery - 如何在 asp.net 核心中使用 jquery 验证 ckeditor?
- core-data - 我应该为“出口合规”选择什么?