当前位置: 首页 > news >正文

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

前述:

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

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

一、CALCULATE

1.语法结构

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

2.用法介绍

(1)不设置筛选条件

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

1220e62092a249eb93a24a85e9219ca1.png

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

(2)设置筛选条件

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

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

e541c2016fa346b380b523f7c4e41330.png

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

二、FILTER

1.语法结构

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

2.用法介绍

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

(1)搭配CALCULATE

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

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

6ba33757fb3d402d98689339e7a65ffe.png

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

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

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

4a2def84765a4942b030f01831af118a.png

三、ALL

1.语法结构

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

2.用法介绍

(1)复制表

点击新建表——输入:

表名 = ALL(要复制的表)

a6318a10a19441e4b8ea08c47d86a49f.png

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

点击新建表——输入:

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

7336d6d1b18f46b6b9ecfbd81841444d.png

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

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

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

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

ef8a1879e0ec4b9a9a26720e2caa8294.png

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

四、VALUES

1.语法结构

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

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

2.用法介绍

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

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

新建表——输入:

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

6e31802d25784658ad2c6026b6a4e290.png

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

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

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

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

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

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

610925ab2f7c49d3a3a3d94580c97f85.png

(3)查找文本型数据

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

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

23b2d5166a9d4f6f9a72a9c4712933ad.png

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

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

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

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

b33fc8f2130d4d188e42f79a702d2555.png

五、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)),"无")

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

bae2a290131f4718a70b94600941385c.png

 

相关文章:

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

前述&#xff1a; 本次使用数据是包含产品表、客户表、区域表、销售订单表的一份销售订单数据&#xff0c;数据源链接如下&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1micl_09hFrgz2aUBERkeZg 提取码&#xff1a;y17e 一、CALCULATE 1.语法结构 语法结构CALCUL…...

SQL-触发器(trigger)的详解以及代码演示

一、触发器的概念 触发器是一种特殊的存储过程&#xff0c;但是触发器不存在输入和输出参数&#xff0c;所以不能被显式的去调用&#xff0c;而是与特定的表相关联&#xff0c;当表中的数据发生变化时&#xff0c;触发器被激活并执行其定义的SQL代码。触发器可以是行级触发器&…...

【devops】x-ui 实现一键安装 x-ray 打造高速国际冲浪 | xray管理平台

一、部署X-UI篇 1、Github 地址&说明 github地址如下&#xff1a; https://github.com/FranzKafkaYu/x-ui?tabreadme-ov-file 2、一键部署 2.1、更新并安装curl #Ubuntu、Deibian系统 apt update && apt upgrade -y apt install curl -y #CentOS7 系统 yum…...

Linux系统编程——进程标识、进程创建

一、进程标识&#xff08;pid&#xff09; 每个进程都有一个非负整数形式的唯一编号&#xff0c;即 PID。PID 在任何时刻都是唯一的&#xff0c;但是可以重用&#xff0c;当进程终止并被回收以后&#xff0c;其 PID 就可以为其它进程所用。进程的 PID 由系统内核根据延迟重用算…...

【超级福利】openMind开源实习来袭,奖励高达万元,解锁你的AI实践新篇章!

亲爱的小伙伴们&#xff0c;是不是梦想着能在真实的项目中大展拳脚&#xff0c;却又苦于找不到合适的舞台&#xff1f;别担心&#xff0c;OpenI启智社区携手openMind Library工具链&#xff0c;为你量身打造了一场开源实习盛宴&#xff0c;保证让你的学习不再无聊&#xff0c;技…...

React JSX 使用条件语句渲染UI的两种写法

只针对函数组件 1. 第一种写法&#xff1a; function App({ id }) {return id1? <h1>hello</h1> : <h1>world</h1>; } 或者&#xff1a; function App({ id }) {return (<h1>{id1 && "hello" || id2 && "wo…...

谷歌-BERT-第四步:模型部署

1 需求 需求1&#xff1a;基于gradio实现大模型的WEB UI交互界面 2 接口 3 示例 import gradio as gr from transformers import *classifier pipeline("text-classification", model"./model", tokenizer"./model")gr.Interface.from_pipel…...

猫咪化身蒲公英,浮毛满屋乱飞,有哪些宠物空气净化器值得购买?

不掉毛的猫咪究竟是谁在养&#xff1f; 当初去朋友家玩&#xff0c;被猫咪捕获芳心&#xff0c;没多久自己也领养了一只。没想到啊&#xff0c;这就意味着要和猫毛纠缠一辈子了。平时白天上班不在家&#xff0c;它就在一边跑动一边掉毛&#xff0c;回到家我都能推断它的行动路…...

端到端的开源OCR模型:GOT-OCR-2.0,支持场景文本、文档、乐谱、图表、数学公式等内容识别!

今天给大家分享一个端到端的开源 OCR 模型&#xff0c;号称 OCR 2.0&#xff01; 支持场景文本、文档、乐谱、图表、数学公式等内容识别&#xff0c;拿到了 BLEU 0.972 高分。 从给出的演示图来看&#xff0c;一些非常复杂的数学公式都能正确的识别&#xff0c;颇为强大。模型…...

自注意力机制self-attention中QKV矩阵的含义

自注意力机制&#xff08;Self-Attention&#xff09;是Transformer模型的核心组件&#xff0c;其中Q、K、V矩阵分别代表查询&#xff08;Query&#xff09;、键&#xff08;Key&#xff09;、值&#xff08;Value&#xff09;。它们的作用和含义可以通过信息匹配过程来理解。在…...

【前端】Bootstrap:栅格系统 (Grid System)

Bootstrap的栅格系统是该框架的核心部分之一&#xff0c;能够让开发者轻松创建响应式网页布局&#xff0c;适配各种屏幕尺寸和设备。栅格系统通过将页面划分为12列的布局结构&#xff0c;开发者可以根据内容的重要性和设计需求灵活控制元素的宽度和排列。 在这篇文章中&#x…...

一文读懂,SSL证书怎么验签安装使用?

SSL证书目前已经有越来越多的企业网站开始使用&#xff0c;安装SSL证书后&#xff0c;原有的http协议将会变成安全性更好的https加密协议&#xff0c;这对保护用户的信息安全&#xff0c;保障企业及用户的利益起着重要作用。 一张SSL证书的获取&#xff0c;需要经历不少环节&a…...

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…...

SQL注入原理、类型、危害与防御

SQL注入的原理概念 SQL注入是一种常见的网络攻击技术&#xff0c;攻击者通过在Web应用程序的输入字段中注入恶意构造的SQL代码&#xff0c;以欺骗后端数据库执行非预期的SQL命令。这种攻击可以导致数据泄露、权限提升、数据篡改甚至系统瘫痪。SQL注入可以分为多种类型&#xf…...

第2讲 数据库系统的结构抽象与演变

基本内容 数据库系统的标准结构?数据模型?数据库系统的演变与发展?重难点 一组概念的区分:三级模式两层映像,物理独立性和逻辑独立性一组概念的区分:数据→模式→数据模型几种数据模型的差异:网状/层次模型→关系模型→数据模型数据库系统的标准结构 (1)数据库系统的分…...

Git创建开发分支命名规则

git checkout -b feature/branchname 和 git checkout -b branchname 这两条命令的主要区别在于新分支的命名。 主要区别 分支命名&#xff1a; git checkout -b feature/branchname&#xff1a;新分支的名字是 feature/branchname&#xff0c;表示该分支属于一个特性开发&…...

【纯前端excel导出】vue2纯前端导出excel,使用xlsx插件,修改样式、合并单元格

一、使用第三方插件 1、安装 npm install xlsx-js-style 2、引入 import xlsx from xlsx-js-style xlsx插件是基础的导出&#xff0c;不可以修改样式&#xff0c;直接xlsx-style插件式修改样式的&#xff0c;所以这里直接用二者合体插件即可 二、页面使用 1、数据源 [{"…...

如何在极速浏览器中实现谷歌浏览器的扩展功能

在当今数字化时代&#xff0c;浏览器扩展功能极大地增强了我们的在线体验。尤其是谷歌浏览器&#xff0c;以其丰富的扩展生态而闻名。但是&#xff0c;如果你想在极速浏览器中使用这些谷歌浏览器的扩展功能&#xff0c;该怎么办呢&#xff1f;本文将为你详细解析如何实现这一目…...

Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)

文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token&#xff08;首选&#xff09;2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…...

C++游戏开发完整学习路径

C游戏开发完整学习路径 引言 随着游戏行业的迅速发展&#xff0c;C作为主要的游戏开发语言&#xff0c;因其高效性和灵活性&#xff0c;依然受到广泛欢迎。C不仅在大型游戏开发中被广泛使用&#xff0c;而且在游戏引擎的构建、性能优化和复杂算法的实现中也扮演着关键角色。本…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...