sql - 条件运行计数/累积和:寻找公式或脚本
问题描述
我在仓库工作,我使用 Google 表格来跟踪库存。加减法很容易,但我的任务是创建一个“储备”系统:
许多库存是为即将到来的工作而保留的。当该库存被订购和接收时,储备数量是“满意的”,并减少收到的件数。像 ADD 和 SUBTRACT 函数一样设置它的问题是,并非所有收到的库存都是“保留”的,我的 RESERVE 总计最终为“-57”、“-72”、“-112”等。
我有一个大型表单响应数据集,记录在四列中:时间戳、项目 ID#、操作(添加、减去或保留)和数量。我正在寻找的是一种使用 D 列“数量”中的值为每个唯一项目 ID# 在 E 列中创建运行计数的方法。我需要任何值 <0 来返回“0”。
我已经能够创建一个运行计数公式,一次满足我对一个项目 ID# 的条件。但是,为了避免为每个项目 ID# 创建单独的列,我需要弄清楚如何将其分别应用于每个唯一的项目 ID#,并将其排列在 E 列中,以便自动计算每个新的表单响应。
=if(C2="RESERVE",E1+D2,if(and(C2="ADD",(E1+D2)<0),0,E1+D2))
我能找到的最接近解决方案的是 user79865 为这个问题创建的脚本,标题为:“Running Total In Google Sheets with Array”。不幸的是,尝试将其插入 Google Sheets 脚本编辑器会给我一个错误弹出窗口:TypeError: Cannot read property "length" from undefined。(第 2 行,文件“runningtotal”)
我没有编程背景,从没想过我会查看代码只是为了进行统计。
如果有人可以对此提供任何见解,修复或替换脚本或提供 ARRAYFORMULA 解决方案,我将不胜感激!
function runningTotal(names, dates, amounts) {
var sum, totals = [], n = names.length;
if (dates.length != n || amounts.length != n) {
return 'Error: need three columns of equal length';
}
for (var i = 0; i < n; i++) {
if (names[i][0]) {
sum = 0;
for (var j = 0; j < n; j++) {
if (names[j][0] == names[i][0] && dates[j][0] <= dates[i][0]) {
sum = sum + amounts[j][0];
}
}
}
else {
sum = '';
}
totals.push([sum]);
}
return totals;
}
解决方案
推荐阅读
- android - java.io.IOException:权限被拒绝在 sdcard 上保存位图图像
- python - 如何使用 pygame.mixer 从列表中选择歌曲
- asp.net - 无法使用客户端 react-native-signalr 将标头和 jwt 令牌发送到 ASP.NET 信号器
- python - matplotlib改变数据集的颜色
- azure - 将 TEXT 遥测数据发送到 Azure IOTCENTRAL 的正确方法是什么?
- c++ - 在cpp中读取文本文件中的字符串
- qlikview - 我想从 qlikview 的表中删除三个字符串。像 LPA、lpa 和 INR
- javascript - 如何根据表单输入添加动态复选框?
- ruby-on-rails - Rails 6 mysubdomain.lvh.me 重定向你太多次
- docker - 使用 compose-file 部署 Docker 堆栈导致类型“bind”的挂载配置无效:绑定源路径不存在: