有如图的数据结构,
C列(Certno)是人的主键,如何能用M写一段分组统计的函数
求每个POLNO的女性总人数,女性平均年龄,20-30岁女性数目,30-40岁女性数目。
我现在用了一个很笨的方法,复制3个源数据,一个求 女性总人数与平均年龄,一个求20-30岁女性数目,一个求30-40岁女性数目
再三个查询分别合并关联,数千万条的数据量,效率太低了
本帖已被设为精华帖!
有如图的数据结构,
C列(Certno)是人的主键,如何能用M写一段分组统计的函数
求每个POLNO的女性总人数,女性平均年龄,20-30岁女性数目,30-40岁女性数目。
我现在用了一个很笨的方法,复制3个源数据,一个求 女性总人数与平均年龄,一个求20-30岁女性数目,一个求30-40岁女性数目
再三个查询分别合并关联,数千万条的数据量,效率太低了
@choicechoi
不难写那就自己写吧,pq参考。
let
源 = Excel.CurrentWorkbook(){[Name="data"]}[Content],
类型 = Table.TransformColumnTypes(源,{{"polno", type text}, {"clntcode", type text}, {"certno", type text}, {"dob", type datetime}, {"sex", type text}}),
周岁 = Table.Buffer(Table.AddColumn(类型, "age",each Number.Round( Duration.Days( DateTime.LocalNow()-[dob])/365.25,1),type number )),
结果 = Table.Group(周岁, {"polno"}
, {
{"女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F")), Int64.Type}
,{"平均年龄", each Number.Round(List.Average(Table.SelectRows(_, each [sex] = "F")[age]),1), type number}
,{"[20,30)女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F" and [age]>=20 and [age]<30)), Int64.Type}
,{"[30,40)女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F" and [age]>=30 and [age]<40)), Int64.Type}
}
)
in
结果
这明明就是pp干的事情,你非要让pq去给你干。来个附件还不是三下五除二就搞定了。jiaopengzi@qq.com
直接分组就可以
@焦棚子 已发到您邮箱这个pp度量值似乎不难写,只是这几个结果还需要与PQ的其他查询所关联,感觉都在pq做比较方便..
@wdx223 可以用一个分组查询把四个结果都查询出来么..
@choicechoi 目测可以
@choicechoi
不难写那就自己写吧,pq参考。
let
源 = Excel.CurrentWorkbook(){[Name="data"]}[Content],
类型 = Table.TransformColumnTypes(源,{{"polno", type text}, {"clntcode", type text}, {"certno", type text}, {"dob", type datetime}, {"sex", type text}}),
周岁 = Table.Buffer(Table.AddColumn(类型, "age",each Number.Round( Duration.Days( DateTime.LocalNow()-[dob])/365.25,1),type number )),
结果 = Table.Group(周岁, {"polno"}
, {
{"女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F")), Int64.Type}
,{"平均年龄", each Number.Round(List.Average(Table.SelectRows(_, each [sex] = "F")[age]),1), type number}
,{"[20,30)女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F" and [age]>=20 and [age]<30)), Int64.Type}
,{"[30,40)女性总人数", each Table.RowCount(Table.SelectRows(_, each [sex] = "F" and [age]>=30 and [age]<40)), Int64.Type}
}
)
in
结果