Power BI企业运营分析——购物篮分析
Power BI企业运营分析——购物篮分析
欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。借助多源数据的整合与关键指标的实时监控,该平台犹如企业的智慧之眼,能够精确剖析业务现状,迅速捕捉机遇与挑战。
其可视化看板和智能预警功能,帮助管理者直观掌握运营动态,优化资源分配;而深度分析模块则能挖掘潜在趋势,支撑战略决策。无论是致力于降本增效、风险管控的稳健前行,还是积极寻求市场拓展的锐意进取,该平台都能以数据为翼,助力企业翱翔于精细化运营与可持续增长的蓝天。
本期课程我们依然将重点放到整合前期分散知识点,帮助您建立清晰的模板搭建思路,本节课程涵盖购物篮分析、关联最优组合推荐,本节课程重点关联指标计算及动态切换分析方法,难度已经增加,跟紧脚步不要掉队哦。
想要一份这样的可视化看板吗?想学吗?我教你呀!
一、案例背景:
我司作为国内一家大型服装电商企业,业务范围涵盖男装、女装、童装和配饰。当前,我们正全力打造企业运营分析系统,该系统旨在借助先进技术手段,实现业绩的稳步增长、指标的全面监控、绩效考核的精准实施、客户关系的深度维护与开发,以及企业发展的科学预测。通过促进数据的无缝共享与流程的不断优化,我们将进一步提升决策效率与运营效率,优化资源配置结构,加强风险控制能力,为企业的长远发展注入强劲动力。
二、设计思路:
通过财务、产品、客户、盈亏预测精准掌控企业发展方向,建立科学的考核机制,并通过控制变动成本,优化企业盈利。
(1)准备基础数据
(2)数据清洗
(3)建立关系视图
(4)个性美化设计
(5)数据建模(度量值)
(6)制作可视化报告
2.1准备基础数据
将维度产品表引用一份
公式:
维度-产品切片器 = '维度-产品'
2.3建立关系视图
将维度-产品表产品ID、维度-产品切片器表产品ID与事实-订单表产品ID建立关系,其中维度-产品切片器表产品ID与事实-订单表产品ID关系选择不可用
2.5数据建模
2.5.1、分析方法表建立
公式:
购物篮分析维度 =
DATATABLE(
"分析维度", STRING , "序号" , INTEGER , { { "购买AB销售额" , 1 } ,{ "购买AB客户数" , 2 }}
)
购物篮算法 = DATATABLE( "算法" , STRING , "序" , INTEGER ,
• {
• { "客户置信度" , 4 } ,
• { "业绩置信度" , 3 } ,
• { "关联客户数" , 2 } ,
• { "关联销售额" , 1 }
• })
公式逻辑解析:DATATABLE函数,用于手动创建一个内存中的静态表,无需连接外部数据源。
语法:
DATATABLE(
列名
1, 数据类型1, 列名2, 数据类型2, ..., {{`行`1`数据`},
{行
2数据
},...
})定义了两列:
分析方法
:文本类型(STRING
),描述购物篮分析的具体方法。
序号
:整数类型(INTEGER
),标识方法的顺序。
2.5.2 度量值建立
公式:
判断是否重复 = IF( SELECTEDVALUE( '维度-产品'[子类别] ) = SELECTEDVALUE( '维度-产品切片器'[子类别] ) , 1 , 0 )
公式逻辑解析:公式比较这两个SELECTEDVALUE返回的值是否相等
公式:
购买A产品客户数 =
VARA = CALCULATE( [客户数量] , USERELATIONSHIP( '维度-产品切片器'[产品ID] , '事实-订单表'[产品ID]) , ALL( '维度-产品' ))
RETURN
IF ( [判断是否重复] = 1 , BLANK() , A )
购买A产品销售额 =
VARA = CALCULATE( [销售金额] , USERELATIONSHIP( '维度-产品切片器'[产品ID] , '事实-订单表'[产品ID]) , ALL( '维度-产品' ))
RETURN
IF ( [判断是否重复] = 1 , BLANK() , A )
公式逻辑解析:
VAR A = CALCULATE(...)
[客户数量]:这是一个预先定义的度量值,计算客户数量。
USERELATIONSHIP:
临时激活 '维度-产品切片器'[产品ID] 和 '事实-订单表'[产品ID] 之间的关系(即使它们原本没有直接关系)。
这样,计算 [客户数量] 时会基于 '维度-产品切片器' 的选择来筛选订单数据。
ALL( '维度-产品' ):
移除 '维度-产品' 表的所有筛选条件,确保计算不受当前产品筛选的影响。
VAR A 计算的是:
在 '维度-产品切片器' 选中的产品(A产品)的订单中,有多少不同的客户购买过该产品。
RETURN IF( [判断是否重复] = 1, BLANK(), A )
[判断是否重复] 是另一个度量值,用于检查当前行(或筛选上下文)的产品是否与 '维度-产品切片器' 选中的产品相同。
如果 [判断是否重复] = 1(即当前产品 = A产品),则返回 BLANK()(不显示)。
否则,返回 A(即购买A产品的客户数)。
→ 逻辑目的:
避免在报表中重复显示当前产品的客户数(因为可能已经有其他列显示该数据)。
仅显示 非当前产品 的客户购买A产品的情况。
公式:
购买B产品客户数 = IF([判断是否重复]=1, BLANK(),CALCULATE(
• [客户数量],
• KEEPFILTERS('维度-产品') ))
购买B产品销售额 = IF([判断是否重复]=1, BLANK(),CALCULATE(
• [销售金额],
• KEEPFILTERS('维度-产品')))
公式逻辑解析:
(1)[判断是否重复] = 1
[判断是否重复] 是一个预先定义的度量值,用于检查当前行(或筛选上下文)的产品是否与某个特定产品(如B产品)相同。
如果 =1,表示当前产品 就是B产品。
如果 ≠1,表示当前产品 不是B产品。
(2) IF([判断是否重复]=1, BLANK(), ...)
如果当前产品是B产品([判断是否重复]=1),则返回 BLANK()(即不显示)。
否则(当前产品不是B产品),执行 CALCULATE(...) 计算销售额。
(3) CALCULATE([销售金额], KEEPFILTERS('维度-产品'))
[销售金额]:这是一个预定义的度量值,用于计算具体的销售额。
KEEPFILTERS('维度-产品'):
通常情况下,CALCULATE 会覆盖现有筛选条件,但 KEEPFILTERS 会 保留当前对 '维度-产品' 的筛选。
这意味着在计算 [销售金额] 时,结果仍然会受到当前产品筛选条件的限制,即仅计算符合当前筛选条件的产品销售额。
2.5.3逻辑总结
如果当前行是B产品([判断是否重复]=1):
返回 BLANK()(不显示),避免重复计算。
如果当前行不是B产品:
计算 当前产品 的销售额([销售金额]),并保留当前产品的筛选。
公式:
关联客户数 =
VARCustomersA = CALCULATETABLE(
• SUMMARIZE('事实-订单表', '事实-订单表'[客户ID]),
• USERELATIONSHIP('维度-产品切片器'[产品ID], '事实-订单表'[产品ID]),
• ALL('维度-产品'))
VARCustomersB = CALCULATETABLE(
• SUMMARIZE('事实-订单表', '事实-订单表'[客户ID]),
• KEEPFILTERS('维度-产品'))
RETURN
IF([判断是否重复]=1 || ISEMPTY(CustomersA) || ISEMPTY(CustomersB),BLANK(),COUNTROWS(INTERSECT(CustomersA, CustomersB))
)
公式逻辑解析:
这个DAX公式 关联客户数 用于计算同时购买了两种产品(A产品和B产品)的客户数量,其中A产品由切片器选择,B产品由当前行决定。以下是详细解析:
(1) VAR CustomersA
作用:获取购买了 A产品(由切片器选择) 的所有客户列表。
逻辑:
SUMMARIZE('事实-订单表', '事实-订单表'[客户ID]):提取订单表中唯一的客户ID。
USERELATIONSHIP('维度-产品切片器'[产品ID], '事实-订单表'[产品ID]):临时激活切片器产品与订单表的关系。
ALL('维度-产品'):忽略当前产品筛选,确保计算基于切片器的选择。
(2) VAR CustomersB
作用:获取当前行产品(B产品)的所有客户列表。
逻辑:
SUMMARIZE('事实-订单表', '事实-订单表'[客户ID]):提取订单表中唯一的客户ID。
KEEPFILTERS('维度-产品'):保留当前行产品的筛选,仅计算当前产品的客户。
(3) RETURN IF(...)
条件判断:
[判断是否重复]=1:如果当前行产品 = A产品(切片器选择的产品),则跳过。
ISEMPTY(CustomersA):如果A产品没有客户购买,则跳过。
ISEMPTY(CustomersB):如果B产品(当前行产品)没有客户购买,则跳过。
返回值:
如果满足上述任一条件,返回 BLANK()。
否则,计算 CustomersA 和 CustomersB 的交集(即同时购买A和B的客户数),并返回其数量。
公式:
关联销售额 =
VARSelectedProduct = SELECTEDVALUE('维度-产品切片器'[产品ID])
VAROrdersWithA = CALCULATETABLE(
• VALUES('事实-订单表'[客户ID]),
• USERELATIONSHIP('维度-产品切片器'[产品ID], '事实-订单表'[产品ID]),
• ALL('维度-产品'))
RETURN
IF([判断是否重复]=1,BLANK(),CALCULATE(
• [销售金额],
• TREATAS(VALUES('维度-产品'[产品ID]), '事实-订单表'[产品ID]),
• OrdersWithA))
公式逻辑解析:
(1) VAR SelectedProduct
获取切片器当前选择的产品ID(A产品),但实际公式中未直接使用此变量,可能是预留的。
(2) VAR OrdersWithA
作用:找出所有购买过切片器所选产品(A产品)的客户列表。
逻辑:
VALUES('事实-订单表'[客户ID]):提取订单表中唯一的客户ID。
USERELATIONSHIP:临时激活切片器产品与订单表的关系。
ALL('维度-产品'):忽略当前行产品的筛选,确保仅基于切片器选择计算。
(3) IF([判断是否重复]=1, BLANK(), ...)
如果当前行产品 = 切片器选择的产品(A产品),则返回 BLANK()(避免重复计算)。
否则,执行 CALCULATE 计算关联销售额。
(4) CALCULATE([销售金额], ...)
核心计算:统计与A产品相关联的销售额。
筛选条件:
TREATAS(VALUES('维度-产品'[产品ID]), '事实-订单表'[产品ID]):
将当前行产品的ID映射到订单表,筛选当前产品(B产品)的订单。
OrdersWithA:
进一步筛选仅包含购买过A产品的客户(即同时购买A和B的客户)
公式:
业绩支持度 = IF( [判断是否重复]=1 , BLANK() ,DIVIDE([关联销售额],CALCULATE([销售金额],ALL()
)))
客户支持度 = IF( [判断是否重复]=1 , BLANK() ,DIVIDE([关联客户数],CALCULATE([客户数量],ALL()
)))
公式逻辑解析:
(1) 条件判断 [判断是否重复] = 1
如果当前行产品 = 切片器选择的产品(A产品),则返回 BLANK()(避免自关联计算)
否则执行DIVIDE计算
(2) 分子 [关联客户数]
表示同时购买当前产品(B产品)和切片器选择产品(A产品)的客户数量
这是预先计算好的度量值,通常通过客户ID交集计算得出
(3) 分母 CALCULATE([客户数量], ALL())
[客户数量]:总客户数度量值
ALL():移除所有筛选上下文,计算全局总客户数
这确保了分母是基准值(所有客户)
(4) DIVIDE函数
安全除法,自动处理分母为零的情况(返回BLANK)
计算比例:关联客户数 / 总客户数
公式:
客户提升度 = VARA=DIVIDE([购买A产品客户数],CALCULATE([客户数量],ALL()))
VAR B=DIVIDE([购买B产品客户数],CALCULATE([客户数量],ALL()))
VAR C=AB
RETURN
DIVIDE([客户支持度],C)
业绩提升度 =VAR A=DIVIDE([购买A产品销售额],CALCULATE([销售金额],ALL()))
VAR B=DIVIDE([购买B产品销售额],CALCULATE([销售金额],ALL()))
VAR C=AB
RETURN
DIVIDE([客户支持度],C)
公式逻辑解析:
变量A:A产品销售占比
[购买A产品销售额]:切片器选定A产品的销售额CALCULATE([销售金额], ALL()):全局总销售额(忽略所有筛选)作用:计算A产品销售额占全公司销售额的比例变量B:B产品销售占比逻辑同变量A,计算当前行产品(B产品)的销售占比变量C:联合影响因子将两个产品的销售占比相乘,形成组合权重
数学意义:客户支持度与产品组合权重的比值
公式:
客户置信度 = DIVIDE( [关联客户数] , [购买B产品客户数])
业绩置信度 = DIVIDE( [关联销售额] , [购买B产品销售额])
公式逻辑解析:
用于评估产品组合销售质量的核心指标是:'B产品的销售中有多少比例是由A产品的客户贡献的',这一指标反映了产品间的客户资源共享效率,
公式:
交叉客户潜力指数 =
[客户提升度] DIVIDE([关联客户数],[购买B产品客户数],0
)
交叉销售潜力指数 =
[客户提升度] DIVIDE([关联销售额],[购买B产品销售额],0
)
公式逻辑解析:
交叉销售潜力指数是一个用于衡量向现有客户推荐相关产品(B产品)成功可能性的指标
公式:
业绩推荐优先级 =
VAR LiftValue = [业绩提升度]
VAR SalesRatio = DIVIDE( [关联销售额],[购买B产品销售额], 0)
RETURN
SWITCH(TRUE(),ISBLANK(LiftValue) || ISBLANK(SalesRatio), BLANK(),LiftValue > 1&& SalesRatio > 0.1, "高优先级",LiftValue > 1 && SalesRatio > 0.05, "中优先级",LiftValue > 1, "低优先级","不推荐"
)
客户推荐优先级 =
VAR LiftValue = [客户提升度]
VAR SalesRatio = DIVIDE( [关联客户数],[购买B产品客户数], 0)
RETURN
SWITCH(TRUE(),ISBLANK(LiftValue) || ISBLANK(SalesRatio), BLANK(),LiftValue > 1&& SalesRatio > 0.1, "高优先级",LiftValue > 1 && SalesRatio > 0.05, "中优先级",LiftValue > 1, "低优先级","不推荐"
)
公式逻辑解析:
1.变量定义部分
LiftValue:存储客户提升度值,表示该客户的价值提升程度
SalesRatio:计算关联比率 = 关联客户数 / 购买B产品客户数
使用DIVIDE函数避免除以零错误,当分母为0时返回0
2.SWITCH逻辑判断部分
SWITCH函数按顺序评估条件,返回第一个匹配的结果:
数据检查:
ISBLANK(LiftValue) || ISBLANK(SalesRatio):如果任一值为空,返回BLANK()
高优先级:
LiftValue > 1 && SalesRatio > 0.1:客户价值高且关联性强
表示:客户价值高于平均水平,且每10个购买B产品的客户中至少有1个会关联购买
中优先级:
LiftValue > 1 && SalesRatio > 0.05:客户价值高但关联性中等
表示:客户价值高,但每20个购买B产品的客户中才有1个会关联购买
低优先级:
LiftValue > 1:仅客户价值高,但关联性弱
表示:虽然客户有价值,但不太可能接受B产品的交叉销售
默认情况:
不符合以上条件的返回"不推荐"
公式:
RANK-客户数占比 = RANKX( ALLSELECTED( '维度-产品'[子类别] ) , [客户置信度])
RANK-客户数AB = RANKX( ALLSELECTED( '维度-产品'[子类别] ) , [关联客户数])
RANK-销售额占比 = RANKX( ALLSELECTED( '维度-产品'[子类别] ) , [业绩置信度])
RANK-销售额AB = RANKX( ALLSELECTED( '维度-产品'[子类别] ) , [关联销售额])
公式逻辑解析:
RANKX函数
功能:对一组值进行排名计算
语法:RANKX(表, 表达式, [值], [顺序], [关系])
这里只使用了前两个参数:表和表达式
3.ALLSELECTED函数
功能:返回当前上下文中所有被选中的产品子类别,忽略行/列/切片器筛选
参数:'维度-产品'[子类别] - 指定要排名的维度列
特点:
保留外部筛选器(如页面级或报告级筛选器)
忽略视觉对象级别的筛选器
4.[关联销售额]
这是排名的依据指标,表示各产品子类别的关联销售额数值
公式工作原理
首先确定排名的范围:当前筛选上下文中所有被选中的产品子类别
然后计算每个子类别的关联销售额
最后根据关联销售额值对这些子类别进行排名
公式:
RANK-指标 =
VAR A = SELECTEDVALUE( '购物篮算法'[算法])
VAR B = SWITCH( TRUE() , A = "客户置信度" , [RANK-客户数占比] ,A = "业绩置信度" , [RANK-销售额占比] ,A = "关联客户数" , [RANK-客户数AB] ,A = "关联销售额" , [RANK-销售额AB] ,BLANK() )
RETURN
B
购物篮气泡图指标 =
VAR A = SELECTEDVALUE( '购物篮分析维度'[分析维度])
VAR B = SWITCH( TRUE() ,A = "购买AB销售额" , [关联销售额] , [关联客户数] )
RETURN
B
公式逻辑解析:将公式与算法切片器连接
公式:
推荐NO1客户关联占比 = CALCULATE ( [客户置信度] , FILTER( ALL( '维度-产品'[子类别] ) , [RANK-指标] = 1 ) )
推荐NO1客户数 = CALCULATE ( [关联客户数] , FILTER( ALL( '维度-产品'[子类别] ) , [RANK-指标] = 1 ) )
推荐NO1销售额 = CALCULATE ( [关联销售额] , FILTER( ALL( '维度-产品'[子类别] ) , [RANK-指标] = 1 ) )
推荐NO1销售关联占比 = CALCULATE ( [业绩置信度] , FILTER( ALL( '维度-产品'[子类别] ) , [RANK-指标] = 1 ) )
公式逻辑解析:
\1. CALCULATE 函数
作用:修改当前筛选上下文,计算特定条件下的度量值。
参数:
[业绩置信度]:目标度量值(可能是关联销售额占比或其他业绩指标)。
FILTER(...):筛选条件,仅保留排名第一的子类别。
2.FILTER 函数
作用:遍历所有产品子类别,筛选出符合 [RANK-指标] = 1 的记录。
参数:
ALL('维度-产品'[子类别]):移除对 '维度-产品'[子类别] 的所有筛选,确保计算所有可能的子类别。
[RANK-指标] = 1:仅保留排名第一的子类别。
\3. ALL('维度-产品'[子类别])
作用:忽略当前筛选上下文中的子类别筛选,确保计算所有子类别,而不仅仅是当前可见的。
\4. [RANK-指标] = 1
作用:筛选出排名第一的子类别(假设 [RANK-指标] 是一个预先计算的排名指标)。
公式:
推荐NO1产品 =
VARA = CALCULATETABLE( VALUES( '维度-产品'[子类别]) , FILTER( ALL( '维度-产品'[子类别] ) , [RANK-指标] = 1 ) )
VARB = CONCATENATEX( A , '维度-产品'[子类别] , "," , '维度-产品'[子类别] , DESC)
RETURN
B
公式逻辑解析:
\1. VAR A = CALCULATETABLE(...)
作用:找出所有排名第一([RANK-指标] = 1)的产品子类别。
CALCULATETABLE:返回一个表,其中包含满足条件的行。
VALUES('维度-产品'[子类别]):返回当前筛选上下文中的唯一子类别列表。
FILTER(ALL(...), [RANK-指标] = 1):
ALL('维度-产品'[子类别]):移除所有子类别筛选,确保计算所有子类别。
[RANK-指标] = 1:筛选出排名第一的子类别。
结果:A 是一个表,包含所有排名第一的子类别(可能有多个并列第一)。
VAR B = CONCATENATEX(...)作用:将 A 表中的子类别名称用逗号连接成一个字符串。
CONCATENATEX:遍历表并连接指定列的值。
参数:
A:要处理的表(排名第一的子类别列表)。
'维度-产品'[子类别]:要连接的列。
",":分隔符(用逗号分隔)。
'维度-产品'[子类别]:排序依据(按子类别名称排序)。
DESC:降序排列(可选,也可以使用 ASC 升序)。
结果:B 是一个字符串,例如 "笔记本电脑,平板电脑"(如果有多个并列第一)。
\3. RETURN B
返回连接后的字符串,即排名第一的子类别名称列表。
公式:
购买A产品名称 = "购买 A 产品:" & SELECTEDVALUE( '维度-产品切片器'[子类别])
推荐组合 = "当客户购买 A 产品:" & SELECTEDVALUE( '维度-产品切片器'[子类别]) & ",根据"&SELECTEDVALUE( '购物篮算法'[算法]) &"算法,推荐客户购买 B 产品:" & [推荐NO1产品]
公式逻辑解析:该公式通过组合多个字符串与动态值,构建出一个完整的推荐信息表述
2.6可视化报告制作
2.6.1 业绩概览制作
第一步:设置报表页格式选项,选择画布背景,上传我们设计好的素材
第二步:插入一个图像,AI机器人图标,点开操作功能,给此图像添加登录页书签。
第三步:插入一个切片器,将度量值合集字段分析维度-指标拖入切片器。
第四步:插入七个书签按钮,输入数据中心、产品维度、客户开发、业绩分析、地域分析、业绩考核、表格维度,并给书签按钮添加我们设计好的图标。
第五步:插入一个形状,用于给以上建立视觉对象添加背景。
第六步:插入三个切片器,将购物篮算法表算法拖入字段中,将日期表日期拖入字段中,将维度-产品切片器表子类别拖入字段中。
第七步:插入两个卡片图,将度量值购买A产品名称和度量值推荐组合,拖入卡片图,设置视觉对象格式,关闭类别标签。
第八步:制作六个卡片图,并依次添加以下度量值:'购买A产品客户数'、'购买A产品销售额'、'关联客户数'、'推荐NO1客户关联占比'、'关联销售额'和'推荐NO1销售关联占比',然后将这些度量值拖入相应的字段中。
第九步:插入两个表格图,第一个表格图,列中拖入维度-产品表子类别字段,度量值购买B产品客户数、关联客户数、交叉客户潜力指数、客户置信度、客户提升度、客户支持度和客户推荐优先级,第二个表格图,列中拖入维度-产品表子类别字段,度量值购买B产品销售额、关联销售额、交叉销售潜力指数、业绩置信度、业绩提升度、业绩支持度和业绩推荐优先级,将两图重叠放置备用。
第十步:插入一个散点图,X轴拖入度量值客户置信度,Y轴拖入度量值业绩置信度,图例拖入维度-产品表子类别字段,大小拖入度量值购物篮气泡图指标,工具提示拖入度量值关联客户数、关联销售额,设置视觉对象格式,打开类别标签,像视觉对象添加进一步分析,添加两条中值线,给此图添加一个切片器,字段拖入购物篮分析维度表分析维度字段。
第十一步:插入一个矩阵图,行中拖入维度-产品切片器表子类别字段,列拖入购物篮算法表算法字段,值拖入度量值推荐NO1产品,将此图覆盖到散点图上。
第十二步:在视图窗口中选择功能,先隐藏矩阵图,再打开书签功能并添加书签,命名为‘象限推荐视图’。接着隐藏散点图,显示矩阵图,并添加书签命名为‘推荐明细表格’。然后隐藏客户数相关表格,再次打开书签功能,添加书签命名为‘业绩关联表格’。隐藏业绩相关表格,显示客户数相关表格,并添加书签命名为‘客户关联表格’。最后,选中这几个书签,右键选择分组,命名为‘页内切换购物篮分析’。
第十五步:插入四个书签按钮,点开样式文本分别输入象限推荐视图、推荐明细表格、业绩关联表格和客户关联表格,点开操作功能,将以上建立书签添加给按钮。
第十六步:如图美化界面
第十七步:打开视图窗口书签功能,为此页面添加一个书签
第十八步:数据中心页,点击文本为购物篮分析的按钮,打开操作功能,类型选择书签,将此页书签添加到按钮。
好的,今天的讲解就到这里。后期课程也会逐渐增加难度,有疑问可查看作者简介,精彩内容,敬请期待。