深入浅出 DAX

举报
TiAmoZhang 发表于 2023/08/02 08:57:31 2023/08/02
【摘要】 深入浅出 DAX:数据分析

01、区间分析

1. 数据区间分析

在 Power BI 中,选择“主页”→“输入数据”,创建“区间辅助表”,如图 1 所示。


■ 图 1 区间辅助表

创建度量值 M.区间次数,表达式如下:

M.区间次数 =
VAR A =
    SELECTEDVALUE ( '区间辅助表'[起始值] )
VAR B =
    SELECTEDVALUE ( '区间辅助表'[结束值] )
VAR C =
    CALCULATE (
        COUNT ( DK[包装方式] ),
        FILTER ( DK, DK[入库] > A && DK[入库] <= B )
    )
RETURN
    C

在可视化区域选择“表”,将区间辅助表的区间、起始值、结束值及度量值 M.区间次数拖入“值”区域。相关设置及返回的值如图 2 所示。


■ 图 2 统计入库量在各所属区间内出现的次数

2. 频次分析

采用 DATATABLE()函数,创建频次表,表达式如下:

频次表 = DATATABLE (
    "频次", STRING,
    "最小值", INTEGER,
    "最大值", INTEGER,
    {
    { "1-2次", 1, 2 },
    { "3-4次", 3, 4 },
    { "5-6次", 5, 6 }
    }
)

返回的值如图 3 所示。


■ 图 3 频次表

在 Power BI 中,选择“主页”→“Excel 工作簿”,打开“D:\深入浅出 DAX\2 数据源\DEMO.xlsx”,在导航器中选择订单及日期表,单击“加载”按钮。创建度量值 M.订单次数,表达式如下:

M.订单次数 =
-- VAR A = MAX ( '日期'[日期] )
VAR B = SELECTEDVALUE ( '频次表'[最小值] )
VAR C = SELECTEDVALUE ( '频次表'[最大值] )
VAR D =
    SUMMARIZE (
        '订单',
        '订单'[订单来源],
        "订单数量",
    CALCULATE (
                COUNT ( '订单'[订单来源] )
                -- , FILTER ( ALL ( '日期' ), '日期'[日期] <= A )
        )
    )
VAR E =
    CALCULATE (
        COUNTROWS (
            FILTER ( D, [订单数量] >= B && [订单数量] <= C )
        )
    )
RETURN
    E

在可视化区域选择“表”,将频次表中的频次及度量值 M.订单次数拖入“值”区域。返回的值如图 4 所示。


如需加入'日期'[日期]为切片器,只需将度量值 M.订单次数中的注释符号(表达式中语句前面的--)取消。

02、ABC 分析

ABC 分析起源于 80/20 分析,在质量管理、库存管理等方面应用较为广泛。ABC 分析是一种分类管理技术,将对象划分为重要的 A 类、一般的 B 类及不重要的 C 类。

1. 动态 ABC 分析(一)

新建静态 ABC 表,表达式如下:

静态ABC =
SUMMARIZECOLUMNS (
    '运单'[产品],
    '运单'[包装方式],
    "数量和", SUM ( '运单'[数量] )
)

在静态 ABC 表中,新建计算列累计值、累计百分比、ABC 分类,表达式如下:

累计值 =
VAR A = '静态ABC'[数量和]
RETURN
    CALCULATE (
       SUM ( [数量和] ),
        FILTER (
          '静态ABC',
            '静态ABC'[数量和] >= A
        )
    )

累计百分比 = DIVIDE([累计值],SUM([数量和]))

ABC分类 =
SWITCH (
    TRUE (),
    [累计百分比] <= 0.7, "A",
    [累计百分比] <= 0.9, "B",
    "C"
)

返回的值如图 5 所示。


■ 图 5 在表中新增 3 列

创建度量值 M.数量和、M.ABC 识别,表达式如下:

M.数量和 = SUM('静态ABC'[数量和])

M.ABC识别 =
SWITCH (
   TRUE (),
    SELECTEDVALUE ( '静态ABC'[ABC分类] ) = "A", "GREEN",
    SELECTEDVALUE ( '静态ABC'[ABC分类] ) = "B", "YELLOW",
    "RED"
)

在可视化区域,选择“折线和簇状柱形图”,相关设置如图 6 所示。


■ 图 6 添加与设置视觉对象(1)

返回的值如图 7 所示。


■ 图 7 添加与设置视觉对象(2)

2. 动态 ABC 分析(二)

在运单表中创建计算列列.年,表达式如下:

运.年 = YEAR('运单'[发车时间])

在静态 ABC 表中,增加'运单'[运.年]。表达式如下:

静态ABC =
SUMMARIZECOLUMNS (
    '运单'[运.年], //新增的列,方便后续的多维度动态分析
    '运单'[产品],
    '运单'[包装方式],
    "数量和", SUM ( '运单'[数量] )
)

创建度量值 M.累计百分比,表达式如下:

M.累计百分比 =
VAR A = [M.数量和]
VAR B =
    CALCULATE (
        [M.数量和],
        FILTER ( ALL ( '静态ABC'[产品] ), [M.数量和] >= A )
    )
RETURN
    DIVIDE (
        B,
        CALCULATE ( [M.数量和], ALL ( '静态ABC'[产品] ) )
    )

将图 7-的“折线和簇状柱形图”中的“行值”更换为度量值 M.累计百分比。在可视化区域新增两个切片器,“字段”分别为静态 ABC 表中的运.年、包装方式。相关设置及返回值如图 8 所示。


■ 图 8 添加与设置视觉对象(3)

选择切片器,返回的值如图 9 所示。


■ 图 9 添加与设置视觉对象(4)


03、RFM 分析

RFM 模型是衡量客户价值和客户创造利益能力的重要工具和手段,RFM 是最近一次消费时间间隔(Recency),消费频率(Frequency)、消费金额(Monetary)三个指标首字母组合,其中,R 值具备望小特性,F 值和 M 值为具备望大特性,即 R 值越小越好而 F 值和 M 值则是越大越好。

1. 模型设计

在管理过程中,对 R、F、M 这三个因子进行高低二水平的全因子组合设计,则 2k 全因子组合设计后可形成 8 种(23=8)组合方案。若对其中的低水平用 1 表示、高水平用 2 表示,则组合设计后的 RFM 客户价值分析模型见表 1。

■ 表 1 RFM 价值分析模型

R 值的高、低水平的判定逻辑与计算顺序:

(1)用事实表中的最大日期与该客户的最近活跃日期相比较,获取日期的间隔天数。

(2)将所有客户的日期间隔天数进行求平均,得到事实表中 R 值的整体平均值。

(3)以整体均值为依据,对各客户的间隔天数进行 1(低水平)2(高水平)代码化。

采用类似的方法对 F 值及 M 值代码化,然后将代码化的 R 值、F 值、M 值进行组合,最终形成类似 222、212 这样的 RFM 组合码,由此得到该客户的价值分类,其中,M 代码为 2 的为重要客户,否则为一般客户。RF 组合码为 22 的属价值客户,RF 组合码为 11 的属已流失客户。RF 组合码为 21 的需深耕以提高其消费频率的客户;RF 组合码为 12 的属近期无交易需唤回以继续消费的客户。

2. 数据准备

在 Power BI 中,通过“主页”→“Excel 工作簿”,将 DEMO.xlsx 中的订单、运单、RFM 表进行加载并在订单表与运单表中创建关联,主键是订单表的运单编号,外键是运单表的运单编号。由于模型中无客户字段,现暂以订单表中的“订单来源”字段比拟客户进行 RFM 分析。相关数据模型与表格如图 10 所示。


■ 图 10 RFM 数据模型

3. 计算 R 值

计算各客户最近活跃日的间隔天数,表达式如下:

M.R1间隔天数 =
DATEDIFF (
    MAX ( '运单'[发车时间] ),
    MAXX (
        ALL ( '运单'[发车时间] ),
        '运单'[发车时间]
    ),
    DAY
)

计算 R 值的整体平均值,表达式如下:

M.R2整体平均天数 =
AVERAGEX (
    ALLSELECTED ( '订单'[订单来源] ),
    [M.R1间隔天数]
)

对 R 值的高低水平代码化,表达式如下:

M.R3R值代码化 =
IFERROR(
    IF ([M.R1间隔天数] < [M.R2整体平均天数],2,1),
BLANK()
)

4. 计算 F 值

计算各客户最近活跃的频率数,表达式如下:

M.F1频数 = DISTINCTCOUNT('运单'[订单编号])

计算 F 值的整体平均值,表达式如下:

M.F2整体平均频数 =
AVERAGEX (
    ALLSELECTED ( '订单'[订单来源] ),
    [M.F1频数]
)

对 F 值的高低水平代码化,表达式如下:

M.F3F值代码化 =
IFERROR(
    IF ( [M.F1频数] > [M.R2整体平均天数],2,1),
    BLANK ()
)

5. 计算 M 值

计算各客户最近活跃的数量额,表达式如下:

M.M1活跃额 = SUM('运单'[数量])

计算 M 值的整体平均值,表达式如下:

M.M2整体均额 =
AVERAGEX (
    ALLSELECTED ( '订单'[订单来源] ),
    [M.M1活跃额]
)

对 M 值的高低水平代码化,表达式如下:

M.M3M值代码化 =
IFERROR(
    IF ( [M.M1活跃额] > [M.M2整体均额],2,1),
    BLANK ()
)

6. RFM 客户价值归类

对客户的 RFM 价值进行归类。

M.RFM价值归类 =
VAR A = [M.R3R值代码化] & [M.F3F值代码化] & [M.M3M值代码化]
RETURN
    CALCULATE ( VALUES ( 'RFM表'[客户价值] ), 'RFM表'[RFM] = A )

7. RFM 客户价值分析

创建表,对客户进价价值分析。

RFM客户价值分析表 =
ADDCOLUMNS (
    SUMMARIZE ( '订单', '订单'[订单来源] ),
    "R天", [M.R1间隔天数],
    "F数", [M.F1频数],
    "M量", [M.M1活跃额],
    "RFM值",
        [M.R3R值代码化] & [M.F3F值代码化] & [M.M3M值代码化],
    "客户类型", [M.RFM价值归类]
)

返回的值如图 11 所示。


■ 图 12 RFM 客户价值分析

8. 可视化分析

创建度量值 M.RFM 订单来源,表达式如下:

M.RFM订单来源 =
IF (
    HASONEVALUE ( 'RFM客户价值分析表'[客户类型] ),
    CONCATENATEX (
        VALUES ( 'RFM客户价值分析表'[订单来源] ),
        'RFM客户价值分析表'[订单来源],
        "、"
    )
)

在 Power BI 可视化区域,单击矩阵图。将 RFM 客户价值分析表中的客户类型拖入“行”区域,勾选度量值 M.RFM 订单来源。相关设置及返回的值如图 13 所示。


■ 图 13 视觉对象设置及返回的值

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。