深入浅出DAX:购买推荐及产品ABC分类分析

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 深入浅出DAX:购买推荐及产品ABC分类分析DAX运算求值的三步骤。首先是检测筛选,然后将筛选功能应用于基础表格,最后计算结果。DAX中的筛选器函数是复杂且功能强大的函数。例如筛选函数可用于操作数据上下文来创建动态计算。

image.png


深入浅出DAX:购买推荐及产品ABC分类分析

DAX运算求值的三步骤。首先是检测筛选,然后将筛选功能应用于基础表格,最后计算结果。DAX中的筛选器函数是复杂且功能强大的函数。例如筛选函数可用于操作数据上下文来创建动态计算。

#01、使用细节说明
在DAX中,NOT用于求反操作,IN用于或操作,但不能像SQL中直接NOT IN直接紧邻操作。以下是DAX中在IN 语句之前使用 NOT的应用举例,表达式如下:
js M.其他收货人:= CALCULATE ( SUM ( '运单'[数量] ), NOT ( '收货'[收货人] IN VALUES ( '收货'[收货人]) ) )
返回的值如图1所示。

image.png


■ 图1 NOT与IN的结合应用

IN后面是允许连接两列或多列,其中列表用{}构造,而每行的数据则用括号()构造,其中的括号()代表的是元组,元组内包含的是每行的数据,元组内的数据用逗号区隔。应用举例:

('装货'[包装方式], '装货'[产品]) IN {
   
   ("桶装","尿素"),("箱装","蛋糕纸")}

以上表达式同样可以置于CALCULATE()函数中参与筛选应用的。

在DAX中使用迭代函数时,必须注意到第1个参数的表是来自数据模型的一端还是多端,避免因迭代类聚合函数忽略行上下文而产生的总计值错误。应用举例,创建度量值M.总成本1和M.总成本2,表达式如下:

M.总成本1:= SUMX(
    '合同',
SUMX(
        '运单',
        '运单'[成本]*'运单'[数量]
        )
    )//该表达式返回的总计值有误

M.总成本2 := SUMX(
    '合同',
CALCULATE(
SUMX(
            '运单',
            '运单'[数量]*'运单'[成本])
        )
    )

创建透视表,将合同表的产品拖入行标签,勾选度量值M.总成本1和M.总成本2,返回的值如图2所示。

image.png


■ 图2 在模型的一端运用聚合函数

02、购买与推荐分析

CALCULATE()函数的第1个参数返回的结果为值,常用于COUNTROWS()、SUM()等聚合函数;第1个参数会依据紧接其后的各筛选器参数所修改的上下文来计算,第2个参数可以为表。表达式如下:

M.共有产品 :=
CALCULATE (
   SUM('订单'[数量]),
    INTERSECT (
        VALUES ( '订单'[产品] ),
       VALUES ( '运单'[产品] )
    )
)

除第1个参数外,其他参数均为表。应用举例,表达式如下:

M.共有产品B :=
CALCULATE (
   SUM('运单'[数量]),
    INTERSECT (
       VALUES ( '订单'[产品] ),
        VALUES ( '运单'[产品] )
    ),
    INTERSECT (
      VALUES ( '装货'[包装方式] ),
      VALUES ( '运单'[包装方式] )
    )
)

订单表中共11个产品(数量和205);在运单表中共10个产品(没有的产品为包装绳,数量为2)。返回的值如图3所示。

image.png


在CALCULATE()的第2个参数中,利用FILTER()参数部分扩大或缩小筛选上下文的范围。表达式如下:

js M.度量ZF:= CALCULATE ( DISTINCTCOUNT ( '运单'[运单编号] ), FILTER ( ADDCOLUMNS ( VALUES ( '运单'[运单编号] ), "行数", COUNTROWS ( '运单' ) ), [行数] > 0 ) )
返回的值如图4所示。

image.png


■ 图4 CALCULATE()中的FILTER()参数

03、产品ABC分类分析

在DAX中ABC分类分析一般通过三步来完成的。第1步:利用计算列或度量值计算累计值;第2步:依据累计值完成累计占比;第3步:对占比进行ABC分类。创建度量值M.运单量、M.累计运单量、M.累计占比、M.ABC分类。表达式如下:

M.运单量:=SUM('运单'[数量])

M.累计运单量 :=
VAR A = [M.运单量]
VAR B =
    ADDCOLUMNS ( ALL ( '运单'[产品] ), "运量", [M.运单量] )
RETURN
    IF (
        HASONEVALUE ( '运单'[产品] ),
        SUMX ( FILTER ( B, [运量] >= A ), [运量] )
    )

M.累计占比 :=
DIVIDE (
    [M.累计运单量],
    CALCULATE ( [M.运单量], ALL ( '运单'[产品] ) )
)

M.ABC分类 :=
IF (
    HASONEVALUE ( '运单'[产品] ),
    SWITCH (
        TRUE (),
        [M.累计占比] <= 0.7, "A",
        [M.累计占比] <= 0.9, "B",
        "C"
    )
)

创建透视表,将运单表中的产品拖入行区域,勾选度量值M.运单量、M.累计运单量、M.累计占比、M.ABC分类。返回的值如图5所示。

image.png


■ 图5 产品的ABC分类分析

04、产品期初与结存分析

在DK表中,创建计算列库.年月,表达式如下:

.年月:= YEAR('DK'[日期])*100+MONTH('DK'[日期])

结存分析的基本原理:上期的期末等于本期的期初。创建度量值M.入库量、M.出库量、M.期初量、M.结存量,表达式如下:

M.入库量:= SUM(DK[入库])
M.出库量:= SUM(DK[出库])

M.期初量:=
CALCULATE (
    [M.入库量] - [M.出库量],
    FILTER (
        ALL ('DK'[.年月] ),
        'DK'[.年月] < MIN ( 'DK'[.年月] )
    )
)

M.结存量:= [M.期初量]+[M.入库量]-[M.出库量]

创建透视表,将库.年月拖入行标签,勾选度量值M.期初量、M.入库量、M.出库量、M.结存量。返回的值如图6所示。

image.png


■ 图6 出入库期初与结存分析

目录
相关文章
|
1月前
|
监控 Java 测试技术
精准化测试原理简介
该文探讨了软件测试中的精准化测试问题,通过找不同游戏引出测试覆盖的挑战。文章指出,全面的测试覆盖并不现实,自动化测试虽有帮助但并非银弹,且面临成本和覆盖率局限。接着,文章提出需要“最强大脑”来快速识别代码差异、影响范围及测试覆盖率。为此,它介绍了通过语法分析器和字节码来定位代码差异,利用ASM进行调用链分析,并借助Jacoco进行覆盖率统计。此外,文章强调了增量覆盖率统计和调用链在接口测试中的重要性,同时提醒高覆盖率不代表高质量,测试策略应结合业务逻辑和代码审查。
20 2
|
4天前
|
数据采集 人工智能 自然语言处理
ChatGPT系统课程 - 提示词的重点使用场景之内容总结和内容提取
ChatGPT系统课程 - 提示词的重点使用场景之内容总结和内容提取
|
4月前
|
存储 搜索推荐 分布式数据库
用户画像标签系统体系解释
用户画像标签系统体系解释
137 1
阿里云产品分类
阿里云产品分类自制脑图
101 1
阿里云产品分类
|
11月前
|
Web App开发 监控 安全
【应用分类】技术应用概述
【应用分类】技术应用概述
|
人工智能 安全 物联网
阿里云产品体系粗略概述
阿里云产品体系粗略概述
272 0
阿里云产品分类——阿里云产品分为6大分类
阿里云产品分类——阿里云产品分为6大分类自制脑图
121 1
阿里云产品分类——阿里云产品分为6大分类
|
搜索推荐 算法 Python
使用Python3配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)
个性化推荐可谓风生水起,Youtube,Netflix,甚至于Pornhub,这些在互联网上叱咤风云的流媒体大鳄无一不靠推荐系统吸引流量变现,一些电商系统也纷纷利用精准推荐来获利,比如Amzon和Shopfiy等等,精准推荐用事实告诉我们,流媒体和商品不仅仅以内容的传播,它还能是一种交流沟通的方式。
使用Python3配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐)
|
SQL 分布式计算 安全
云服务案例分析小测答案
本文分享云服务案例分析的小测答案。
104 0
|
开发者
产品和服务的分类 | 学习笔记
快速学习产品和服务的分类。
813 0
产品和服务的分类 | 学习笔记