动态列QA审核数据处理:按版块计算各Participant平均分的实现难点
解决方案:动态Participant列下按版块计算平均分
完整Power Query M代码
let // 加载原始数据(替换为你的实际数据源步骤) Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // 1. 动态提取所有Participant列的列名 ParticipantColumns = List.Select(Table.ColumnNames(Source), each Text.Contains(_, "Participant")), // 2. 生成每个Participant列的分组聚合规则:计算该列在版块内的平均值 AggregateExpressions = List.Transform(ParticipantColumns, (col) => {col, each List.Average(Record.FieldValues(_[col])), Percentage.Type}), // 3. 按Q Section分组,应用动态聚合规则 GroupedBySection = Table.Group(Source, {"Q Section"}, AggregateExpressions), // 4. 调整列名匹配目标输出 RenamedColumns = Table.RenameColumns(GroupedBySection, {{"Q Section", "Section"}}) in RenamedColumns
代码分步说明
捕获动态Participant列:
用List.Select+Text.Contains自动筛选所有带"Participant"的列,不管数量多少都能适配,解决列数动态变化的问题。动态生成聚合规则:
对每个Participant列生成对应的聚合逻辑:指定列名、用List.Average计算版块内平均值(自动忽略null值)、设置结果为百分比类型,确保输出格式符合需求。按版块分组聚合:
将动态生成的聚合规则传入Table.Group,一次性完成所有Participant列的版块级平均分计算,无需手动指定每一列,完美适配动态场景。列名对齐目标输出:
把原"Q Section"列重命名为"Section",和你期望的输出格式完全匹配。
原有尝试的问题点
你之前的代码是对单题行计算所有Participant的平均分,而需求是对版块组计算每个Participant的平均分——聚合维度从行转向了组,且需要对每列做动态聚合,而非对每行的列做横向计算,这是核心差异。
扩展:结合版块权重计算总分
如果后续需要基于版块权重计算每个Participant的最终总分,可以在上述结果基础上继续处理:
// 示例:添加版块权重并计算加权总分 let // 承接上面的RenamedColumns步骤 PreviousStep = RenamedColumns, // 加载版块权重表(可替换为实际数据源) WeightTable = Table.FromRecords({ [Section="A", Weight=0.4], [Section="B", Weight=0.3], [Section="C", Weight=0.3] }), // 合并权重数据 MergedWeight = Table.NestedJoin(PreviousStep, {"Section"}, WeightTable, {"Section"}, "Weight", JoinKind.LeftOuter), ExpandedWeight = Table.ExpandTableColumn(MergedWeight, "Weight", {"Weight"}, {"Weight"}), // 动态计算每个Participant的加权分并求和 CalculateTotal = Table.AddColumn(ExpandedWeight, "Total Score", each List.Sum(List.Transform(ParticipantColumns, (col) => _[col] * _[Weight])), Percentage.Type) in CalculateTotal
内容的提问来源于stack exchange,提问作者Regina P.
相关产品推荐
相关产品推荐

