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

Power Query生成Hold类型全组合表的M查询求助

Power Query M 查询代码实现所有Hold类型组合生成

以下是直接可用的M查询代码,能生成包含所有Hold类型组合(含"No Hold")的两列表:

let
    // 定义所有Hold类型的基础列表
    HoldTypes = {"Credit", "Forecast", "Manual", "Routing"},
    // 计算列表长度,用于生成子集索引
    ListLength = List.Count(HoldTypes),
    // 生成从0到2^n-1的数字序列(每个数字对应一个二进制掩码,代表一种组合)
    MaskNumbers = {0..Number.Power(2, ListLength)-1},
    // 对每个掩码数字,生成对应的Hold组合
    GenerateCombinations = List.Transform(MaskNumbers, (mask) =>
        let
            // 将数字转为二进制,补前导零到列表长度位
            BinaryStr = Text.PadStart(Number.ToText(mask, "Binary"), ListLength, "0"),
            // 按二进制位筛选对应的Hold类型
            SelectedHolds = List.Select(HoldTypes, (type, index) => Text.Range(BinaryStr, index, 1) = "1"),
            // 处理空组合为"No Hold",非空组合用逗号拼接
            DisplayText = if List.IsEmpty(SelectedHolds) then "No Hold" else Text.Combine(SelectedHolds, ", ")
        in
            DisplayText
    ),
    // 转换为表并添加ID主键列
    ResultTable = Table.FromList(GenerateCombinations, Splitter.SplitByNothing(), {"Values"}),
    AddID = Table.AddIndexColumn(ResultTable, "ID", 1, 1, Int64.Type)
in
    AddID

代码说明:

  • HoldTypes:定义所有需要组合的Hold类型,可根据实际需求修改。
  • MaskNumbers:利用二进制掩码原理,2^n个数字对应n个元素的所有子集(包括空集)。
  • GenerateCombinations:通过二进制位判断哪些Hold类型被选中,空组合显示为"No Hold",非空组合用逗号连接。
  • AddID:添加从1开始的自增主键ID列。

运行这段代码后,会得到一张包含ID和Values的表,其中Values列涵盖所有16种可能的组合(4种单类型、6种双类型、4种三类型、1种四类型、1种无类型)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:52:04