销售需求丨购物篮分析

BOSS:那个谁,对,就是你,你给我研究研究咱商场物品摆放是否合理?!

白茶:(Excuse me?)...BOSS,那个我就是个码字的!

BOSS:加钱!给我做个高大上的购物篮分析!

白茶:(支付宝到账####元!)好嘞!

在实际业务中,商场物品的摆放是否对营销有所影响?所策划的营销活动是否真正的起到了促销价值?活动赠品的使用效果如何?购物篮分析是啥?

这些问题,其核心点都是一个问题——关联度问题

说的通俗易懂点,就是数学概念中我们学过的交集概念的实际用法。

模拟数据:

这是基本的案例数据,导入到PowerBI中,并且添加一个日期表,其模型关系图如下:

但是问题也来了,我们想要做关联度分析,那么就需要有一个可以切换的维度,白茶在上面就已经提过,核心概念是交集。

编写如下代码:

关联度产品表 =
VALUES ( '产品表' )

复制一份产品表作为可以切换的维度,并且模型关系如下:

注意红框的位置,要做到有关系,但是关系并未激活的状态。

解释一下:

有关系是为了后面的DAX做准备,方便函数生效;

未激活是因为激活状态下,和原有的产品表效果是一样的,无法达到筛选对比的效果。

添加切片器、表格,搭建最基本的显示环境:

这是基本的筛选环境和上下文环境,DAX的编写都要在这两个环境中进行。

先对客户购买人次进行统计:

购买人次 =
COUNTROWS ( VALUES ( '销售明细'[客户流水号] ) )

结果如下:

但是数据好像不对劲。

原始数据中[腰带]的行数是1746行,但是我们写的DAX出来的结果是1613行,很明显这个数据对不上啊!咋办?优化代码如下:

A类购买人次 =
SUMX ( '销售明细', CALCULATE ( COUNTROWS ( VALUES ( '销售明细'[客户流水号] ) ) ) )

放在表中进行对比:

很明显这次代码是没问题的。

因为当前上下文环境与行上下文环境不同,造成了COUNTROWS函数上下文转换的问题,因此结果是不准确的;可以通过SUMX函数迭代整个表搭配CALCULATE函数进行上下文转换进行解决。

那么当我们筛选产品B的时候,同时购买AB的客户数量有多少呢?

编写如下代码:

同时购买A和B的客户数 =
VAR BC =
    CALCULATETABLE (
        VALUES ( '销售明细'[客户流水号] ),
        USERELATIONSHIP ( '关联度产品表'[商品名称], '销售明细'[商品名称] ),
        ALL ( '产品表' )
    )
RETURN
    SUMX (
        '产品表',
        IF (
            CALCULATE ( [A类购买人次], Bc ) = [A类购买人次],
            BLANK (),
            CALCULATE ( [A类购买人次], Bc )
        )
    )

结果如下:

这段代码的核心点在于USERELATIONSHIP函数。

此函数激活了未生效的产品关联表B的关系,利用CALCULATETABLE函数计算求得在产品表上下文情况下,有多少[客户订单号]同时符合产品表A与产品表B。

再利用CALCULATE函数进行求值,计算出AB类同时购买人次。

至于SUMX函数和IF函数是为了解决总计问题,以及无效的AB购买人次显示问题。

注:后续函数周期表会详解USERELATIONSHIP函数,这里就不赘述了。

同时购买AB客户数计算出来了,那么关联度就好解决了,占比即可。

代码:

关联度占比 =
IF ( HASONEVALUE ( '产品表'[商品名称] ), [同时购买A和B的客户数] / [A类购买人次], BLANK () )

结果如下:

添加条件格式,并且降序排列:

实际上到这里,关联度分析就已经结束了,但是想想咱中国式BOSS的习惯,肯定是想知道金额的,所以我们仍需处理一下:

A类销售额:

A类销售额 =
SUMX ( '销售明细', '销售明细'[销售数量] * RELATED ( '产品表'[销售价] ) )

B类销售额:

关联产品B的销售额 =
CALCULATE (
    [A类销售额],
    USERELATIONSHIP ( '关联度产品表'[商品名称], '销售明细'[商品名称] ),
    ALL ( '产品表' )
)

AB类销售额:

A客户购买B的金额 =
VAR Ac =
    CALCULATETABLE ( VALUES ( '销售明细'[客户流水号] ) )
VAR Bc =
    CALCULATETABLE (
        VALUES ( '销售明细'[客户流水号] ),
        USERELATIONSHIP ( '关联度产品表'[商品名称], '销售明细'[商品名称] ),
        ALL ( '产品表' )
    )
RETURN
    SUMX (
        '产品表',
        IF (
            CALCULATE ( [关联产品B的销售额], NATURALINNERJOIN ( Ac, Bc ) ) = [A类销售额],
            BLANK (),
            CALCULATE ( [关联产品B的销售额], NATURALINNERJOIN ( Ac, Bc ) )
        )
    )

放在表格中添加条件格式,结果如下:

核心难点在于USERELATIONSHIP函数激活未生效关系,以及利用NATURALINNERJOIN函数取交集进行计算。

初步效果已经达到,但是这样显得不高大上啊!

别急,添加四象限分析图!

嘿嘿,其实就是一个散点图,BOSS不会懂得。

添加一个散点图,再分别添加两条均值线:

说白了,就是在散点图中添加两条均值线来分类数据。

位于右上角的商品,关联度占比高,同时购买金额数高,相关系数远远高于其他三个区域。

这个时候说明我们的营销活动(或者促销活动、赠品、摆放)中处于右上角的商品是有价值的,也就是没有白折腾。

再调整一下布局,添加动态配色,添加时间切片器,其最终效果如下:

怎么样,是不是格调满满?用来升值加薪最好不过了。

(BOSS:厉害了,那个谁!)

散点图配色技巧:


1、添加两个均值代码。

代码1:

关联度均值 =
AVERAGEX ( ALL ( '产品表' ), [关联度占比] )

代码2:

A客户购买B金额均值 =
AVERAGEX ( ALL ( '产品表' ), [A客户购买B的金额] )

2、选取喜欢的颜色,利用IF+AND进行判定。

动态颜色 =
IF (
    AND ( [A客户购买B的金额] <= [A客户购买B金额均值], [关联度占比] <= [关联度均值] ),
    "#108DFE",
    IF (
        AND ( [A客户购买B的金额] <= [A客户购买B金额均值], [关联度占比] > [关联度均值] ),
        "#e6b422",
        IF (
            AND ( [A客户购买B的金额] > [A客户购买B金额均值], [关联度占比] <= [关联度均值] ),
            "#0F5C4A",
            IF ( AND ( [A客户购买B的金额] > [A客户购买B金额均值], [关联度占比] > [关联度均值] ), "#a22041" )
        )
    )
)

当然,也可以使用SWITCH函数,这里就不赘述了。

3、散点图颜色格式设置。

散点图最终效果如下:

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球[PowerBI丨需求圈])

这里是白茶,一个PowerBI的初学者。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342