在PowerBI中计算销售员的最大连续业绩达标月数

在销售团队管理中,衡量销售员的业绩稳定性是一个重要指标。其中,"最大连续业绩达标月数"能够直观反映销售员持续达成业绩目标的能力,比单纯的累计达标次数更具参考价值。本篇文章将介绍如何在PowerBI中实现这一关键指标的计算。

问题描述

为分析销售员的业绩稳定情况,现在需要计算各销售员在各个月份中的达标次数与最大连续业绩达标月数。

达标次数:当月达标则为1,不达标为0,总计或小计中返回达标次数的汇总。

最大连续业绩达标月数:统计范围为当前月份及之前的滚动时间段,总计或小计中返回明细行中最大的连续业绩达标月数。

具体问题如下图所示:

本案例的初始数据如下:

SalesPersonYearMonthSalesAmountSalesTarget
Alice202501520500
Alice202502480500
Alice202503600500
Alice202504700500
Alice202505400500
Alice202506550500
Bob202501480500
Bob202502510500
Bob202503520500
Bob202504490400
Bob202505530500
Bob202506540500
Charlie202501500500
Charlie202502500500
Charlie202503500500
Charlie202504490500
Charlie202505495500
Charlie202506510500

若需其它辅助表等,可自行创建并建模。

解题要点

本案例的关键点其实就在于最大连续元素数的计算,这里给出三种思路的解法:

1、迭代起始取最大法,其思路如下表所示:

SalesPersonYearMonthIsAchievedStartMonth (<CurMonth&&IsAchieved<>1)Month Num
Alice2025011BLANKBLANK<Month<=202501
Alice2025020
Alice2025031202502202502<Month<=202503
Alice2025041202502202502<Month<=202504
Alice2025050
Alice2025061202505202505<Month<=202506

2、反转累计分组法,其思路如下表所示:

SalesPersonYearMonthIsAchievedMOD(IsAchieved+1,2)Accumulate
Alice202501100
Alice202502011
Alice202503101
Alice202504101
Alice202505012
Alice202506102

3、减排名分组法,其思路如下表所示:

SalesPersonYearMonthIsAchievedRankMonthIndex (Year*12+Month)Grp (MonthIndex-Rank)
Alice202501112430124300
Alice2025020
Alice202503122430324301
Alice202504132430424301
Alice2025050
Alice202506142430624302

解决方案

首先,数据模型如下图所示:

然后,创建如下度量值,其中关于最大连续业绩达标月数指标的计算方法,这里提供三种:

达标次数 = SUMX('Fact',('Fact'[SalesAmount]>='Fact'[SalesTarget])*1)
最大连续业绩达标月数1 = 
MAXX(
    VALUES('Fact'[SalesPerson]),
    VAR DataTbl = 
        CALCULATETABLE(
            ADDCOLUMNS('Fact',"IsAchieved",('Fact'[SalesAmount]>='Fact'[SalesTarget])*1),
            'Fact'[YearMonth]<=MAX('Fact'[YearMonth])
        )
    RETURN
    MAXX(
        DataTbl,
        IF(
            [IsAchieved]=1,
            VAR CurMonth = 'Fact'[YearMonth]
            VAR StartMonth = MAXX(FILTER(DataTbl,'Fact'[YearMonth]<CurMonth && [IsAchieved]<>1),'Fact'[YearMonth])
            RETURN
            COUNTROWS(FILTER(DataTbl,'Fact'[YearMonth]>StartMonth && [YearMonth]<=CurMonth))
        )
    )+0
)
最大连续业绩达标月数2 = 
MAXX(
    VALUES('Fact'[SalesPerson]),
    VAR DataTbl = 
        CALCULATETABLE(
            ADDCOLUMNS('Fact',"IsAchieved",('Fact'[SalesAmount]>='Fact'[SalesTarget])*1),
            'Fact'[YearMonth]<=MAX('Fact'[YearMonth])
        )
    RETURN
    MAXX(
        SUMMARIZE(
            ADDCOLUMNS(
                DataTbl,
                "grp",
                    SUMX(
                        FILTER(DataTbl,'Fact'[YearMonth]<=EARLIER('Fact'[YearMonth])),
                        MOD([IsAchieved]+1,2)
                    )
            ),
            [grp],
            "Num",IF([grp]=0,COUNTROWS('Fact'),COUNTROWS('Fact')-1)
        ),
        [Num]
    )+0
)
最大连续业绩达标月数3 = 
MAXX(
    VALUES('Fact'[SalesPerson]),
    VAR DataTbl = 
        CALCULATETABLE(
            FILTER(
                ADDCOLUMNS('Fact',"IsAchieved",('Fact'[SalesAmount]>='Fact'[SalesTarget])*1),
                [IsAchieved]=1
            ),
            'Fact'[YearMonth]<=MAX('Fact'[YearMonth])
        )
    RETURN
    MAXX(
        SUMMARIZE(
            ADDCOLUMNS(
                DataTbl,
                "Grp",
                    VAR MonthIndex = LEFT('Fact'[YearMonth],4)*12+RIGHT('Fact'[YearMonth],2)
                    VAR RankIndex = RANKX(DataTbl,'Fact'[YearMonth],,1)
                    RETURN
                    MonthIndex-RankIndex
            ),
            [Grp],
            "Num", COUNTROWS('Fact')
        ),
        [Num]
    )+0
)

然后创建一个矩阵,并将月份和销售员字段作为行标签,再将上面的度量值放入矩阵的值字段即可,如下图所示:

总结

以上方法仅供参考,若有更优雅的解决方案,欢迎留言讨论,或者加入我们的技术交流群,一起享受这种思维碰撞的快乐吧!

PBI/DAX技术交流群(QQ):344353627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值