在Power BI/Power Query中合并行并计算学生800米平均用时
解决Power BI跨表计算学生周平均800米用时的方案
先搞定表关联基础
首先得把成绩表和学生详情表的关联建立好,不然跨表取数根本无从谈起:
- 检查关联字段:如果详情表有学生ID,优先用它当关联键(避免重名坑);如果只有姓名,确保所有学生姓名唯一。
- 操作步骤:切换到Power BI的「模型视图」,把详情表的关联字段(比如学生ID)拖到成绩表的对应字段上,建立一对多关系(一个学生对应多条成绩记录)。
方案1:给学生详情表加周平均用时列(用DAX)
不用折腾Power Query,直接在数据模型里用DAX建计算列最省事:
- 切换到「数据视图」,选中学生详情表。
- 点击顶部「新建列」,粘贴下面的DAX公式:
这个公式会自动抓取当前学生的全部成绩,给每条记录打上周数标签,再算出该学生的整体周平均用时。如果要按单周单独统计,把最后一步改成周平均800米用时 = VAR 学生所有成绩 = RELATEDTABLE('成绩表') VAR 带周数的成绩 = ADDCOLUMNS( 学生所有成绩, "所属周", WEEKNUM('成绩表'[日期], 2) // 参数2代表周一为一周起始,可按需改成1(周日起始) ) RETURN AVERAGEX(带周数的成绩, '成绩表'[800米用时])SUMMARIZE(...)即可生成按周拆分的结果。
方案2:在Power Query里合并表后计算周平均
如果一定要在Power Query里操作,得先合并两张表再分组:
- 打开Power Query编辑器,选中成绩表,点击「合并查询」→「合并查询作为新查询」,选择学生详情表,匹配关联字段(比如学生ID/姓名),合并类型选「左外部」,这样成绩表会带上班级、学生ID信息。
- 点击合并列右侧的展开按钮,勾选详情表的「学生ID」「班级」字段,点击确定。
- 添加周数字段:点击「添加列」→「自定义列」,输入公式:
Date.WeekOfYear([日期], Day.Monday) - 分组计算:点击「转换」→「分组依据」,设置分组字段为「学生ID」「所属周」,然后添加聚合操作:选择「平均值」,字段选「800米用时」,命名为「周平均用时」。
- 点击「关闭并应用」,就能得到按学生+周分组的平均用时表。
方案3:生成独立的周平均汇总表(用DAX表)
如果需要单独的汇总表,直接用DAX新建表:
学生周平均800米汇总表 = SUMMARIZECOLUMNS( '学生详情表'[学生ID], '学生详情表'[班级], WEEKNUM('成绩表'[日期], 2), "周平均用时", AVERAGE('成绩表'[800米用时]) )
这个表会自动关联模型中的关系,直接输出包含学生ID、班级、周数、周平均用时的汇总数据。
内容的提问来源于stack exchange,提问作者GoodAnalysis
相关产品推荐
相关产品推荐

