You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power BI中动态按5年间隔分组统计客户数量?

按5年间隔分组统计客户数量的M语言实现思路

一、数据预处理:逆透视年份列

原始数据里年份是列名,先转成行结构,只保留有活跃记录的行:

  • 用Table.UnpivotOtherColumns把除了客户ID之外的年份列逆透视成年份和状态两列;
  • 过滤掉空值或非活跃的记录,只留有效交易行。
    M语言代码示例:
let
    源 = 你的数据源,
    逆透视年份列 = Table.UnpivotOtherColumns(源, {"客户ID"}, "年份", "状态"),
    筛选活跃记录 = Table.SelectRows(逆透视年份列, each [状态] <> null and [状态] = "活跃")
in
    筛选活跃记录

二、生成5年区间分组

把年份转成数值后,计算对应的5年区间标签:

  • 先将年份列转为数值类型;
  • 对每个年份计算区间起始年:Number.RoundDown((年份-1)/5)*5 +1,结束年就是起始年+4,组合成XXXX-XXXX的区间格式。
    M语言代码示例:
let
    年份转数值 = Table.TransformColumns(筛选活跃记录, {"年份", each Number.From(_), type number}),
    添加5年区间列 = Table.AddColumn(年份转数值, "5年区间", each 
        let
            起始年 = Number.RoundDown(([年份] - 1) / 5) * 5 + 1,
            结束年 = 起始年 + 4
        in
            Text.From(起始年) & "-" & Text.From(结束年)
    )
in
    添加5年区间列

三、去重统计客户数

同一个客户在同一区间内多次活跃只算一次,所以先去重再分组计数:

  • 按客户ID和5年区间去重,避免重复统计;
  • 按5年区间分组,统计每组的客户数量。
    M语言代码示例:
let
    客户区间去重 = Table.Distinct(添加5年区间列, {"客户ID", "5年区间"}),
    分组统计客户数 = Table.Group(客户区间去重, {"5年区间"}, {{"客户数量", each Table.RowCount(_), Int64.Type}})
in
    分组统计客户数

四、动态调整分组间隔(可选)

如果需要支持切换成3年、10年等不同间隔,可做成参数化:

  1. 在Power Query中创建整数参数年份间隔,默认值设为5;
  2. 把步骤二中的5替换为参数年份间隔,代码调整为:
起始年 = Number.RoundDown(([年份] - 1) / 年份间隔) * 年份间隔 + 1,
结束年 = 起始年 + 年份间隔 - 1

之后就能通过参数控件动态调整分组间隔,适配不同可视化需求。

内容的提问来源于stack exchange,提问作者PowerStar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:11:12