PowerBI企业运营分析——客户增减模型(时间区间客户状态分析)

PowerBI企业运营分析------客户增减模型(时间区间客户状态分析)

欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。

该平台凭借多源数据的整合与关键指标的实时监控,能够迅速洞察业务表现,精准捕捉问题与机遇。其可视化看板和智能预警功能,帮助管理者直观掌握运营动态,优化资源分配;而深度分析模块则能挖掘潜在趋势,支撑战略决策。无论是降本增效、风险规避,还是市场拓展,平台都能提供强有力的数据支撑,推动企业实现精细化运营,迈向可持续增长之路。

本期课程我们依然将重点放到整合前期分散知识点,帮助您建立清晰的模板搭建思路,本节课程涵盖客户增减模型的制作,本节课程重点时间区间客户状态计算呈现,本期难度再次提升,跟紧节奏不要掉队哦。

想要一份这样的可视化看板吗?想学吗?我教你呀!

一、案例背景:

我司作为国内一家大型服装电商企业,业务范围涵盖男装、女装、童装和配饰。当前,我们正致力于开发企业运营分析系统,旨在通过技术手段实现业绩提升、指标监控、绩效考核、客户维护开发和企业发展预测,促进数据共享与流程优化,进而提升决策效率与运营效率,优化资源配置,强化风险控制,为企业的可持续发展注入动力。

二、设计思路:

通过财务、产品、客户、盈亏预测精准掌控企业发展方向,建立科学的考核机制,并通过控制变动成本,优化企业盈利。

(1)准备基础数据

(2)数据清洗

(3)建立关系视图

(4)个性美化设计

(5)数据建模(度量值)

(6)制作可视化报告

三、数据建模

1、客户流失天数阈值建立

建模选项卡点击新建参数功能,如公式输入数据,最小值0,最大值180,增量值1,创建参数,并将切片器添加到可视化页面

sql 复制代码
客户流失天数阈值 = GENERATESERIES(0, 180, 1)

2、度量值创建

公式:

sql 复制代码
累计客户数 = CALCULATE( [客户数量],ALLSELECTED('日期表'),'事实-订单表'[订单日期]<=MAX('日期表'[日期]))

全局累计客户数 = CALCULATE( [客户数量] ,ALL('日期表'),'事实-订单表'[订单日期]<=MAX('日期表'[日期]))

公式逻辑解析:

公式逻辑基本相同,不同点在于ALLSELECTED和ALL的使用

ALLSELECTED 用于在计算中保留用户当前选择的筛选上下文(如报表切片器、视觉对象交互筛选),同时移除其他可能干扰的隐式筛选

ALL 用于在计算中完全移除指定列或表的筛选上下文,

打破筛选隔离:为计算提供全局视角。

支持动态对比:如占比、排名、趋势分析。

灵活性高但风险并存:需严格避免逻辑冲突和性能陷阱

公式:

sql 复制代码
活跃客户数 = 

VARQJHY=COUNTROWS( FILTER( DISTINCT( '事实-订单表'[客户ID] ) , CALCULATE( FIRSTDATE( '事实-订单表'[订单日期] ) , ALL( '日期表' ) ) < MIN( '日期表'[日期] ) ) )

VARFWHY=COUNTROWS( FILTER( DISTINCT( '事实-订单表'[客户ID]) , CALCULATE( FIRSTDATE('事实-订单表'[订单日期] ) , ALLSELECTED( '日期表' ) ) < MIN( '日期表'[日期] ) ) )

RETURN

SWITCH( TRUE() ,

    SELECTEDVALUE( '客户增减算法'[分析维度]) = "时间维度" , FWHY ,

    QJHY

)

公式逻辑解析:

1、QJHY (全局活跃客户数)

DISTINCT('事实-订单表'[客户ID]):获取所有不重复的客户ID列表

CALCULATE(FIRSTDATE(...), ALL('日期表')):计算每个客户在所有时间范围内的首次下单日期(忽略日期筛选)

< MIN('日期表'[日期]):检查客户的首次下单日期是否早于当前筛选上下文中的最早日期

FILTER:筛选出首次下单日期早于当前筛选上下文中最早日期的客户

COUNTROWS:计算满足条件的客户数量

这个变量计算的是"全局活跃客户数",即不考虑当前日期筛选,只看客户是否在所选时间范围之前有过下单

2、FWHY (范围活跃客户数)

与QJHY类似,但关键区别在于:ALLSELECTED('日期表'):保留报表页面上的其他筛选器,但移除日期表的筛选

这意味着FWHY会考虑报表上的其他筛选条件(如地区、产品类别等),但忽略日期筛选

这个变量计算的是"范围活跃客户数",即在当前报表的其他筛选条件下(不包括日期筛选),客户是否在所选时间范围之前有过下单。

3、返回结果部分

SELECTEDVALUE('客户增减算法'[分析维度]):检查"客户增减算法"表中的"分析维度"列当前选中的值

如果选中的是"时间维度",则返回FWHY(范围活跃客户数)

否则,默认返回QJHY(全局活跃客户数)

公式:

sql 复制代码
新增客户数 = VARQJXZ=COUNTROWS( FILTER( DISTINCT( '事实-订单表'[客户ID] ) , CALCULATE( FIRSTDATE( '事实-订单表'[订单日期] ) , ALL( '日期表' ) ) >= MIN( '日期表'[日期] ) ) )

VARFWXZ=COUNTROWS( FILTER( DISTINCT( '事实-订单表'[客户ID] ) , CALCULATE( FIRSTDATE( '事实-订单表'[订单日期]) , ALLSELECTED( '日期表' ) ) >= MIN( '日期表'[日期] ) ) )

RETURN

SWITCH( TRUE() ,

    SELECTEDVALUE( '客户增减算法'[分析维度]) = "时间维度" , FWXZ ,

    QJXZ

)

公式逻辑解析:

1、QJXZ (全局新增客户数)

DISTINCT('事实-订单表'[客户ID]):获取所有不重复的客户ID列表

CALCULATE(FIRSTDATE(...), ALL('日期表')):计算每个客户在所有时间范围内的首次下单日期(忽略日期筛选)

>= MIN('日期表'[日期]):检查客户的首次下单日期是否等于或晚于当前筛选上下文中的最早日期

FILTER:筛选出首次下单日期等于或晚于当前筛选上下文中最早日期的客户

COUNTROWS:计算满足条件的客户数量

这个变量计算的是"全局新增客户数",即不考虑当前日期筛选,只看客户是否在所选时间范围内首次下单。

2、FWXZ (范围新增客户数)

与QJXZ类似,但关键区别在于:

ALLSELECTED('日期表'):保留报表页面上的其他筛选器,但移除日期表的筛选

这意味着FWXZ会考虑报表上的其他筛选条件(如地区、产品类别等),但忽略日期筛选

这个变量计算的是"范围新增客户数",即在当前报表的其他筛选条件下(不包括日期筛选),客户是否在所选时间范围内首次下单。

3、返回结果部分

SELECTEDVALUE('客户增减算法'[分析维度]):检查"客户增减算法"表中的"分析维度"列当前选中的值

如果选中的是"时间维度",则返回FWXZ(范围新增客户数)

否则,默认返回QJXZ(全局新增客户数)

公式:

sql 复制代码
参数范围流失客户数 = 

VARDeltaDays = [客户流失天数阈值 值]// 7

VARCurrentPeriodStart = MIN('日期表'[日期])

VARCurrentPeriodEnd = MAX( '日期表'[日期])

VARObservationPeriod = 

 FILTER ( ALLSELECTED ( '日期表' ) , '日期表'[日期]  < CurrentPeriodStart && '日期表'[日期]  >= CurrentPeriodStart - DeltaDays - 1 )

VARCustomersWithActivity = 

    CALCULATETABLE ( 

        SUMMARIZE ( '事实-订单表', '事实-订单表'[客户ID] ),

        ObservationPeriod

    )

VARLostCustomers = 

    FILTER ( 

        CustomersWithActivity,

        VARLastOrderDate = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期] ), 

                ObservationPeriod

            )

        VARLostDate = LastOrderDate + DeltaDays + 1// 流失日期

        VARFirstOrderIn2018 = 

            CALCULATE ( 

                MIN ( '事实-订单表'[订单日期] ),

               '事实-订单表'[订单日期] >= CurrentPeriodStart

            )

        VARIsDataCovered = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期] ),

                ALL ( '日期表' )

            ) >= LostDate// 确保数据覆盖流失日期

        RETURN

            LostDate >= CurrentPeriodStart

            && LostDate <= CurrentPeriodEnd

            && ( ISBLANK ( FirstOrderIn2018 ) || FirstOrderIn2018 > LostDate )

            && IsDataCovered

    )

RETURNCOUNTROWS ( LostCustomers )

公式逻辑解析:

(1) DeltaDays = [客户流失天数阈值 值]

作用:定义客户流失的时间窗口(默认为 7 天)。

逻辑:如果客户在 DeltaDays 天内没有再次下单,则视为流失。

(2) CurrentPeriodStart = MIN('日期表'[日期]) 和 CurrentPeriodEnd = MAX('日期表'[日期])

作用:获取当前分析的时间范围(如某个月、季度)。

逻辑:用于判断客户流失是否发生在当前分析的时间段内。

(3) ObservationPeriod

作用:定义 观察窗口(即计算客户活跃度的日期范围)。

逻辑:

起始日期 = CurrentPeriodStart - DeltaDays - 1(当前分析时间段的开始前 DeltaDays + 1 天)

结束日期 = CurrentPeriodStart - 1(当前分析时间段的前一天)

示例:

如果 CurrentPeriodStart = 2023-01-01,DeltaDays = 7,则:

ObservationPeriod = 2022-12-23 至 2022-12-31(共 7 天)

(4) CustomersWithActivity

作用:获取在 ObservationPeriod 期间内有下单的客户列表。

逻辑:

使用 SUMMARIZE 提取 '事实-订单表'[客户ID] 的唯一值。

使用 CALCULATETABLE 应用 ObservationPeriod 筛选。

(5) LostCustomers

作用:筛选出 符合流失条件的客户。

关键逻辑:

LastOrderDate:客户在 ObservationPeriod 内的最后一次下单日期。

LostDate = LastOrderDate + DeltaDays + 1:

如果客户在 LastOrderDate 之后 DeltaDays 天内没有再次下单,则 LostDate 即为流失日期。

FirstOrderIn2018:

检查客户在当前分析时间段(CurrentPeriodStart 之后)是否有新订单。

如果 ISBLANK(FirstOrderIn2018)(无新订单)或 FirstOrderIn2018 > LostDate(新订单在流失日期之后),则符合流失条件。

IsDataCovered:

确保数据覆盖到 LostDate,避免因数据不完整导致误判。

(6) RETURN COUNTROWS(LostCustomers)

作用:统计流失客户的数量。

逻辑:计算 LostCustomers 表的行数。

公式:

sql 复制代码
全局范围流失客户数 = 

VARCurrentPeriodStart = MIN('日期表'[日期])

VARCurrentPeriodEnd = MAX( '日期表'[日期])

VARDeltaDays =DATEDIFF(CurrentPeriodStart,CurrentPeriodEnd,DAY)

VARObservationPeriod = FILTER ( ALL ( '日期表' ) , '日期表'[日期]  < CurrentPeriodStart && '日期表'[日期]  >= CurrentPeriodStart - DeltaDays - 1 )

VARCustomersWithActivity = 

    CALCULATETABLE ( 

        SUMMARIZE ( '事实-订单表', '事实-订单表'[客户ID] ),

        ObservationPeriod

    )

VARLostCustomers = 

    FILTER ( 

        CustomersWithActivity,

        VARLastOrderDate = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期] ), 

                ObservationPeriod

            )

        VARLostDate = LastOrderDate + DeltaDays + 1// 流失日期

        VARFirstOrderIn2018 = 

            CALCULATE ( 

                MIN ( '事实-订单表'[订单日期] ),

                '事实-订单表'[订单日期] >= CurrentPeriodStart

            )

        VARIsDataCovered = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期]),

                ALL ( '日期表' )

            ) >= LostDate// 确保数据覆盖流失日期

        RETURN

            LostDate >= CurrentPeriodStart

            && LostDate <= CurrentPeriodEnd

            && ( ISBLANK ( FirstOrderIn2018 ) || FirstOrderIn2018 > LostDate )

            && IsDataCovered

    )

RETURNCOUNTROWS ( LostCustomers )

公式逻辑解析:

1.变量定义部分

1.1 当前分析时间段

获取当前筛选上下文中的日期范围

CurrentPeriodStart: 当前分析时间段的开始日期

CurrentPeriodEnd: 当前分析时间段的结束日期

1.2 流失天数阈值

计算当前分析时间段的总天数

例如,如果分析2023年1月,DeltaDays=30(1月有31天,但DATEDIFF计算的是间隔天数)

1.3 观察期定义

定义观察客户活跃度的历史时间段

时间段从CurrentPeriodStart - DeltaDays - 1到CurrentPeriodStart - 1

使用ALL('日期表')确保不受当前日期筛选影响

2.客户活动分析

2.1 活跃客户识别

获取在观察期内有过订单的所有客户

SUMMARIZE提取不重复的客户ID列表

CALCULATETABLE应用观察期筛选

2.2 流失客户判定

对每个活跃客户检查是否满足流失条件

LastOrderDate: 客户在观察期内最后一次下单日期

LostDate: 最后下单日期+DeltaDays+1,即理论流失日期

FirstOrderIn2018: 客户在当前分析时间段内的首次下单日期(如有)

IsDataCovered: 确保数据足够新,能覆盖到理论流失日期

流失判定条件:

流失日期必须在当前分析时间段内

客户在当前时间段内没有新订单,或新订单日期晚于流失日期

数据必须足够新,能确认客户确实流失

3.结果返回

计算并返回满足流失条件的客户数量

公式:

sql 复制代码
日期范围流失客户数 = 

VARCurrentPeriodStart = MIN('日期表'[日期])

VARCurrentPeriodEnd = MAX( '日期表'[日期])

VARDeltaDays =DATEDIFF(CurrentPeriodStart,CurrentPeriodEnd,DAY)

VARObservationPeriod = FILTER ( ALLSELECTED( '日期表' ) , '日期表'[日期]  < CurrentPeriodStart && '日期表'[日期]  >= CurrentPeriodStart - DeltaDays - 1 )

VARCustomersWithActivity = 

    CALCULATETABLE ( 

        SUMMARIZE ( '事实-订单表', '事实-订单表'[客户ID] ),

        ObservationPeriod

    )

VARLostCustomers = 

    FILTER ( 

        CustomersWithActivity,

        VARLastOrderDate = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期] ), 

                ObservationPeriod

            )

        VARLostDate = LastOrderDate + DeltaDays + 1// 流失日期

        VARFirstOrderIn2018 = 

            CALCULATE ( 

                MIN ('事实-订单表'[订单日期]  ),

                '事实-订单表'[订单日期]  >= CurrentPeriodStart

            )

        VARIsDataCovered = 

            CALCULATE ( 

                MAX ( '事实-订单表'[订单日期] ),

                ALL ( '日期表' )

            ) >= LostDate// 确保数据覆盖流失日期

        RETURN

            LostDate >= CurrentPeriodStart

            && LostDate <= CurrentPeriodEnd

            && ( ISBLANK ( FirstOrderIn2018 ) || FirstOrderIn2018 > LostDate )

            && IsDataCovered

    )

RETURNCOUNTROWS ( LostCustomers )

公式逻辑解析:

1.1 当前分析时间段

获取当前筛选上下文中的日期范围

CurrentPeriodStart: 当前分析时间段的开始日期(如选择"2023年1月"则为2023-01-01)

CurrentPeriodEnd: 当前分析时间段的结束日期(如2023-01-31)

1.2 流失天数窗口

计算当前分析时间段的总天数(如1月为31天,则DeltaDays=30,因为DATEDIFF计算的是间隔天数)

这个值决定了"客户多久没下单即视为流失"的时间窗口

4.观察期定义

关键点:使用ALLSELECTED保留报表上的其他筛选条件(如地区、产品类别等),仅移除日期筛选

观察期时间段:

开始:CurrentPeriodStart - DeltaDays - 1(当前时间段开始前DeltaDays+1天)

结束:CurrentPeriodStart - 1(当前时间段前一天)

例如分析2023年1月(31天):

观察期=2022-12-01至2022-12-31(31天前到1月1日前)

5.活跃客户识别

获取在观察期内有过订单的所有客户

SUMMARIZE提取不重复的客户ID列表

CALCULATETABLE应用观察期筛选,同时保留其他筛选条件

6.流失客户判定逻辑

4.1关键计算变量

LastOrderDate: 客户在观察期内最后一次下单日期

LostDate: 最后下单日期+DeltaDays+1,即理论流失日期

FirstOrderIn2018: 客户在当前分析时间段内的首次下单日期(如有)

IsDataCovered: 确保数据足够新,能覆盖到理论流失日期

4.2流失判定条件(必须全部满足)

时间范围条件:

LostDate >= CurrentPeriodStart: 流失日期在当前时间段开始之后

LostDate <= CurrentPeriodEnd: 流失日期在当前时间段结束之前

无新订单条件:

ISBLANK(FirstOrderIn2018): 客户在当前时间段完全没有新订单

或FirstOrderIn2018 > LostDate: 新订单日期晚于理论流失日期

数据完整性条件:

IsDataCovered: 数据必须包含到理论流失日期之后,避免因数据不完整误判

7.结果返回

计算并返回满足流失条件的客户数量

公式:

sql 复制代码
流失客户数 = SWITCH( TRUE() ,

    SELECTEDVALUE( '客户增减算法'[分析维度]) = "参数维度" ,  [参数范围流失客户数] ,

    SELECTEDVALUE(  '客户增减算法'[分析维度]) = "时间维度", [日期范围流失客户数] ,

    [全局范围流失客户数]

)

公式逻辑解析:

(1) 参数范围流失客户数 ([参数范围流失客户数])

适用场景:分析特定业务参数(如地区、产品类别)下的流失客户。

计算逻辑:

使用 ALLSELECTED 保留非日期筛选条件(如地区=华东、产品=A)。

计算在观察期(如过去30天)活跃,但在当前筛选范围内不再活跃的客户。

示例:

筛选条件:地区=华东,产品=手机

流失客户 = 在华东地区购买过手机,但最近30天未再购买的客户。

(2) 日期范围流失客户数 ([日期范围流失客户数])

适用场景:分析特定时间段(如2023年1月)的流失客户。

计算逻辑:

使用 ALLSELECTED('日期表') 移除日期筛选,但保留其他筛选(如地区)。

计算在观察期(如2022年12月)活跃,但在当前时间段(2023年1月)未再购买的客户。

示例:

时间段:2023年1月

流失客户 = 在2022年12月购买过,但在2023年1月未再购买的客户。

(3) 全局范围流失客户数 ([全局范围流失客户数])

适用场景:整体业务流失分析(不考虑任何筛选)。

计算逻辑:

使用 ALL('日期表') 移除所有日期筛选。

计算所有曾经活跃但最近未购买的客户(如90天内无订单)。

示例:

流失客户 = 所有曾经下单,但最近90天未再购买的客户。

公式执行流程

检查 '客户增减算法'[分析维度] 的值:

如果是 "参数维度" → 返回 [参数范围流失客户数]

如果是 "时间维度" → 返回 [日期范围流失客户数]

默认 → 返回 [全局范围流失客户数]

动态计算流失客户数:

根据用户选择的维度,自动切换计算逻辑。

公式:

sql 复制代码
参数范围复活客户数 = 

VARDeltaDays = [客户流失天数阈值 值]

VARDatePeriodForEver = FILTER ( ALLSELECTED ( '日期表' ) , '日期表'[日期] < MIN( '日期表'[日期] ) )

VARUserLostAndRecoveryList =

        FILTER ( 

                DISTINCT('事实-订单表'[客户ID]),

                VARLastBuy=CALCULATE(MAXA('事实-订单表'[订单日期]),DatePeriodForEver)

                VARFirstRebuy=CALCULATE(MINA('事实-订单表'[订单日期]))

                RETURNLastBuy <> BLANK()&&LastBuy + DeltaDays+1< FirstRebuy)

RETURN

COUNTROWS(UserLostAndRecoveryList)

公式逻辑解析:

关键变量解析

(1) DeltaDays = [客户流失天数阈值 值]

作用:定义客户流失的时间窗口(如 30 天、90 天)。

逻辑:如果客户超过 DeltaDays 天没有下单,则视为流失。

(2) DatePeriodForEver

作用:定义 历史观察期(即当前分析时间段之前的所有日期)。

逻辑:

ALLSELECTED('日期表'):保留报表上的其他筛选条件(如地区、产品类别),但移除日期筛选。

'日期表'[日期] < MIN('日期表'[日期]):筛选出早于当前分析时间段开始日期的所有日期。

示例:

如果当前分析 2023年1月,则 DatePeriodForEver = 所有日期 < 2023-01-01。

复活客户判定逻辑

(1) UserLostAndRecoveryList

作用:筛选出 曾经流失但后来又复活的客户。

关键变量:

LastBuy:客户在历史观察期(DatePeriodForEver)内的最后一次下单日期。

FirstRebuy:客户在当前分析时间段内的首次下单日期(即复活日期)。

复活判定条件:

LastBuy <> BLANK():客户在历史观察期内至少有一次下单记录。

LastBuy + DeltaDays + 1 < FirstRebuy:

客户在最后一次下单后,超过 DeltaDays 天未购买(即流失)。

之后又在当前时间段内重新下单(即复活)。

结果返回

作用:统计满足复活条件的客户数量。

逻辑:计算 UserLostAndRecoveryList 表的行数。

公式:

sql 复制代码
全局范围复活客户数 = 

VARCurrentPeriodStart = MIN ( '日期表'[日期] )

VARCurrentPeriodEnd =MAX ( '日期表'[日期] )

VARDeltaDays = DATEDIFF( CurrentPeriodStart , CurrentPeriodEnd , DAY )

VARDatePeriodForEver = FILTER ( ALL ( '日期表' ) , '日期表'[日期] < MIN( '日期表'[日期] ) )

VARUserLostAndRecoveryList =

        FILTER ( 

                DISTINCT('事实-订单表'[客户ID]),

                VARLastBuy=CALCULATE(MAXA('事实-订单表'[订单日期]),DatePeriodForEver)

                VARFirstRebuy=CALCULATE(MINA('事实-订单表'[订单日期]))

                RETURNLastBuy <> BLANK()&&LastBuy + DeltaDays+1< FirstRebuy)

RETURN

COUNTROWS(UserLostAndRecoveryList)

公式逻辑解析:

基础变量定义

1.1 当前分析时间段

获取当前筛选上下文中的日期范围

CurrentPeriodStart: 当前分析时间段的开始日期

CurrentPeriodEnd: 当前分析时间段的结束日期

1.2 流失天数窗口

计算当前分析时间段的总天数

例如,分析2023年1月(31天),DeltaDays=30(因为DATEDIFF计算间隔天数)

8.历史观察期定义

关键点:使用ALL('日期表')完全忽略所有日期筛选

时间段:从最早日期到当前分析时间段开始前一天

例如分析2023年1月:

观察期=所有日期 < 2023-01-01

9.复活客户判定逻辑

3.1关键计算变量

LastBuy: 客户在历史观察期内的最后一次下单日期

FirstRebuy: 客户在当前分析时间段内的首次下单日期

3.2复活判定条件

LastBuy <> BLANK(): 客户在历史观察期内至少有一次下单记录

LastBuy + DeltaDays + 1 < FirstRebuy:

客户在最后一次下单后,超过DeltaDays天未购买(即流失)

之后又在当前时间段内重新下单(即复活)

10.结果返回

计算并返回满足复活条件的客户数量

公式:

sql 复制代码
日期范围复活客户数 = 

VARCurrentPeriodStart = MIN ( '日期表'[日期] )

VARCurrentPeriodEnd =MAX ( '日期表'[日期] )

VARDeltaDays = DATEDIFF( CurrentPeriodStart , CurrentPeriodEnd , DAY )

VARDatePeriodForEver = FILTER ( ALLSELECTED ( '日期表' ) , '日期表'[日期] < MIN( '日期表'[日期] ) )

VARUserLostAndRecoveryList =

        FILTER ( 

                DISTINCT('事实-订单表'[客户ID]),

                VARLastBuy=CALCULATE(MAXA('事实-订单表'[订单日期]),DatePeriodForEver)

                VARFirstRebuy=CALCULATE(MINA('事实-订单表'[订单日期]))

                RETURNLastBuy <> BLANK()&&LastBuy + DeltaDays+1< FirstRebuy)

RETURN

COUNTROWS(UserLostAndRecoveryList)

基础变量定义

1.1当前分析时间段

获取当前筛选上下文中的日期范围

CurrentPeriodStart: 当前分析时间段的开始日期

CurrentPeriodEnd: 当前分析时间段的结束日期

1.2 流失天数窗口

计算当前分析时间段的总天数

例如,分析2023年1月(31天),DeltaDays=30(因为DATEDIFF计算间隔天数)

11.历史观察期定义

关键点:使用ALLSELECTED('日期表')保留报表上的其他筛选条件,但移除日期筛选

时间段:从最早日期到当前分析时间段开始前一天

例如分析2023年1月:

观察期=所有日期 < 2023-01-01

12.复活客户判定逻辑

3.1 关键计算变量

LastBuy: 客户在历史观察期内的最后一次下单日期

FirstRebuy: 客户在当前分析时间段内的首次下单日期

3.2 复活判定条件

LastBuy <> BLANK(): 客户在历史观察期内至少有一次下单记录

LastBuy + DeltaDays + 1 < FirstRebuy:

客户在最后一次下单后,超过DeltaDays天未购买(即流失)

之后又在当前时间段内重新下单(即复活)

13.结果返回

计算并返回满足复活条件的客户数量

公式:

sql 复制代码
复活客户数 = SWITCH( TRUE() ,

    SELECTEDVALUE( '客户增减算法'[分析维度]) = "参数维度" ,  [参数范围复活客户数] ,

    SELECTEDVALUE(  '客户增减算法'[分析维度]) = "时间维度", [日期范围复活客户数] ,

    [全局范围复活客户数]

)

公式逻辑解析:

(1)参数维度模式

适用场景:按业务参数(如地区、产品类别)分析复活客户

计算特点:

保留报表上的非日期筛选条件

适合分析特定业务场景下的客户复活情况

例如:分析"华东地区"或"高端产品线"的复活客户

(2)时间维度模式

适用场景:按时间段(如月度、季度)分析复活客户

计算特点:

基于时间范围计算

可以分析季节性复活趋势

例如:分析"2023年Q1季度"的复活客户

(3)全局维度模式(默认)

适用场景:整体业务分析,不考虑特定筛选

计算特点:

忽略所有筛选条件

提供整体业务的客户复活概况

例如:公司整体年度复活客户分析

4、公式执行流程

首先检查'客户增减算法'[分析维度]的值:

如果是"参数维度" → 使用[参数范围复活客户数]计算

如果是"时间维度" → 使用[日期范围复活客户数]计算

其他情况(默认) → 使用[全局范围复活客户数]计算

根据所选分析维度,灵活调整计算逻辑

好的,今天的讲解就到这里。本期课程涉及的公式嵌套逻辑较为复杂,可能对初学者来说理解起来有一定难度。我们到这一步歇一歇,再进行下一步的学习,精彩内容,敬请期待。

相关推荐
瓶子xf7 天前
陪跑教学大纲:PowerBI & QuickBI & FineBI & 数据运营& 面试 & 简历修改等
powerbi·finebi·副业·quickbi
咋吃都不胖lyh10 天前
MySQL 与Power BI 的作用,以及在数据分析中扮演的角色
mysql·数据分析·powerbi
瓶子xf1 个月前
PowerBI 的双隐藏,我在QuickBI 里也找到了
powerbi·quickbi
瓶子xf1 个月前
PowerBI 没实现的的联动同步下钻,QuickBI 实现了
powerbi·quickbi
瓶子xf2 个月前
第二家公司虽然用PowerBI ,可能更适合用以前的QuickBI
powerbi
瓶子xf2 个月前
第三家公司虽然用了powerbi,但更适合用excel
excel·powerbi
Yuki_Xzz2 个月前
powerbi其他切片器能控制而只有Result切片器不能控制
powerbi
Sharewinfo_BJ2 个月前
66别错过!一杯奶茶钱开启企业微信 Power BI 之旅
数据分析·企业微信·数据可视化·powerbi
奔跑草-2 个月前
【服务器】Apache Superset功能、部署与体验
运维·服务器·apache·powerbi·superset
芦骁骏2 个月前
自动处理考勤表——如何使用Power Query,步步为营,一点点探索自定义函数
数据分析·excel·powerbi