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

如何将需求与供应匹配逻辑的伪代码转换为M语言?

如何将需求与供应匹配逻辑的伪代码转换为M语言?

看起来你是想在Power Query里给Need表添加自定义列,根据Supply表的条件匹配对应的供应日期对吧?我来帮你梳理逻辑并写出正确的M语言代码。

首先先明确你的需求逻辑,再把它转换成Power Query能识别的写法:

  1. 优先匹配供应数量≥需求数量、供应日期不为空、供应日期和需求日期相差不超过31天的Supply记录,找到的话就返回对应的供应日期
  2. 如果没有符合第一条的记录,检查是否存在供应日期为空的Supply记录,有的话返回"NO"
  3. 其他情况返回"NON2"

接下来是具体的M代码实现,假设你的Need表叫Need,Supply表叫Supply:

let
    // 取原始的Need表作为数据源
    Source = Need,
    // 添加自定义列,命名为"匹配的供应日期"(可自行修改列名)
    AddMatchedSupplyDate = Table.AddColumn(Source, "匹配的供应日期", each 
        let
            // 第一步:筛选符合数量和日期条件的有效供应记录
            ValidSupplyRows = Table.SelectRows(Supply, 
                each [Qty] >= [@Qty]  // 供应数量≥当前需求的数量
                and [Supply date] <> null  // 供应日期不为空
                // 计算两个日期的天数差绝对值,确保小于31天
                and Duration.Days(Number.Abs(Date.From([Supply date]) - Date.From([@Date]))) < 31
            ),
            // 检查是否存在有效供应记录
            HasValidSupply = not Table.IsEmpty(ValidSupplyRows),
            // 检查是否存在供应日期为空的记录
            HasNullSupplyDate = not Table.IsEmpty(Table.SelectRows(Supply, each [Supply date] = null))
        in
            // 按照你的逻辑分支返回结果
            if HasValidSupply then Table.First(ValidSupplyRows)[Supply date]
            else if HasNullSupplyDate then "NO"
            else "NON2"
    )
in
    AddMatchedSupplyDate

代码关键点说明:

  • [@Qty]和[@Date]是Power Query里引用当前行对应列值的写法,这样才能针对Need表的每一行去匹配Supply表的记录
  • Duration.Days(Number.Abs(...))用来精准计算两个日期之间的天数差绝对值,确保满足"小于31天"的条件
  • 如果有多个符合条件的Supply记录,这里用Table.First取第一个;若需要取最近的日期,可以给ValidSupplyRows加一行排序逻辑:SortedValidSupply = Table.Sort(ValidSupplyRows, {{"Supply date", Order.Ascending}}),再用Table.First(SortedValidSupply)[Supply date]获取结果

如果你的表名或者列名和示例不一样,记得替换成你实际的名称哦。

备注:内容来源于stack exchange,提问作者Steph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:03:02