Power Query分组统计总人数合格人数优秀人数特优人数合计平均最高最低
今天的学习代码是有点复杂,可能实际应用中不一定用到,但还是记录一下,也是自己的学习成果吗?
问题与效果看图片吧
【结构流程】
【知识点】
Table.Group
Table.Group( table as table, key as any,aggregatedColumns as list, optional groupKind as nullable number, optionalcomparer as nullable function) as table
解读:
从英文字面来看,这个函数是用来对表进行分组的,即菜单栏里的"分组依据"。
函数语法:Table.Group(表,分组的依据字段,对分组的子对象进行定义,分组的模式,对分组依据字段自定义比较形式)
第一个必填参数:我们很好理解,是从哪个表进行操作。
第二个必填参数:是根据哪列数据进行分组,可以任意格式。参数必须要填写,但是可以是空列表{},只有在不需要值来计算时可以使用。例如_,Table.RowCount等
第三个必填参数:怎么进行分组操作,是一个函数公式。
第四个可选参数:1=全局分组;0=局部分组(分组到下一条不等值为止)
第五个可选参数:目前所知是有2个参数组成的函数(x,y)其中X为每次分组后的第一行;Y为X当前行及下面的每一行。通常用(x,y)=>Number.From()固定格式来处理所判断后的条件值。
第三参数aggregatedColumns书写格式
={{新标题}, each 函数,type 类型}
={{"新标题1",each 函数},{"新标题2", each 函数}}
={{"新标题1", each 函数, type 类型},{"新标题2",each 函数, type 类型}}
={{"求和", each List.Sum([成绩]), type number},{"计数", eachList.Count([学科]), type number}}
【代码】
代码语言:javascript复制合格分= 查询条件[条件]{1}*0.6
优秀分= 查询条件[条件]{1}*0.8
特优分= 查询条件[条件]{1}*0.9
let
源 = Table.Group(数据源,{"单位","班别"},{
{"总人数", each Table.RowCount(_)},
{"合格人数", each Table.RowCount(Table.SelectRows(_, each {[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})}>=合格分))},
{"优秀人数", each Table.RowCount(Table.SelectRows(_, each {[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})}>=优秀分))},
{"特优人数", each Table.RowCount(Table.SelectRows(_, each {[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})}>=特优分))},
{"合计",each List.Sum({[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})})},
{"平均",each Number.Round(List.Average({[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})}),2)},
{"最高",each List.Max({[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})})},
{"最低",each List.Min({[语文],[数学],[物理],[化学],[总分]}{List.PositionOf(List.Range(Table.ColumnNames(数据源),4,6),查询条件[条件]{0})})}
}
)
in
源