《关联分析实战:教你用1个模型,让销售额暴增80%!电商/零售人必看!》

楼主
BI工程师,公众号《BI研究所》 来自手机

Power BI财销一体分析——关联分析实践

欢迎来到Powerbi小课堂,前几期课程我们深入学习了各种财务、销售实用案例,本期我将带领大家整合分散知识点,逐步构建一个全面的分析模型,涵盖封面、登录页、导航页、CEO驾驶舱等模块,以及趋势、产品、畅销品等多维度分析,同时融入度量值嵌套、计算组、动态指标、TOPN分析等高阶技巧。今天我将为大家带来最全面实用的关联分析应用实践,通过挖掘消费者购买数据中商品关联规律的数据挖掘技术,主要用于零售和电商领域。其核心目标是发现顾客经常一起购买的商品组合,从而优化营销策略,接下来,让我们直接进入今天的实用技巧分享环节。如果您在实践过程中遇到任何问题,欢迎留言交流。请关注我们的公众号《BI研究所》,以获取更多案例更新和学习资源。

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

案例背景:

我司作为专业运动自行车跨国销售企业,业务范围涵盖自行车、组件、配件及运动服装。当前,我们正致力于开发财销一体化分析系统,旨在通过技术手段实现财务与销售的紧密结合,促进数据共享与流程优化,进而提升决策效率与运营效率,优化资源配置,强化风险控制,为企业的可持续发展注入动力。

设计思路:

通过成本、销量、利润及销售维度精准掌控财务状况,从产品、客户及地域三个层面深入分析企业运营趋势,

  1. 准备基础数据
  2. 数据清洗
  3. 建立关系视图
  4. 个性美化设计
  5. 数据建模(度量值)
  6. 制作可视化报告

首先我们要理解关联分析是什么,关联分析是通过分析交易数据,找出形如“如果买了A,很可能也会买B”的规律,通常用于快速定位产品不同组合的市场接受程度。以下为关键参数的简要介绍:

常用指标

  1. 支持度(Support):表示商品组合在总销售记录中出现的频率。支持度越高,说明该商品组合被顾客同时购买的可能性越大,

置信度(Confidence)则反映了在购买商品A的条件下,顾客购买商品B的概率。置信度越高,意味着购买商品A的顾客同时购买商品B的可能性越大。

  1. 提升度(Lift)衡量的是商品A和商品B同时被购买的频率与它们各自独立被购买频率乘积的比值。当提升度大于1时,表明商品A和商品B之间存在正向关联;小于1时,则表明它们之间可能存在负向关联或相互独立。

典型应用场景

商品陈列优化:将关联性强的商品摆放在相邻位置(如啤酒和尿布经典案例)。

促销组合:设计捆绑销售或交叉推荐(如买手机推荐配件)。

库存管理:根据关联商品需求预测补货。

个性化推荐:电商平台的“买了还买”或“搭配购”功能。

常用算法

Apriori算法:通过逐层搜索频繁项集生成关联规则(需设定最小支持度/置信度)。

FP-Growth算法:利用频繁模式树(FP-Tree)提高效率,适合大数据集。

在建模之前,我们要先了解下此分析方法的难点,首先是关系搭建,我们需要建立两个关于产品的维度表,再确定一条关系可用的前提下,使另一条关系存在,但不可用,以及购买A产品的同时,也购买了B产品的运算怎样实现,当A产品与B产品相同时,怎样将其排除在运算之外。

★建立关系视图(此步骤很关键,关系到后续运算是否可以正常呈现)

公式:

购物篮辅助表 = SUMMARIZECOLUMNS('产品表'[产品],'产品表'[子类别],'产品表'[分类])

购物篮切片表 = '购物篮辅助表'

公式逻辑解析:

SUMMARIZECOLUMNS 是 DAX 中用于 按指定列分组并生成汇总表 的函数。它会根据你提供的列进行分组,并返回一个不重复的组合列表,在建立一个表函数,直接引用购物篮辅助表,那么从公式名称也不难看出,这两张表,一个是用于切片器,一个用于数据呈现。

如下图所示搭建关系,注意关系的虚实关联:

★数据建模:关联分析(又称购物篮分析)

公式:

重复的产品排除 = IF( SELECTEDVALUE( '购物篮切片表'[子类别]) = SELECTEDVALUE( '购物篮辅助表'[子类别]) , TRUE() , FALSE() )

公式逻辑解析:

这个公式用于 判断两个表中的子类别是否相同,并返回 TRUE(相同)或 FALSE(不同)。

通常用于 筛选或标记数据,例如:

在购物篮分析中,避免重复计算相同子类别的商品。

在可视化或计算中,仅保留符合条件的记录。

公式:

bayA类产品的客户数 =

VAR BAYA = CALCULATETABLE(

    VALUES( '销售'[客户关键字] ) ,

    USERELATIONSHIP('购物篮切片表'[产品] , '销售'[产品]) ,

    ALL( '购物篮辅助表' ) // 排除另一个产品切片器的作用

)

RETURN IF( [重复的产品排除], BLANK() , COUNTROWS(BAYA ) )

bayA类产品的销售额 =

VAR BAYA = CALCULATE(

   [总销售额],

    USERELATIONSHIP( '购物篮切片表'[产品], '销售'[产品]) ,

    ALL( '购物篮辅助表' ) // 排除另一个产品切片器的作用

)

RETURN IF( [重复的产品排除] , BLANK() , BAYA)

公式逻辑解析:以bayA类产品的客户数为例

该公式用于计算 购买“bayA类产品”的唯一客户数,并满足以下条件:

如果 [重复的产品排除] 为 TRUE()(即当前产品子类别重复),则返回 BLANK()(不显示数值)。

否则,返回购买该产品的客户数量。

变量1CALCULATETABLE:创建一个临时表,应用指定的筛选条件。

VALUES('销售'[客户关键字]):返回“销售”表中 不重复的客户列表(即购买过产品的客户)。

USERELATIONSHIP('购物篮切片表'[产品], '销售'[产品])
临时激活 购物篮切片表[产品] 和 销售[产品] 之间的 非活动关系(需在数据模型中预先定义但未启用),用于筛选当前产品对应的销售记录。

ALL('购物篮辅助表')
忽略 购物篮辅助表 上的任何筛选器(例如,避免其他切片器影响计算结果)

返回结果:

[重复的产品排除]
如果为 TRUE()(表示当前产品子类别重复),则返回 BLANK()(不显示数值)。

COUNTROWS(BAYA)
否则,计算 BAYA 临时表中的行数(即购买该产品的唯一客户数)。

重要知识点

通过 USERELATIONSHIP 临时使用 购物篮切片表[产品] → 销售[产品] 的关系(而非默认关系),确保筛选基于用户选择的“产品”。

忽略无关筛选器

ALL('购物篮辅助表') 用于排除其他切片器(如基于 购物篮辅助表 的筛选)对计算的干扰。

重复产品排除逻辑

如果 [重复的产品排除] 为真(例如,同一子类别的产品被重复计算),则隐藏结果,避免数据冗余。

公式:

bayB类产品的客户数 =

IF(

    [重复的产品排除],

    BLANK(),

    CALCULATE(

        DISTINCTCOUNT('销售'[客户关键字]),

        KEEPFILTERS('产品表') // 关键修正:保持产品表的筛选上下文

    )

)

bayB类产品的销售额 = IF(

    [重复的产品排除],

    BLANK(),

    CALCULATE(

       [总销售额],

        KEEPFILTERS('产品表') // 关键修正:保持产品表的筛选上下文

    )

)

公式逻辑解析:以bayB类产品的客户数为例

IF([重复的产品排除], BLANK(), ...)

这是一个条件判断,如果[重复的产品排除]为真,则返回BLANK()(空值)

否则执行CALCULATE部分的计算

CALCULATE(DISTINCTCOUNT('销售'[客户关键字]), KEEPFILTERS('产品表'))

CALCULATE:修改筛选上下文的核心函数

DISTINCTCOUNT('销售'[客户关键字]):计算"销售"表中"客户关键字"列的唯一值数量(即不重复的客户数)

KEEPFILTERS('产品表'):这是一个关键修正,它确保在计算时保持对"产品表"的现有筛选上下文

公式:

关联销售额 =

VAR SelectedProduct = SELECTEDVALUE('购物篮切片表'[产品])

VAR OrdersWithA =

    CALCULATETABLE(

        VALUES('销售'[客户关键字]),

        USERELATIONSHIP('购物篮切片表'[产品], '销售'[产品]),

        ALL('购物篮辅助表')

    )

RETURN

IF(

    [重复的产品排除],

    BLANK(),

    CALCULATE(

        SUM('销售'[销售额]),

        TREATAS(VALUES('购物篮辅助表'[产品]), '销售'[产品]),

        OrdersWithA

    )

)

公式逻辑解析:

变量1:VAR SelectedProduct = SELECTEDVALUE('购物篮切片表'[产品])

获取当前筛选上下文中'购物篮切片表'[产品]的选定值

如果有多值则返回空

变量2:VAR OrdersWithA = CALCULATETABLE(...)

定义一个包含特定客户关键字的表

CALCULATETABLE(VALUES('销售'[客户关键字]),...):获取'销售'表中不重复的客户关键字

USERELATIONSHIP('购物篮切片表'[产品], '销售'[产品]):临时激活这两个表之间的产品关系

ALL('购物篮辅助表'):移除对'购物篮辅助表'的所有筛选

返回结果:

IF([重复的产品排除], BLANK(), CALCULATE(...))

如果[重复的产品排除]为真,返回空值

否则执行CALCULATE计算

CALCULATE(SUM('销售'[销售额]), TREATAS(...), OrdersWithA)

SUM('销售'[销售额]):计算销售额的总和

TREATAS(VALUES('购物篮辅助表'[产品]), '销售'[产品]):

将'购物篮辅助表'[产品]的值视为'销售'[产品]的筛选条件

动态创建两个列之间的关系

OrdersWithA:应用之前定义的客户筛选条件

重点高阶公式:

USERELATIONSHIP:临时激活非活动关系,这里建立了'购物篮切片表'和'销售'表之间的产品关系

TREATAS:动态创建筛选条件,将一列的值视为另一列的筛选器

CALCULATETABLE:在修改的筛选上下文中生成表

公式:

关联客户数 =

VAR CustomersA =

    CALCULATETABLE(

        SUMMARIZE('销售', '销售'[客户关键字]),

        USERELATIONSHIP('购物篮切片表'[产品], '销售'[产品]),

        ALL('购物篮辅助表')

    )

VAR CustomersB =

    CALCULATETABLE(

        SUMMARIZE('销售', '销售'[客户关键字]),

        KEEPFILTERS('购物篮辅助表')

    )

RETURN

IF(

    [重复的产品排除] || ISEMPTY(CustomersA) || ISEMPTY(CustomersB),

    BLANK(),

    COUNTROWS(INTERSECT(CustomersA, CustomersB))

)

公式逻辑解析:

变量1:VAR CustomersA = CALCULATETABLE(...)

定义购买'购物篮切片表'中产品的客户集合

SUMMARIZE('销售', '销售'[客户关键字]):从销售表中提取不重复的客户关键字

USERELATIONSHIP('购物篮切片表'[产品], '销售'[产品]):临时激活这两个表之间的产品关系

ALL('购物篮辅助表'):移除对'购物篮辅助表'的所有筛选

变量2:VAR CustomersB = CALCULATETABLE(...)

定义购买'购物篮辅助表'中产品的客户集合

SUMMARIZE('销售', '销售'[客户关键字]):同样提取不重复的客户关键字

KEEPFILTERS('购物篮辅助表'):保持对'购物篮辅助表'的现有筛选条件

返回结果:

IF([重复的产品排除] || ISEMPTY(CustomersA) || ISEMPTY(CustomersB), BLANK(), COUNTROWS(INTERSECT(CustomersA, CustomersB)))

条件判断部分:

[重复的产品排除]:如果为真则返回空值

ISEMPTY(CustomersA):如果CustomersA为空集合

ISEMPTY(CustomersB):如果CustomersB为空集合

以上任一条件为真则返回BLANK()

计算部分:

INTERSECT(CustomersA, CustomersB):获取两个客户集合的交集

COUNTROWS():计算交集中的行数(即客户数量)

重点高阶公式:

INTERSECT:集合运算,获取两个表的交集

ISEMPTY:检查表是否为空,用于错误处理

公式:

支持度 = 同时购买A和B的订单数 / 总客户数

支持度 =

 IF(

    [重复的产品排除] , BLANK() ,

   DIVIDE([关联客户数],CALCULATE([客户数量],ALL()

)))

公式逻辑解析:

首先检查是否满足"[重复的产品排除]"条件

如果为真,则返回空值(BLANK())

如果为假,则计算支持度

支持度的计算方法是:关联客户数除以总客户数(使用ALL()移除了所有筛选上下文)

公式:

提升度 = 支持度 / [(购买A的次数/总购买订单数) * (购买B的次数/总购买订单数)]

提升度 = VAR A=DIVIDE([bayA类产品的客户数],CALCULATE([客户数量],ALL()))

VAR B=DIVIDE([bayB类产品的客户数],CALCULATE([客户数量],ALL()))

VAR C=A*B

RETURN

DIVIDE([支持度],C)

公式逻辑解析:

计算单个产品的购买概率

变量1:

A = bayA类产品的客户数 / 总客户数
→ 购买bayA类产品的客户比例(即 P(A))

变量2:

B = bayB类产品的客户数 / 总客户数
→ 购买bayB类产品的客户比例(即 P(B))

计算独立事件预期概率

变量3:

C = A * B
→ 如果A和B独立无关,两者同时被购买的理论概率(即 P(A) × P(B))

计算提升度

提升度 = 支持度 / C
→ 实际共现概率与独立概率的比值

公式:

置信度 = 同时购买A和B的订单数 / 购买A的订单数

置信度 = DIVIDE([关联客户数],[bayA类产品的客户数])

公式逻辑解析:

这个公式计算的是置信度指标,其逻辑是:

分子:[关联客户数] - 同时购买两种产品的客户数量

分母:[bayA类产品的客户数] - 购买A类产品的客户总数

计算:用关联客户数除以A类产品的客户总数

公式:

交叉销售潜力指数 = 提升度(Lift) × 关联销售贡献率

关联销售贡献率 = 关联销售额 / 主产品销售额

交叉销售潜力指数 =

[提升度] * DIVIDE(

    [关联销售额],

    [bayA类产品的销售额],

    0

)

公式逻辑解析:

[提升度]

这是一个预先定义的度量值,通常表示产品组合出现的频率与各自独立出现频率的比值

在关联规则分析中,提升度(Lift)大于1表示正相关,等于1表示独立,小于1表示负相关

DIVIDE函数

计算两个度量值的比值,提供安全除法功能(避免除零错误)

结构:DIVIDE(分子, 分母, 替代值)

这里替代值为0,表示当分母为0时返回0

[关联销售额]

是另一个预先定义的度量值,表示与主产品(bayA类)相关联的销售额

通常计算的是客户购买主产品后,又购买其他关联产品的总销售额

[bayA类产品的销售额]

这是主产品类别的总销售额,作为基准值

公式:

推荐优先级 =

VAR LiftValue = [提升度]

VAR SalesRatio = DIVIDE( [关联销售额],[bayA类产品的销售额], 0)

RETURN

SWITCH(

    TRUE(),

    ISBLANK(LiftValue) || ISBLANK(SalesRatio), BLANK(),

    LiftValue > 1&& SalesRatio > 0.1, "高优先级",

    LiftValue > 1 && SalesRatio > 0.05, "中优先级",

    LiftValue > 1, "低优先级",

    "不推荐"

)

公式逻辑解析:

变量定义

LiftValue: 存储提升度值

SalesRatio: 计算关联销售额与主产品销售额的比值

SWITCH逻辑

使用SWITCH(TRUE(),...)模式实现多条件判断

将判断条件按照优先级从高到低依次排列

优先级分类标准

高优先级: Lift>1 且 销售比例>10%

中优先级: Lift>1 且 销售比例>5%

低优先级: Lift>1 但 销售比例≤5%

不推荐: Lift≤1

行业应用建议

零售业

高优先级组合适合做促销套装

中优先级适合做关联陈列

低优先级可做线上推荐

电商平台

高优先级: "买了也买"首位推荐

优先级: 购物车推荐

低优先级: 商品详情页推荐

★制作可视化报告

第一步:设置报表页格式选项,选择画布背景,上传我们设计好的素材

第二步:插入一个矩形图,填充颜色,打开阴影、发光功能

第三步:添加主页图标图像,启用交互功能,设置类型为书签,并指定书签为主页,点击该图标即可快速跳转至主页。

第四步:插入图像导航图标。

第五步:插入两个切片器,第一个切片器拖入日期表年度季度字段,第二个切片器拖入购物篮切片表子类别字段。

第六步:插入一个矩阵图,进行拖入购物篮辅助表子类别字段,值拖入度量值推荐优先级、bayA类产品的客户数、bayA类产品的销售额、bayB类产品的客户数、bayB类产品的销售额、关联客户数、关联销售额、交叉销售潜力指数、支持度、提升度、置信度。

第七步:插入一个散点图,值拖入购物篮辅助表子类别字段,X轴拖入度量值提升度,Y轴拖入度量值支持度,图例拖入购物篮辅助表分类字段,大小拖入度量值置信度,工具提示拖入度量值推荐优先级,向视觉对象添加进一步分析, 分别给支持度、提升度添加一条中值线。

第八步:如图美化页面。好的,今天的讲解就到这里。后期课程也会逐渐增加难度,如果在学习过程中需要帮助,欢迎随时联系作者,精彩内容,敬请期待。IMG_256

获取模板文件或咨询,联系瓶子微信wdfyqx

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0回帖数 1关注人数 1726浏览人数
最后回复于:2025-4-3 14:35

返回顶部 返回列表