分组统计问题

Power Query choicechoi ⋅ 于 2019-12-29 16:00:12 ⋅ 最后回复由 焦棚子 2019-12-31 10:47:21 ⋅ 3410 阅读

file

有如图的数据结构,
C列(Certno)是人的主键,如何能用M写一段分组统计的函数
求每个POLNO的女性总人数,女性平均年龄,20-30岁女性数目,30-40岁女性数目。

我现在用了一个很笨的方法,复制3个源数据,一个求 女性总人数与平均年龄,一个求20-30岁女性数目,一个求30-40岁女性数目
再三个查询分别合并关联,数千万条的数据量,效率太低了

本帖已被设为精华帖!
本帖由 Alex 于 4年前 加精
成为第一个点赞的人吧 :bowtie:
最佳答案
  • 焦棚子 微软 MVP
    2019-12-31 10:47:21

    @choicechoi
    不难写那就自己写吧,pq参考。

    file

    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
        结果
回复数量: 6
  • 焦棚子 微软 MVP
    2019-12-30 12:04:05

    这明明就是pp干的事情,你非要让pq去给你干。来个附件还不是三下五除二就搞定了。jiaopengzi@qq.com

  • wdx223
    2019-12-30 12:14:34

    直接分组就可以

  • choicechoi 想成为一名数据分析师,可只懂皮毛
    2019-12-30 22:02:51

    @焦棚子 已发到您邮箱这个pp度量值似乎不难写,只是这几个结果还需要与PQ的其他查询所关联,感觉都在pq做比较方便..

  • choicechoi 想成为一名数据分析师,可只懂皮毛
    2019-12-30 22:03:17

    @wdx223 可以用一个分组查询把四个结果都查询出来么..

  • wdx223
    2019-12-31 08:54:17

    @choicechoi 目测可以

  • 焦棚子 微软 MVP
    2019-12-31 10:47:21

    @choicechoi
    不难写那就自己写吧,pq参考。

    file

    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
        结果
暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter