You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Powershell按MPN分组累加筛选符合阈值的CSV行

PowerShell CSV订单库存分配筛选实现方案

核心实现逻辑

  • 读取CSV时完成字段类型预处理,避免字符串排序、数值运算错误
  • 用Group-Object按MPN字段分组,直接取组内第一条的Reserved_Sum作为当前组的累加阈值
  • 每组内先将订单按Customer_Order_Date升序排序,保证从最早订单开始计算
  • 逐行累加Backordered_by_Pallet值,每累加一行就将该行加入结果集,直到累加总和大于等于阈值后停止当前组遍历;如果整组累加完仍未达到阈值,自动输出整组所有行
  • 最终结果可直接导出为新CSV文件

完整可运行代码

# 配置输入输出路径,替换为你自己的实际路径
$sourceCsvPath = "D:\your_order_data.csv"
$outputCsvPath = "D:\filtered_order_result.csv"

# 读取源CSV数据
$rawData = Import-Csv -Path $sourceCsvPath -Encoding UTF8

$filteredResult = foreach ($mpnGroup in $rawData | Group-Object -Property MPN) {
    # 取当前MPN的预留总 pallet 阈值
    $reservedTotal = [decimal]$mpnGroup.Group[0].Reserved_Sum
    $currentCumulative = 0

    # 组内按订单日期升序排序,特殊日期格式可替换为ParseExact指定格式,例如:
    # Sort-Object { [DateTime]::ParseExact($_.Customer_Order_Date, "yyyy-MM-dd", $null) }
    $sortedOrderList = $mpnGroup.Group | Sort-Object { [DateTime]$_.Customer_Order_Date }

    # 逐行累加筛选
    foreach ($order in $sortedOrderList) {
        $currentCumulative += [decimal]$order.Backordered_by_Pallet
        # 输出当前行到结果集
        $order
        # 累加值达到阈值后终止当前组遍历
        if ($currentCumulative -ge $reservedTotal) {
            break
        }
    }
}

# 导出结果到CSV
$filteredResult | Export-Csv -Path $outputCsvPath -Encoding UTF8 -NoTypeInformation

注意事项

  • 如果你的CSV中日期格式不是系统默认格式,需要修改排序部分的日期解析逻辑,用ParseExact指定你实际使用的日期格式字符串即可
  • 代码中所有数值字段默认转decimal类型处理,避免整数、浮点数运算精度问题,可根据你的实际数据格式调整
  • 单文件十万行量级以内处理无性能压力,超大文件可调整为流式逐行读取逻辑降低内存占用

内容的提问来源于stack exchange,提问作者moore1emu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:06:03