回忆是一座桥
却是通往寂寞的牢

09、初识筛选上下文

  DAX的计值环境是由数据模型、筛选上下文以及行上下文所构成的,而DAX表达式的整个计值流程都依赖于计值环境。因此,对计值环境的理解决定着你对DAX的掌握程度,可见计值环境的重要性。那么本篇文章就将带领你们初步认识筛选上下文,并对一些相关的概念进行介绍,为以后的学习打下良好的基础。


  为了更方便的介绍,我们先来看一些概念的简单介绍:

  • 计值上下文可以分为:筛选上下文与行上下文
  • 计值环境:由存在的数据模型、筛选上下文以及行上下文所构成
  • 可见数据:能参与计算的数据,也可简单理解成被筛选后的数据
  • 初始筛选器:数据透视表(矩阵)的行列标签、筛选页字段、切片器、钻取、图表联动
  • 筛选上下文:所有筛选器经过交互作用后,最终得到的可见数据
  • 外部计值环境:对某个函数而言,将在其开始计算时就已存在的计值环境称为外部计值环境

  下面我们先来直接观察一下,看看筛选上下文究竟指的是什么,然后再进一步介绍筛选上下文的生成方式。为了直接观察到筛选上下文,我们可以先对现有的数据创建一个普通的透视表,然后把产品名称放入透视表的行字段并把利润放入透视表的值字段,然后双击透视表中某个产品的利润汇总值,即可查看明细数据,这些明细数据就是我们所说的筛选上下文了。具体的操作见下图:

  从上图可以知道,所谓的筛选上下文其实就是指的基础表被筛选器筛选后的数据,即可见数据,所有的DAX表达式都是在可见数据的基础上进行计值的。当不存在任何筛选器的时候,可见数据为所有数据,那么这时的筛选上下文也为所有数据。

  我们现在已经知道筛选上下文指的是什么了,当它的面纱被揭开后其实是很简单的一个东西,但为什么很多人都觉得筛选上下文很难理解,很难掌握呢?这其实就涉及到了一个东西,那就是筛选上下文的生成方式。我们在上图中所看到的透视表里U盘行标签的筛选上下文其实是最终结果,而这个最终结果要经过几个步骤才能得到,所以我们不仅要了解筛选上下文是什么东西,更关键的是要理解它的生成方式。筛选上下文的生成方式如下:

  由上面的流程可以知道,若干标准筛选器与固化筛选器经过交互作用后可以得到一个筛选器组合,然后这个筛选器组合再去筛选数据模型中的各个基础表,所有基础表的可见数据组成了当前计值环境下的筛选上下文。其中,当外部只有一个筛选器时,筛选器组合就等于这个筛选器。简单来说就是,多个筛选器可以合并成一个筛选器,只有一个筛选器时自然就不用合并了,或者说合并后仍然等于自身。

  因此,我们只需要把下面这两个过程搞清楚,就可以彻底掌握筛选上下文了:

  • 多个筛选器是如何合并成一个筛选器(筛选器间的交互方式)
  • 筛选器是如何筛选数据的(筛选器在表间关系上的传递)

  筛选上下文在严格意义上其实是指的数据模型中所有基础表的可见数据,但一般我们只需要对某个表的数据进行聚合或计值,因此一般意义上的筛选上下文指的是我们需要进行聚合计算的那个表的可见数据。此外,若直接以筛选上下文的形式来理解计值流程的话会不太方便,因为筛选上下文其实是由若干筛选器经过交互与筛选后所生成的,当我们要修改筛选上下文时其实是通过修改现有的筛选器或筛选器组合来完成的,故别的资料上所说的筛选上下文可能会与我描述的不一致,其它资料上所说的筛选上下文可能指的是现有的筛选器或者是筛选器组合,这一点需要注意一下。

  在筛选上下文的生成步骤中,最难以理解的其实是筛选器之间的交互方式,以及筛选器在表间关系上的传递等等,而这些内容都会在后续的文章中介绍。现在我们只需要记住筛选上下文的定义以及它的生成方式,并搞清楚筛选器有哪些类别与来源就可以了。

  首先,筛选器的类别有两种,一种是标准筛选器,另一种则是固化筛选器。其次,筛选器的来源大概有以下几种:

  • 初始筛选器:数据透视表(矩阵)的行列标签、筛选页字段、切片器、钻取、图表联动
  • CALCULATE或CALCULATETABLE函数所提供的内部筛选器
  • 由行上下文转换而来的筛选器

  DAX系列文章中涉及到的案例文件,均已上传到QQ群:344353627,若有需要,可自行加群获取。

未经允许不得转载:夕枫 » 09、初识筛选上下文
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论