前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据分析工具Power BI(七):DAX使用场景及常用函数

大数据分析工具Power BI(七):DAX使用场景及常用函数

原创
作者头像
Lansonli
发布2023-03-27 18:26:42
7.8K0
发布2023-03-27 18:26:42
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客

DAX使用场景及常用函数

Power BI中DAX函数非常多,功能非常强大,下面结合一些实际场景来讲解DAX一些常用的函数,这些场景包含求和、计数、相除、排序、累计、环比、同比,为了更方便后续的可视化展示数据,我们新创建可视化展示的页面,创建一个新表存储后续展示的度量值,具体操作如下:

经过以上步骤的操作可以在"字段"区域看到对应的新建的"度量值表",后续在各个场景中使用时需要选中该"度量值表"后再新建"度量值"这样新创建的度量值会保存到该表中。

一、求和统计

需求:对"2022年点播订单表"统计营收总金额进行展示。

通过观察"2022年点播订单表"数据可以看到没笔订单都有对应的套餐价格以及优惠金额,每笔订单的营收即:套餐金额-优惠金额,所以统计营收总金额将每笔订单的套餐金额-优惠金额累加起来就可以。具体操作步骤如下:

1、在"度量值表"中新建度量值"总营收金额"

度量值DAX公式为:总营收金额 = SUM('2022年点播订单表'[套餐价格])-SUM('2022年点播订单表'[优惠金额])

注意在"度量值表"中我们也可以将后续不使用的"列1"列删除。

2、使用多行卡图进行展示结果

以上创建的度量值可以随着我们可视化指标的不同而变化,例如,统计不同套餐的营收金额,统计不同商圈的营收金额,都可以使用创建的该度量值。操作如下:

同样的方式我们也可以创建可视化表将"门店信息表"中的"商圈类型"与"总营收金额"展示在一起,如下:

并且还可以点击两表中不同的行进行联动,如下:

二、计数统计

在Power BI中用于计数的函数有两个:COUNT和COUNTA,两者都可以对某一列进行计数,用法上一样,区别为COUNTA可以对True或者False列分别统计True和False的数量,所以使用更加广泛。

COUNTA函数的使用方式如下:

代码语言:javascript
复制
COUNTA(ColumnName)

复制

以上"ColumnName"是我们传入到COUNTA函数中要进行计数的列。下面我们新建度量值"总订单量"使用COUNTA函数统计"2022年点播订单表"中总订单数量:

度量值DAX公式为:总订单量 = COUNTA('2022年点播订单表'[订单号])

将创建的"总订单量"度量值拖入到之前创建的"多行卡"中,操作如下:

除了以上计数的需求外,在数据分析时我们还需要进行去重统计,这就需要用到DISTINCTCOUNT函数,DISTINCTCOUNT函数的用法如下:

代码语言:javascript
复制
DISTINCTCOUNT(ColumnName)

复制

以上传入的"ColumnName"列就是需要统计不重复数的列。下面我们创建新的度量值"不重复机器数"来统计"2022年点播订单表"中不重复的机器数量,操作如下:

度量值DAX公式为:不重复机器数 = DISTINCTCOUNT('2022年点播订单表'[机器ID])

将创建的"不重复机器数"度量值拖入到之前创建的"多行卡"中,操作如下:

三、相除统计

在Power BI中有一些场景需要使用到数据相除,我们可以通过"/"符号实现或者使用"DIVIDE"函数实现。使用"/"符号时分母不能为0,使用DIVIDE分母可以为零,这时结果会返回空值,由于DIVIDE函数比较安全,在相除场景下我们经常使用DIVIDE函数。DIVIDE函数的用法如下:

代码语言:javascript
复制
DIVIDE(分子,分母,[分母为零或空时返回的值,默认为空值])

复制

下面通过DIVIDE函数来统计"2022年点播订单表"中成交订单均价(使用总营收金额/总订单数),这里也是通过创建"度量值"来实现,操作如下:

度量值DAX公式为:订单均价 = DIVIDE('度量值表'[总营收金额],'度量值表'[总订单量])

将创建的"订单均价"度量值拖入到之前创建的"多行卡"中,操作如下:

四、排序统计

在Power BI中要实现排序功能可以借助RANKX和ALL函数来实现。RANKX函数功能是排序,其用法如下:

代码语言:javascript
复制
RANKX(表,表达式)

复制

RANKX函数中"表"指的是需要排序的表单,也可以是通过DAX表达式生成的表单,一般我们可以搭配ALL来生成表单,"表达式"是指排序的依据。

ALL函数功能是返回表中所有行或列中的所有值并忽略已应用的任何筛选器,即去除筛选。其用法如下:

代码语言:javascript
复制
ALL([TableNameOrColumnName],[ColumnName]... ...)

复制

ALL第一个参数可以是表也可以是列,表示对表或者列去除筛选。

在使用RANKX函数时必须搭配ALL函数一起使用,表示去除筛选起到绝对排序的效果。下面通过RANKX函数和ALL函数结合创建"商圈营收排名"度量值来统计"2022年点播订单表"中商圈类型营收金额的排名。

首先创建"商圈营收排名"度量值,度量值DAX公式为:商圈营收排名 = RANKX(ALL('门店信息'[商圈类型]),'度量值表'[总营收金额] )

将创建的"商圈营收排名"度量值拖入到之前创建的"表"中,操作如下:

可以看到商圈类型中对应的排名结果。

五、占比统计

一些场景下我们需要统计占比,可以通过DIVIDE和CALCULATE函数来实现,DIVIDE函数前面有介绍,不再赘述。CALCULATE函数是DAX函数中最重要和常用的函数,主要功能是根据指定的条件对数据进行筛选然后按照指定的表达式进行计算,找出满足条件的数据,其用法如下:

代码语言:javascript
复制
CALCULATE(表达式,[筛选器1],[筛选器2]... ...)

复制

以上"表达式"参数是指对筛选后的数据进行计算的表达式,可以执行各种聚合计算,后续参数是一系列的筛选器,筛选器也可以为空,多个筛选器之间用逗号分割,多个筛选器都满足的数据集合才会被指定的表达式进行计算,并返回计算的结果。例如统计"2022年点播订单表"中单曲套餐订单数与总订单量的占比,可以通过以下步骤实现:

首先创建度量值"单曲占比量",度量值DAX公式为:单曲占比量 = DIVIDE(CALCULATE('度量值表'[总订单量],'2022年点播订单表'[套餐名称]="单曲"),'度量值表'[总订单量])

将创建的"单曲占比量"度量值拖入到之前创建的"多行卡"中,操作如下:

可以看到单曲点播的订单占了总订单的将近1半。

六、累计统计

在Power BI中针对时间维度进行累计值统计也是常见的场景,例如统计每月累计交易额、统计每个季度累计交易额等,这就要使用到累计相关的DAX函数,累计相关的DAX函数有三个:TOTALYTD、TOTALQTD、TOTALMTD。

  • TOTALYTD: 计算从本年开始到当前的累计。
  • TOTALQTD: 计算从本季度开始到当前的累计。
  • TOTALMTD: 计算从本月开始到当前的累计。

这几个函数的用法一致,只不过计算的时间维度不同。下面我们分别进行介绍。

需求:针对"2022年点播订单表"统计累计到当前的总营收金额。

以上需求我们可以使用TOTALYTD进行统计,TOTALYTD用法如下:

代码语言:javascript
复制
TOTALYTD(表达式,日期列,[筛选器],[截止日期])

复制

表达式参数代表统计的表达式,日期列参数指定日期时间列,筛选器参数可以过滤数据,截止日期参数指定的是统计截止日期,一般我们使用TOTALYTD时只需要传入前2个参数即可。

完成以上需求首先创建"年累计营收"度量值,并输入度量值DAX公式:年累计营收 = TOTALYTD('度量值表'[总营收金额],'动态日期表'[Date])

在"报表"视图中创建创建可视化"矩阵",在动态日期表中依次选择"季度"和"月份"设置为列,在度量值表中将刚刚创建的"年累计营收"设置为值,绘制可视化图如下:

按照以上同样的方式,创建"季累计营收"和"月累计营收"度量值,并输入对应的度量值DAX公式为: TOTALQTD('度量值表'[总营收金额],'动态日期表'[Date]) 和 TOTALMTD('度量值表'[总营收金额],'动态日期表'[Date]) ,并绘制"矩阵"图,如下:

七、同比与环比统计

在数据分析中我们也经常遇到同比和环比的分析场景,同比和环比是两个不同的概念,同比是指相邻时间段某个相同的时间点的比较,例如:2021与2022年是两个相邻的年份(相邻时间段),2021年5月与2022年5月是这两个相邻时间段的相同时间点都是5月,比较这两个时间段的数据是同比。

环比相对于同比简单,即:相邻的两个时间段的比较,例如:2022年5月和2022年6月数据比较这就是环比。

在资料中找到"2021~2022年工资表"导入到PowerBI中并修改对应的日期格式,如下图所示:

下面我们分别在PowerBI中针对"2021~2022年工资表"数据统计工资月同比增长率与工资月环比增长率。

  • 统计月同比增长率

在PowerBI中针对同比业务场景我们需要用到SAMEPERIODLASTYEAR函数,该函数作用是返回去年同期对应数据,通常用来与去年同期进行同比,其用法如下:

代码语言:javascript
复制
SAMEPERIODLASTYEAR(日期列)

复制

以上"日期列"参数需要传入日期的列。工资月同比增长率计算方式为:(本月工资-去年同期月份工资)/去年同期月份工资,可见统计月同比增长率除了要使用SAMEPERIODLASTYEAR函数外还需要用到CALCULATE和DIVIDE函数,按照以下步骤来统计工资月同比增长率:

  1. 在"度量值表"中创建新的度量值"当月工资"

创建该度量值的主要目的是方便后续的使用,也可以不创建。度量值DAX公式为:当月工资 = SUM('2021~2022年工资表'[工资])

  1. 在"度量值表"中创建新的度量值"去年同期月份工资"

度量值DAX公式为:去年同期月份工资 = CALCULATE('度量值表'[当月工资],SAMEPERIODLASTYEAR('2021~2022年工资表'[年月]))

  1. 在"度量值表"中创建新的度量值"工资同比增长率"

度量值DAX公式为:工资同比增长率 = DIVIDE('度量值表'[当月工资]-'度量值表'[去年同期月份工资],'度量值表'[去年同期月份工资])

  1. 在"报表"视图中创建可视化"矩阵"展示"工资同比增长率"数据

注意需要修改"2021~2022年工资表"中年月列的格式为非层次结构。在可视化表中我们可以看到对应的"去年同期月份工资"及"工资同比增长率"结果。

  • 统计月环比增长率

计算工资月环比增长率公式为:(本月工资-上月工资)/上月工资,如果想要根据本月工资获取到上月工资我们就需要用到DATEADD函数,DATEADD函数用法如下:

代码语言:javascript
复制
DATEADD(日期列,偏移量,偏移单位)

复制

以上"日期列"参数指的是包含日期的列;"偏移量"参数指定的是从日期列中需要添加或减去的时间间隔数;"偏移单位"参数指的是Day,Month,Quarter,Year按照哪个时间维度偏移。按照以下步骤来统计工资月环比增长率:

  1. 在"度量值表"中创建新的度量值"当月工资"

这个在计算同比时已经创建可以省略。

  1. 在"度量值表"中创建新的度量值"上月工资"

度量值DAX公式为:上月工资 = CALCULATE('度量值表'[当月工资],DATEADD('2021~2022年工资表'[年月],-1,MONTH))

  1. 在"度量值表"中创建新的度量值"工资环比增长率"

度量值DAX公式为:工资环比增长率 = DIVIDE('度量值表'[当月工资]-'度量值表'[上月工资],'度量值表'[上月工资])

  1. 在"报表"视图中创建可视化"矩阵"展示"工资环比增长率"数据

在可视化表中我们可以看到对应的"工资环比增长率"结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DAX使用场景及常用函数
    • 一、求和统计
      • 二、计数统计
        • 三、相除统计
          • 四、排序统计
            • 五、占比统计
              • 六、累计统计
                • 七、同比与环比统计
                相关产品与服务
                大数据处理套件 TBDS
                腾讯大数据处理套件(Tencent Big Data Suite,TBDS)依托腾讯多年海量数据处理经验,基于云原生技术和泛 Hadoop 生态开源技术对外提供的可靠、安全、易用的大数据处理平台。 TBDS可在公有云、私有云、非云化环境,根据不同数据处理需求组合合适的存算分析组件,包括 Hive、Spark、HBase、Flink、presto、Iceberg、Alluxio 等,以快速构建企业级数据湖、数据仓库。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档