powerbi之常用DAX函数使用介绍——提供数据源练习

server/2024/12/22 10:56:59/

前述:

本次使用数据是包含产品表、客户表、区域表、销售订单表的一份销售订单数据,数据源链接如下:

链接:https://pan.baidu.com/s/1micl_09hFrgz2aUBERkeZg 
提取码:y17e

一、CALCULATE

1.语法结构

语法结构CALCULATE(表达式,过滤条件1,过滤条件2……)
参数设置第一个参数必须有,一般为聚合函数表达式;过滤条件参数可有多个或不设置
返回值返回

2.用法介绍

(1)不设置筛选条件

订单数量 = CALCULATE(SUM('销售订单'[订单数量]))

没有设置筛选条件,和只用聚合函数计算效果一样 

(2)设置筛选条件

例如我们要计算产品编号为1的订单数量:

产品1订单数量 = CALCULATE(SUM('销售订单'[订单数量]),'产品'[产品编号]=1)

 由于我们设置了筛选条件是产品编号1,所以只计算了产品1的订单数量

二、FILTER

1.语法结构

语法结构FILTER(、筛选条件)
返回值经过筛选的

2.用法介绍

FILTER 不可单独使用,而是用于需要表作为参数的其他函数中:

(1)搭配CALCULATE

例如我们想要计算大于平均销售单价产品的订单数量:

大于平均单价订单数量 = CALCULATE(SUM('销售订单'[订单数量]),FILTER('销售订单','销售订单'[销售单价]>AVERAGE('销售订单'[销售单价])))

(2)搭配聚合函数、迭代函数

例如想要根据销售单价与订单数量计算客户编号为1的产品销售收入:

客户1的销售收入 = SUMX(FILTER('销售订单',[客户编号]=1),[订单数量]*[销售单价])

三、ALL

1.语法结构

语法结构ALL(要删除筛选器的表或列)
返回值返回已删除筛选器的

2.用法介绍

(1)复制表

点击新建表——输入:

表名 = ALL(要复制的表)

(2)返回某一列为不重复表

点击新建表——输入:

表名 = ALL('表'[列])

(3)清除外部上下文筛选(重要)

新建以下两个度量值来观察对比:

订单数量 = SUM('销售订单'[订单数量])

总订单数量 = CALCULATE(SUM('销售订单'[订单数量]),ALL('产品'))

我们可以看到使用 ALL('产品')后度量值不会受到外部上下文的影响,每一行都会显示总订单数量,而不是像第一个度量值一样根据产品编号筛选,所以我们可以将其应用于类似于占比问题的计算中。

四、VALUES

1.语法结构

语法结构VALUES('表'[列])
返回值返回该列不重复表

也就是说当某个函数需要的参数是表,但我们能提供的是列,则可以使用values函数进行转换 

2.用法介绍

(1)返回某列不重复表(以事实表构建维度表)

例如当前模型中没有仓库编码这一单独的维度表,可以从销售订单表中提取出这个维度表:

新建表——输入:

仓库 = VALUES('销售订单'[仓库编码])

这个功能与前面的all函数第二个用法返回某一列为不重复表功能相同 

(2)保持外部上下文筛选

这个功能与all函数清除外部上下文筛选功能相反,以all函数用法介绍(3)中构建的数据为例:

总订单数量 = CALCULATE(SUM('销售订单'[订单数量]),ALL('产品'))

接下来使用values恢复产品编号的筛选:

恢复筛选订单数量 = CALCULATE(SUM('销售订单'[订单数量]),ALL('产品'),VALUES('产品'[产品编号]))

(3)查找文本型数据

例如我们需要查找城区名称为Thames的邮编: 

Thames邮编 = CALCULATE(VALUES('区域'[邮编]),'区域'[城区]="Thames")

有些朋友可能会疑惑values返回的是表,为什么在这里可以正常显示为一个值?

这是因为dax有一个重要特征:如果一个表只有一行一列,那么它也可以作为值来使用,但是如果没有被筛选为一行,是会报错的。

例如我们需要查找订单日期为2017年1月5日的产品编号: 

产品编号查找 = CALCULATE(VALUES('销售订单'[产品编号]),'销售订单'[订单日期]=DATE(2017,1,5))

五、HASONEVALUE

1.语法结构

语法结构HASONEVALUE('表'[列])
返回值True/False,判断该列是否被过滤为仅有一个值,如果是一个值返回True,多个或无返回False

2.用法介绍

一般作为IF函数第一个参数使用,来判断筛选后是否为一个值

补充:IF函数

IF(<logical_test>, <value_if_true>[, <value_if_false>])

术语定义
logical_test计算结果可以是 TRUE 或 FALSE 的任何值或表达式。
value_if_true逻辑测试为 TRUE 时返回的值。
value_if_false(可选)逻辑测试为 FALSE 时返回的值。 如果省略,则返回 BLANK。

在values用法(3)中我们最后提到如果结果没有被筛选为一行,是会报错的,报错度量值如下所示:

产品编号查找 = CALCULATE(VALUES('销售订单'[产品编号]),'销售订单'[订单日期]=DATE(2017,1,5))

为了防止错误情况出现,我们可以借助于IF与HASONEVALUE进行错误拦截:

hasonevalue产品编号查找 = IF(HASONEVALUE('产品'[产品编号]),CALCULATE(VALUES('产品'[产品编号]),'销售订单'[订单日期]=DATE(2017,1,5)),"无")

红色部分来判断产品编号列是否被过滤为一个值,是的话返回橙色部分结果,不是的话返回蓝色结果


http://www.ppmy.cn/server/129210.html

相关文章

Python爬虫之正则表达式于xpath的使用教学及案例

正则表达式 常用的匹配模式 \d # 匹配任意一个数字 \D # 匹配任意一个非数字 \w # 匹配任意一个单词字符&#xff08;数字、字母、下划线&#xff09; \W # 匹配任意一个非单词字符 . # 匹配任意一个字符&#xff08;除了换行符&#xff09; [a-z] # 匹配任意一个小写字母 […

HarmonyOS应用六之应用程序进阶二

目录&#xff1a; 一、进度条通知二、闹钟提醒2.1、在module.json5配置文件中开启权限2.2、导入后台代理提醒reminderAgentManager模块&#xff0c;将此模块命名为reminderAgentManager2.3、如果是新增提醒&#xff0c;实现步骤如下&#xff1a; 3、Native C交互4、第三方库的基…

低代码平台的缩写和使用方法是什么?蓝燕云低代码平台开发经验!

随着企业数字化转型的加速&#xff0c;低代码平台越来越受到欢迎。低代码平台可以极大地简化开发过程&#xff0c;使得非专业开发者也能够快速创建应用程序。然而&#xff0c;对于低代码平台&#xff0c;很多人还存在一些疑惑&#xff0c;尤其是在其缩写和具体使用方法方面。本…

单片机(学习)2024.10.8

ok家人们&#xff0c;国庆回来继续开始新的单片机的学习&#xff0c;这次学习的单片机芯片为STM32U575RIT6 计算机基础 IO逻辑 计算机系统中的高低电平逻辑1和0&#xff0c;数据在计算机中的存储、传输、运算都是以二进制形式进行的。数据的传输通过总线真正传递的是电信号&a…

力扣10.8

174. 地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数…

在ES6中,数组新增扩展及其用法汇总

在ES6中&#xff0c;数组新增了多项扩展&#xff0c;极大提高了操作数组的便捷性。以下是一些常用的扩展及其用法&#xff1a; 1. Array.from() 用于从类数组对象或迭代器创建一个新的数组实例。这个方法可以接受两个参数&#xff1a; source (来源)&#xff1a;这是必须的参…

第五章:软件工程(5.5部署交付--5.7软件过程能力成熟度)

5.5 部署交付 5.5.1 软件部署 软件部署过程的主要特征有:过程覆盖度、过程可变更性、过程间协调和模型抽象。 已经提出一些抽象的软件部署模型&#xff0c;用于有效地指导部署过程&#xff0c;包括应用模型、组织模型、站点模型、产品模型、策略模型和部署模型。 软件部署模…

【JavaScript】JS核心语法及函数

文章目录 一、初识 JS二、JS 核心语法2-1 变量2-2 数据类型typeofString 对象 2-3 数组创建数组常用属性方法 2-4 运算符号加号运算符 减号运算符 -比较运算符逻辑运算符 2-5 控制语句for-inbreakcontinue 三、函数3-1 常用系统函数3-2 自定义函数函数声明函数调用 3-3 创建对象…