数据分析表达式(DAX)入门可能令人生畏,但是,当你了解一些基本功能后,你就可以帮助你解答许多有关数据的新见解。虽然在Power BI或Pivot Charts中创建视觉效果很容易,但我们经常希望查看特定时间范围的数据,或者应用或删除特定过滤器的数据,而这些数据是我们无法使用原始数据完成的。

如果你遇到过这个问题,那么掌握DAX的一些基本知识可以让你在模型中创建数据视图更便捷。作为Power BI和DAX的相对新手,我建议先学会这5个基本的DAX函数。

报告视图
 

关系视图

1.  FILTER

  FILTER函数用于返回表或表达式的子集,如下所示。

FILTER(<table>,<filter>)

假设你想获得大于100美元的商品。我们可以使用COUNTROWS函数来计算指定表中的行数,以及FILTER函数来完成此过滤:

统计订单销售大于100 = COUNTROWS(FILTER('Sales', 'Sales' [Sales] > 100))

第一个参数'Sales'标识一个表或一个表格。第二个参数'Sales'[Sales]> 100,表示为表的每一行计算的布尔值或true / false表达式。在此表达式中,我们将Sales表传递给FILTER函数,并要求它返回任何大于100美元的商品。FILTER函数从不用作独立函数,但与其他函数一起使用。在上面的示例中,我们使用FILTER函数返回子集,然后计算结果。

2.  ALL

ALL函数用于返回表中的所有行或列中的值,忽略可能已应用的任何过滤器。

ALL(<table>或<column>)

在上面的报告视图中,我们的报告包含多个卡片和一个不包含德国销售额的页面级过滤器。我们希望保留此过滤器,但添加一个可视化的卡片,显示已售出的商品总数,忽略放置在报告其余部分的任何过滤器。以下包含ALL函数的表达式可以帮助你实现此目的:

统计订单数 = COUNTROWS(ALL('Sales'))

在这个例子中,我们将'Sales'表传递给ALL函数,要求它清除可能放在它上面的任何过滤器。与FILTER函数一样,ALL函数不是独立使用,而是与其他函数一起使用。在这种情况下,我们将ALL函数与COUNTROWS函数结合使用,以获取所有销售记录的计数。ALL函数接受表或列,并清除可能已放置在它们上的任何过滤器。

3.  RELATED

RELATED函数从另一个表返回一个相关值(如下所示)。

RELATED(<column>)

到目前为止,我们已经使用了可以帮助你返回子集或清除表或列上的任何过滤器的函数。我们现在想要仅针对美国过滤我们的销售,但是在一个表中没有我们需要的所有数据来完成此操作。幸运的是,我们有RELATED函数,我们可以通过已建立的关系将值从一个表检索到另一个表。鉴于Sales表和SalesGeography表之间存在多对一关系,我们可以使用包含RELATED函数的以下表达式来返回仅美国的销售订单计数:

统计美国的订单 = COUNTROWS(FILTER(ALL('Sales'), RELATED('SalesGeography'[Countries]) = "美国"))

4.  TOTALYTDTOTALQTDTOTALMTD

DAX中的时间智能功能使你能够使用时间段(包括天,月,季度和年)来操纵数据,然后构建和比较这些时段的计算。

TOTALYTD(<expression>,<dates>[,<filter>][,<year_end_date>])

继续上面的例子,假设你希望看到今年迄今为止的总销售额。以下包含TOTALYTD函数的表达式可以让你轻松执行此操作:

今年的销售订单 = TOTALYTD(SUM('Sales'[Sales]), 'Dates'[Dates])

第一个参数'Sales'[Sales]标识要聚合的列。这也可以是返回标量或奇异值的表达式。第二个参数“日期”[日期]是包含日期的列。时间智能功能是非常有用的功能,消除了在常用时间段内计算聚合的复杂代码的需要。

5.  CALCULATE

CALCULATE函数计算由特定过滤器修改的上下文中的表达式。

CALCULATE(<expression>,<filter1>,<filter2> ...)

假设你现在有兴趣列出所有区域的所有销售情况。虽然你可以创建一些零碎的表达式来实现这一点,但你可以使用CALCULATE函数轻松而干净地完成相同的操作。以下示例使用CALCULATE函数,可以完成此任务:

所有国家除以地区的销售总额 = CALCULATE(SUM('Sales'[Sales]),ALL('SalesGeography'))

第一个参数SUM('Sales'[Sales])标识要聚合的列。第二个参数ALL('SalesGeography'),用于删除可能已放置在SalesGeography表上的所有过滤器。请注意,这会忽略排除德国销售的页面级过滤器。CALCULATE函数是DAX中功能最强大,最有用的函数之一。将CALCULATE函数视为增压“IF”语句是有帮助的。一些规则适用于CALCULATE函数:过滤器参数不能引用度量,并且表达式不能使用任何扫描或返回表的函数。CALCULATE函数通常与聚合函数一起使用,尽管过滤器参数是可选的,但通常至少使用一个。

在DAX中创建一些非常复杂的查询经常出现的,但只是精通几个函数可以帮助你了解许多有趣的数据洞察。我建议查看Microsoft的DAX参考以获取更多信息。


1.Power BI免费下载:http://www.yeacer.com/

Microsoft Power BI Desktop中文最新版:下载地址

2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。

Power Data技术交流群:702966126 (验证注明:博客园Power BI)

更多精彩内容请关注微信公众号:悦策PowerBI


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/  

5个适用于初学者的有用数据分析表达式(DAX)函数的更多相关文章

  1. Lambda表达式和函数试接口的最佳实践 · LiangYongrui's Studio

    1.概述 本文主要深入研究java 8中的函数式接口和Lambda表达式,并介绍最佳实践. 2.使用标准的函数式接口 包java.util.function中的函数是接口已经可以满足大部分的java开 ...

  2. 数据可视化之powerBI入门(十一)认识Power BI数据分析语言DAX

    DAX是英文Data Analysis Expression的缩写,意思是数据分析表达式,从名称上就可以看出,DAX公式是用作数据分析的,事实上也确实如此,从数据分析层面认识DAX会更有助于我们理解它 ...

  3. 【C++】C++中的lambda表达式和函数对象

    目录结构: contents structure [-] lambda表达式 lambda c++14新特性 lambda捕捉表达式 泛型lambda表达式 函数对象 函数适配器 绑定器(binder ...

  4. js函数表达式和函数声明的区别

    我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...

  5. js基础:函数表达式和函数声明

    函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ...

  6. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  7. 8个很有用的PHP安全函数,你知道几个?

    原文:Useful functions to provide secure PHP application 译文:有用的PHP安全函数 译者:dwqs 安 全是编程非常重要的一个方面.在任何一种编程语 ...

  8. javascript函数定义表达式和函数声明的区别

    在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...

  9. [转]javascript函数定义表达式和函数声明的区别

    在javascript中,函数有两种定义写法,函数定义表达式和函数声明,其例子分别如下所示: var test = function(x){ return x; } function test(x){ ...

随机推荐

  1. Oracle控制文件

    一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...

  2. Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)

    原文地址:Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的? 原始讨论组:用Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的 ...

  3. [luogu P2319] [HNOI2006]超级英雄

    [luogu P2319] [HNOI2006]超级英雄 题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金. ...

  4. 十一、持久层框架(MyBatis)

    一.基于注解方式的CRUD 把xml方式的CRUD修改为注解方式 之前在xml中配置,是在<mapper></mapper>标签下写CRUD <mapper namesp ...

  5. 建一个maven项目

     建一个普通的maven项目(eclipse) 需要的jar和文件: eclipse :jdk1.8.0_144 maven:apache-maven-3.5.3     进入(下载):http:// ...

  6. 洛谷U36590搬书

    题目背景 陈老师喜欢网购书籍,经常一次购它个百八十本,然后拿来倒卖,牟取暴利.前些天,高一的新同学来了,他便像往常一样,兜售他的书,经过一番口舌,同学们决定买他的书,但是陈老师桌上的书有三堆,每一堆都 ...

  7. pycham相关+Python基础

    pycham 1.设置pycham和线上服务器同步代码 a.Tools--->Deployment--->Configuration   b.设置连接的服务器IP c.设置连接的用户名+密 ...

  8. [LeetCode] 43. Multiply Strings ☆☆☆(字符串相乘)

    转载:43. Multiply Strings 题目描述 就是两个数相乘,输出结果,只不过数字很大很大,都是用 String 存储的.也就是传说中的大数相乘. 解法一 我们就模仿我们在纸上做乘法的过程 ...

  9. https 不会被中间人攻击——因为中间人即使拿到了数据,也是加密的

    只要你登陆了一个使用 HTTPS 数据加密的网站,浏览的页面的内容如果被人中途看见,将会是一团乱码.它也能保证,你浏览的页面就是你想浏览的,不会被黑客在中途修改,网站收到的数据包也是你最初发的那个,不 ...

  10. Qt Widgets——主窗口及其主要组成部分

    Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...