定义

数据分析表达式(DAX)是一种函数和运算符库,它和Excel的公式非常类似,可以在 Excel 中的 Power BI Desktop、Azure Analysis Services、SQL Server Analysis Services 和 Power Pivot 中使用。

它是Microsoft的SQL Server Analysis Services团队开发的,存在于2009年发布了Excel 2010的PowerPivot。随着时间的推移,DAX在Excel社区中流行起来,它使用DAX在Excel中创建Power Pivot数据模型,以及在商业智能(BI)社区中使用DAX来构建带有SSAS的模型。

DAX示例如下:

DAX 计算公式用于度量值、计算列(新增加一列)、计算表(通过DAX新生成的表)和行筛选器(对数据进行筛选)。

为什么

你可以创建显示有价值见解的报告,而无需使用任何 DAX 公式。但是,如果您需要分析产品类别和不同日期范围的增长百分比,该怎么办?或者,你需要计算与市场趋势相比的同比增长?DAX 公式也提供了这种能力和许多其他重要能力。学习如何创建有效的 DAX 公式将有助于您充分利用数据。

入门案例

为了更好地理解此公式,我们可以像处理其他公式一样对其进行分解:

此公式包含以下语法元素:

A. 度量值名称 Store Sales

B. 等号运算符 ( = ) 表示公式的开头。

C. CALCULATE 函数会在根据指定筛选器所修改的上下文中,作为参数来计算表达式。

D. 括号 () 会括住包含一个或多个参数的表达式。

E. 同一表中作为表达式的 [Total Sales] 度量值。 Total Sales 度量值的公式为:=SUM(Sales[SalesAmount])。

F. 逗号 ( , ) 会分隔第一个表达式参数和筛选参数。

G. 完全限定的引用列为 Channel[ChannelName] 。 这是我们的行上下文。 此列中的每行各指定一个通道:Store、Online 等。

H. 将特定值 Store 作为筛选器。 这是我们的筛选上下文。

此公式可确保仅针对以“Store”值为筛选器的 Channel[ChannelName] 列中的行,计算 Total Sales 度量值所定义的销售额值。

详细介绍

DAX语言主要包含三部分:语法、函数和上下文。当然,DAX 还有其他重要的概念,下面将介绍几个比较重要的DAX的概念。

语法

DAX 公式始终以等号(=)开头。在等号后,可以提供常量或者表达式。表达式可以使用标量运算符的表达式(+,-, *、/、> =,..., & & ...),在表达式里面可以引用列或表,同时DAX也提供一些常见的函数帮助用户快速的计算分析数据。

例如:

使用表或列作为函数的输入时,通常必须限定列名。 列的完全限定名称是表名,后面是方括号中的列名:例如,"美国销售" [Products]。所有对象名称都不区分大小写。以下特殊字符以下字符在对象的名称中无效:

1.,;':/ * |?&% $! + = () [] {} < >

操作符

在DAX表达式中,常用的操作符是:

  1. 文本使用双引号作为界定符
  2. 等号是“=”号,不等号是:<>
  3. 赋值使用“=”号
  4. 布尔值使用 TRUE()和FALSE()函数
  5. 空值使用BLANK()函数表示
  6. 集合使用大括号{}表示,例如,包含三个元素的集合: {1,2,3}
  7. 字符的连接符号是:&
  8. 逻辑运算符号是:逻辑与是 &&,逻辑或是: ||

函数

DAX 包括一些函数,可用于使用日期和时间执行计算、创建条件值、处理字符串、基于关系执行查找以及循环访问表以执行递归计算。 如果熟悉 Excel 公式,其中的许多函数会显得非常相似。

函数的分类如下:

  1. 日期和时间函数(Date and time functions):这些函数可帮助你根据日期和时间创建计算。 DAX 中的许多函数与 Excel 日期和时间函数类似。 DAX 函数使用日期时间数据类型,并且可以采用列中的值作为参数。例如:将文本格式的日期转换为日期时间格式的日期,返回跨两个日期之间的间隔边界的计数。
  2. 时间关系函数(Time-intelligence functions):基于时间段(包括日、月、季度和年)对数据进行计算操作。例如常见的YTD,MTD,QTD,同时也会提供一些针对日期上下文的操作,当前日期的前一天,后一天,最后一天等
  3. 筛选器函数(Filter functions):筛选函数允许您操作数据上下文来创建动态计算。
  4. 信息函数( Information functions):输入的参数(单元格、数据行)是否与预期的类型匹配。例如 ISBLANK是否为空,ISERROR检查是否错误
  5. 逻辑函数(Logical functions):逻辑函数对表达式执行操作,以返回有关表达式中的值的信息。 例如,TRUE 函数使您可以了解您正在计算的表达式是否返回 TRUE 值。
  6. 统计函数(Statistical functions):提供了许多用于创建聚合(例如求和、计数和平均值)的函数,例如SUM,MIN,MAX等
  7. 文本函数(Text functions):提供了一系列针对字符窜处理的方法,例如字符窜截取,大小写转换,格式化等
  8. 数学和三角函数:提供一些的数学函数方法,例如:求绝对值,余弦,最大公约数等
  9. Parent 和 Child 函数:DAX 提供了五个函数,以帮助用户管理在其模型中显示为父子层次结构的数据

上下文

“上下文”这个术语经常迷惑我们非IT类的学习者。你可以把“上下文”理解成“环境”,在设定的环境下执行计算。DAX 中有两种上下文类型;行上下文和筛选上下文。

行上下文:行上下文可以理解为当前行内容。例如下图中要求每个产品的利润,可以创建一个计算列Profit利用下面公式获得。

Profit = 'Product'[Price] - 'Product'[Cost]

筛选器上下文:是指将原始数据按照一定规则进行筛选,然后将提取出来的结果再作为环境变量带入到函数中使用。通过设定筛选上下文,可以灵活的改变函数的运算范围,实现数据分类分析处理的目的。例如对上面表单的数据,可以将Total_Sales改写为下面形式来只计算Country是Australia的销售额。

计算Australia销售总额的Total_Sales计算列中调用了一个FILTER函数,目的是生成一个只包含Country是Australia相关数据的子表单。SalesInfo[Country] = "Australia"即是筛选上下文条件,将函数SUMX的计算范围从原始数据中的所有Country变成只针对Australia进行计算。

变量

您可以使用VAR在表达式中创建变量。 VAR 是一个关键字,用来将表达式的结果存储为命名变量。 然后,可以将该变量作为参数传递给其他度量值表达式。 例如:

在这个示例中, TotalQty 作为命名变量传递给其他表达式。 变量可以是任何标量数据类型(包括表)。

数据类型

DAX 查询

DAX可以在 SQL Server Management Studio (SSMS)和开源工具(如 DAX Studio (daxstudio.org))中创建和运行 DAX 查询。 不同于 DAX 计算公式(只能在表格数据模型中创建),也可以针对 Analysis Services 多维模型运行 DAX 查询。 与多维数据表达式(MDX)查询相比,DAX 查询通常更易于编写,而且效率更高。

DAX 查询是一个语句,类似于 T-sql 中的 SELECT 语句。 最基本类型的 DAX 查询是一个计算语句。 例如:

参考资料

https://docs.microsoft.com/zh-cn/dax/dax-syntax-reference#dax-operators-and-constants

https://www.jianshu.com/p/483dadc83880

https://blog.csdn.net/jessica_seiya/article/details/90904341

https://cloud.tencent.com/developer/article/1481633

dax 筛选 包含某个字_Power BI 利器——DAX相关推荐

  1. dax 筛选 包含某个字_筛选状态(ALL与REMOVEFILTERS)

    这一章比较绕,但是帮助我们理清切片器的筛选状态以及主要函数对于公式筛选上下文的改变. 1.切片器的筛选状态 切片器的全选与全不选的状态的区别,我们可以看下图: 全不选 全选 多个点击筛选 逐个点击至全 ...

  2. dax 筛选 包含某个字_DAX分享9:DAX中用变量来计算动态filter context中数值

    文章写起来真的也挺麻烦的.坚持坚持!加油加油! 本次分享的需求描述如下: 在Power BI中创建一个页面,页面显示一个Table和两个Slicer.其中Slicer的内容也列在Table里.Tabl ...

  3. 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能

    158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...

  4. dax powerbi 生成表函数_Power BI应用技巧:如何为DAX建的表添加索引?

    ​ 来源于知识星球中一个星友的问题,使用DAX在PowerBI中新建了一个表,如何为这个表添加索引列呢? 假如数据模型中只有一张订单表,需要从订单表中提取客户表,可以直接使用VALUES函数提取一个不 ...

  5. 中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别

    许多刚开始使用DAX的小伙伴在使用LASTDATE搜索某个时间段内的最后日期.或者他们使用NEXTDAY检索给定日期之后的日期.尽管这些函数可以实现它们所承诺的功能,但它们并不打算在简单的表达式中使用 ...

  6. dax powerbi 生成表函数_Power BI表连接的几个DAX函数,一次全掌握!

    原标题:Power BI表连接的几个DAX函数,一次全掌握! ​ 编写DAX代码进行业务分析时,经常会用到表与表之间的连接计算,比如在之前的产品关联分析一文中(如何用Power BI分析产品关联度?) ...

  7. 155_模型_Power BI Power Pivot 进销存之安全库存

    155_模型_Power BI & Power Pivot 进销存之安全库存 一.背景 谈进销存的概念时,我们也需要提及另外一个概念:安全库存. 库存周转在理想的状态下是做到零库存,但是在内部 ...

  8. Power BI 之 DAX语法规范详解1

    文章预览: Power BI 之 DAX语法规范详解 1 前言 表构造函数{()} Lookupvalue函数 Related函数: Relatedtable函数 筛选引擎Calculate 单条件筛 ...

  9. # 160_技巧_Power BI 新函数-计算工作日天数

    160_技巧_Power BI 新函数-计算工作日天数 一.背景 Power BI 2022 年 7 月 14 日更新了最新版本的,版本号为:2.107.683.0 . 更多更新内容可以查看官方博客: ...

最新文章

  1. 用数学范畴定义生命的尝试
  2. MySQL 数据库 分页查询/聚合查询
  3. 四种参数传递的形式——URL,超链接,js,form表单
  4. python之shutil模块
  5. c语言递归函数变量作用域,C语言课程变量的作用域和生存周期、递归.ppt
  6. JSON 和 JavaScript 对象互转
  7. java面试题11 牛客:如下语句通过算术运算和逻辑运算之后i和 j的结果是
  8. 多个数据文件 mysql_mysql多实例(多个配置文件方式)
  9. (转)淘淘商城系列——导入商品数据到索引库——Service层
  10. Django-ModelFrom中修改save后的字段值
  11. 用位运算实现内存对齐
  12. 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路
  13. uniapp App权限开启
  14. Java之spring新手教程(包教包会)
  15. web前端 基于html实现花店购物网站源码(HTML+CSS+JavaScript) 企业网站制作
  16. 微信小程序之组件的四种传值方式
  17. 教学教法改革效果评估的4种方法
  18. nbu备份本机oracle,使用NetBackup进行oracle备份和恢复
  19. 锐捷服务器无系统如何进pe,没有u盘怎么进入pe系统,网络启动进PE做系统教程...
  20. 美团外卖API接入(一)

热门文章

  1. Python编写的桌面图形界面程序实现更新检测和下载安装
  2. (实战项目一)手机App抓包爬虫
  3. 网络通信tcp与udp的区别
  4. 在VS2012中实现ExtJS的智能提示
  5. ASP.NET页面传值的各种方法和分析
  6. 【opencv学习】给图像加图形注释
  7. 深度学习《Photo Editing》
  8. python表达式352的值为_表达式 3 and 5 的值为
  9. python训练模型太大怎么处理_趣味Python之如何降低过拟合风险
  10. python 封装函数_python:函数数据封装