https://zhuanlan.zhihu.com/p/64383000

介绍过CALCULATE函数之后,有必要再介绍它的最佳搭档:FILTER函数。

CALCULATE函数的第二个及之后的参数是筛选条件,而FILTER函数正是为筛选而生。


FILTER语法

FILTER(<table>,<filter>)

  • 第一个参数<table>是要筛选的表
  • 第二个参数<filter>是筛选条件
  • 返回的是一张表,不能单独使用,需要与其他函数结合使用

FILTER应用

前一篇文章中介绍CALCULATE的时候,没有使用FILTER函数也实现了筛选,你可能会问,既然不用FILTER函数也可以,为什么还要使用FILTER呢?

那是因为前文中的筛选条件都是最简单的筛选,没有必要使用强大的FILTER,其实用FILTER也是可以实现的,比如这个度量值[产品数量2],

= CALCULATE([产品数量],'产品明细'[品牌]="苹果")

等同于:

= CALCULATE([产品数量],
FILTER(ALL('产品明细'[品牌]),
'产品明细'[品牌]="苹果"))

这两种方式返回的结果完全一致。

在这个简单的例子里看起来好像用FILTER写起来更复杂,不用FILTER的情况下显得更简洁,但是如果我们要做更复杂的运算,通过简单的布尔表达式根本无法实现,必须借助FILTER。

依然用介绍度量值的那篇文章中的案例数据(可点击阅读原文查看),有这6张表,

现在想找出年销售额超过2000万的城市销售金额,这个利用简单的表达式已无法解决,来看FILTER如何实现。

第一个度量值还是之间建好的,

销售总额 = sum('销售明细'[销售额])

再建一个度量值[大于2000万的城市销售金额],

= CALCULATE([销售总额],
FILTER(ALL('门店城市'),
[销售总额]>20000000))

这个度量值先利用FILTER函数,筛选出销售大于2000万的城市有哪几个,然后再汇总这些城市的销售额,返回结果如下,

超过2000万销售额的城市的销售额总计等于451026000,但发现上面明细的两个数字之和并不等于总计,这正是PowerBI中数据模型的特点,在这个表格中,每个数据都是独立运算的,和其他数字没有关系。

上面两个数字代表的是,在销售额超过2000万的城市中,单个产品的销售额也大于2000万的只有苹果电脑和苹果手机。

为什么会有产品的销售额也大于2000万这个筛选条件呢,不要忘了还有外部的筛选上下文,在这个表中即是行标签,这两个数字正是内部上下文和外部上下文相结合,筛选计算的结果。

这就是FILTER的一个简单应用,这里要特别记住这个函数嵌套组合,

CALCULATE(…,FILTER(ALL(…),…))

做各种分析时会经常用到这个组合。

关于上面例子中合计金额不等于上面数据之和,虽然在PowerBI中很正常,但按通常理解的习惯,容易引起误导,这也有解决的办法,下篇文章介绍两个新函数来解决它。

数据可视化之powerBI入门(十三)CALCULATE函数的最佳搭档:FILTER的更多相关文章

  1. 数据可视化之powerBI入门(十二)PowerBI中最重要的函数:CALCULATE

    https://zhuanlan.zhihu.com/p/64382849 介绍DAX的时候,特别强调过一个重要的函数:CALCULATE,本文就来揭秘这个函数的计算原理以及它是如何影响上下文的. C ...

  2. 数据可视化之powerBI入门(四)Power BI与PowerQuery、PowerPivot有什么关系

    https://zhuanlan.zhihu.com/p/64146209 Power BI与PowerQuery.PowerPivot有什么关系? 刚开始学习PowerBI的时候,总是能碰到Powe ...

  3. 数据可视化之powerBI入门 (一)认识PowerBI

    来自  https://zhuanlan.zhihu.com/p/64144024 Power BI是什么? Power BI是微软推出的数据分析和可视化工具,我们先来看看微软官方是怎么介绍的: Po ...

  4. 数据可视化之powerBI入门(八)PowerQuery学习:认识M函数

    https://zhuanlan.zhihu.com/p/64148928 前面我们学习PQ的时候都是用鼠标操作,虽然通过这些操作能完成大部分的数据处理,但是毕竟还有些复杂的工作是处理不了的,如果想彻 ...

  5. 数据可视化之powerBI入门(七)数据清洗中最常使用的十三招

    https://mp.weixin.qq.com/s?__biz=MzA4MzQwMjY4MA==&mid=2484067158&idx=1&sn=4ad955112df2f4 ...

  6. 数据可视化之powerBI入门(五)PowerQuery,支持从多种源导入数据

    PowerBI的强大绝不仅是最后生成炫酷的可视化报告,她在第一步数据获取上就显示出了强大的威力,利用Power Query 的强大数据处理功能,几乎可以从任何来源.任何结构.任何形式上获取数据 htt ...

  7. 数据可视化之powerBI入门(三)财务人员必学,使用Powerquery是一种什么体验?

    https://zhuanlan.zhihu.com/p/54700574 财务人员必学,使用Powerquery是一种什么体验? 你和Excel高手的距离只差了一个Power Query!!! 先思 ...

  8. 数据可视化之powerBI入门(十)认识Power BI的核心概念:度量值

    https://zhuanlan.zhihu.com/p/64150720 本文学习PowerBI最重要的概念:度量值 初学Power BI一般都会对度量值比较困惑,毕竟对长期接触Excel的人来说, ...

  9. 数据可视化之powerBI入门(九)PowerBI数据建模:其实一点都不高深

    https://zhuanlan.zhihu.com/p/64149834 数据建模并没有那么高深,你同样可以学会!这篇文章通过一个实例创建一个简单的数据建模,并引出两个重要的概念:度量值和DAX. ...

随机推荐

  1. 【loj - 3055】「HNOI2019」JOJO

    目录 description solution accepted code details description JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或 ...

  2. KVM的web

    如果报错!就如下操作 [root@kvm images]# chmod +x /etc/rc.local [root@kvm images]# chmod +x /etc/rc.d/rc.local ...

  3. 初见NVelocity模板引擎

    //using NVelocity.App; //using NVelocity; //using NVelocity.Runtime; VelocityEngine vltEngine = new ...

  4. 微信小程序入门基础

    微信小程序入门基础  视频教程(https://edu.csdn.net/course/detail/8456?pre_view=1) 第一章.认识小程序  1.工具的下载与安装  2.小程序代码构成 ...

  5. 【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?

    科普: 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 引用传递(pass by reference)是指在 ...

  6. 入门大数据---SparkSQL联结操作

    一. 数据准备 本文主要介绍 Spark SQL 的多表连接,需要预先准备测试数据.分别创建员工和部门的 Datafame,并注册为临时视图,代码如下: val spark = SparkSessio ...

  7. vue-elemnt-admin源码学习

    vue-elemnt-admin源码学习 vue-element-admin是一个基于vue,element-ui的集成的管理后台.它的安装部分就不说了,按照官网的步骤一步步就可以执行了. https ...

  8. Java中Map的4种遍历方式

    第一种方式:这是平常用的最多也最可取的一种遍历方式. for (Map.Entry<String, Object> entry : map.entrySet()) { System.out ...

  9. Java 从入门到进阶之路(二十七)

    在之前的文章我们介绍了一下 Java 中的  集合框架中的Collection,本章我们来看一下 Java 集合框架中的 Map. Map 接口定义的集合又称查找表,用于存储所谓“Key-Value” ...

  10. 分布式配置中心(Native - Config)

    本章只讲 Spring Cloud 本地配置方式,可以很方便的高可用集群,且存在良好通讯,不用担心云服务器与内网之间GIT带来的不便,GIT(网上GIT教程一搜一大把了….) - 快速开始 Sprin ...