这半个月终于把DAX圣经中的计值上下文和calculate篇章详细地看完了,现在就我的理解和大家分享一下,书中的语言过于专业晦涩,以后关于上下文如果有新的总结再和大家分享
Powerbi中的上下文是指DAX运算时候所处的表、表行,所有的上下文统称为计值上下文,计值上下文分为行上下文和筛选上下文,以下是两种计值上下文的分别介绍
- 行上下文指在表中迭代所形成的上下文,因为计算列是在表中添加的,所以计算列天然自带行上下文,
- 筛选上下文指在是视觉对象、切片器等筛选结果所形成的上下文
上下文转换则比较复杂,calculate是dax中唯一一个可以创建筛选上下文的函数(包括calculatetable),它的第一参数为表或表表达式,其他参数为筛选器,所以calculate能将筛选上下文转换为行上下文从而进行交互计算。注意,上下文转换会生成笛卡尔积,所以尽量避免在大规模的数据中使用。
同时迭代函数和calculate是一种语法糖的关系,也就是说所有的迭代函数都是calculate的省略,所以在使用迭代函数的时候也会有上下文转换,为了避免上下文转换带来的运算负担,所以首先应该避免在较大的表格上进行上下文转换(无论是行还是列),其次要注意上下文转换中嵌套的上下文转换的基数,以免带来运算负担和运算错误。
另外书中针对上下文转换这个篇章讲了很多也讲的比较复杂,其实只要理解calculate有这样的一个特性就好了,然后再多理解其中的逻辑就不会被绕乱,但calculate本身还有其他特性我们在其他篇章再讲述