Power Query分组统计总人数合格人数优秀人数特优人数合计平均最高最低

2022-10-31 15:27:49 浏览数 (3)

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

源

0 人点赞