在进一步学习calculate函数之前,我们要用花一小部分章节来巩固你对筛选上下文的理解。筛选上下文是一个复杂的概念,我们只有在学习了第十章后,才会完全的学习完上下文。在这个之前,我们会有不同的版本来介绍它,从简单到复杂,每次深入一些的介绍。
在之前的章节中,我们给了筛选上下文第一个定义:应用于模型的一些列筛选条件,可以改变数据库的可见行。这个定义很简洁,但是还是比较晦涩。在进入到下一个阶段之前,我们要记住VertiPaq(DAX使用的数据引擎)是一个列式数据库。我们应该停止使用表,而改用列的思维。
以下案例,我们可以认为Product是一个通常意义上的表。
但是,因为VertiPaq是一个列式数据库,表的正确展现方式应该是一系列的列,而不是一个整体。因此,我们用另外一种可视化的来展示它。
表还是以一样的内容,现在,可以更好的理解不同的列是如何存储的。同样,数据模型中的其他表也是这样工作的,因此,在你的脑海中,你要把模型中的表想象为许多的列,然后这些列,逻辑上被划分为表。
当你把Color放置到切片器,DAX就会实施一个过滤器到列中。这里有重点:过滤器不是添加到表中的列,只是添加到列。然后因为列是表的一部分,所以,这个列就成了表的过滤器。过滤器每次只能作用于一个列。
当你在切片器的筛选条件选择Red的时候,模型会按下图的方式处理数据。
你可以把需要进行筛选的列,形象的理解为一些列该列中的值。
所以,我们可以这样总结筛选上下文:它是一系列的表格,每个表包含了一个列,列中的值会被计算引擎读取为当前的筛选筛选条件。所有的这些过滤条件,最后会以AND的模式组合起来。
在透视表中,对于每个单元格,筛选的条件来源有切片器,过滤器,行以及列。每个筛选条件都会作用于一些表的列。因此,对于我们之前的案例,筛选上下文包含了三个不同的条件:category,subcategory,color。
所以,通过这个介绍,我们可以知道更新筛选上下文的方式。如果你要更新一个上下文,你需要提供一个新的列表来作为列的过滤条件。DAX会使用新的列表值来替代现有的过滤列,从而产生一个新的筛选上下文。
两个重要的点要记住:
- 过滤器是某个列中一组激活的值。
- 一个过滤条件总是只作用于一个列。
这个还不是完全正确的筛选上下文定义。要真正的掌握DAX,你必须还要学很多方面的知识,但是,目前为止,用这些知识,已经可以开始把筛选上下文的概念应用到工作中了。
现在我们已经对筛选上下文有了进一步的认识,现在,我们要继续学习calculate,以及它如何改变筛选上下文。