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

嵌套表格中获取最大值并调整百分比总和至1的Power Query问题

嵌套表格百分比总和修正方案(M代码修复)

问题分析

你之前的代码错误地将调整后的最大值应用到所有行,而非仅修改原百分比最大的那一行。核心问题是未判断当前行是否为最大值行,直接把调整后的值批量赋值给了所有行。

正确M代码实现

以下代码针对每个嵌套子表格单独处理,仅修改百分比最大的行,其余行保留原数值:

Table.TransformColumns(
    替换为你的主表名称,
    {
        "Table", // 替换为嵌套表格所在列的列名
        (subTable) => let
            // 计算当前子表格的百分比总和
            totalPct = List.Sum(subTable[Percentage]),
            // 获取当前子表格的最大百分比值
            maxPct = List.Max(subTable[Percentage]),
            // 添加调整后的新百分比列
            adjustedTable = Table.AddColumn(
                subTable,
                "New Percentage",
                each if [Percentage] = maxPct then
                    // 仅对最大值行进行调整
                    if totalPct < 1 then [Percentage] + 0.01
                    else if totalPct > 1 then [Percentage] - 0.01
                    else [Percentage]
                else [Percentage] // 非最大值行保留原百分比
            )
        in adjustedTable
    }
)

代码说明

  1. 遍历嵌套表格:用Table.TransformColumns处理主表中每个嵌套的子表格,确保每个站点的数据独立计算。
  2. 单独计算总和与最大值:每个子表格单独计算百分比总和totalPct和最大百分比maxPct,避免跨站点干扰。
  3. 精准调整目标行:在添加新列时,仅对原百分比等于maxPct的行进行±0.01调整,其余行直接沿用原数值。

特殊情况处理(可选)

如果子表格存在多行百分比同为最大值的情况,上述代码会同时调整所有最大值行。若只需调整其中第一行最大值,可使用以下代码:

Table.TransformColumns(
    替换为你的主表名称,
    {
        "Table", // 替换为嵌套表格所在列的列名
        (subTable) => let
            totalPct = List.Sum(subTable[Percentage]),
            maxPct = List.Max(subTable[Percentage]),
            // 找到第一行最大值的索引
            maxRowIndex = Table.PositionOf(subTable, Table.SelectRows(subTable, each [Percentage] = maxPct){0}),
            // 转换为记录列表后逐行处理
            adjustedRecords = List.Transform(
                Table.ToRecords(subTable),
                (record, index) => 
                    let
                        newPct = if index = maxRowIndex then
                            if totalPct < 1 then record[Percentage] + 0.01
                            else if totalPct > 1 then record[Percentage] - 0.01
                            else record[Percentage]
                        else record[Percentage]
                    in Record.AddField(record, "New Percentage", newPct)
            ),
            adjustedTable = Table.FromRecords(adjustedRecords)
        in adjustedTable
    }
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:53:11