美文网首页DAX从入门到精通
DAX从入门到精通 4-3 创建一个行上下文迭代器

DAX从入门到精通 4-3 创建一个行上下文迭代器

作者: PowerBI入门到实践 | 来源:发表于2019-07-06 21:14 被阅读0次

我们学了,在定义计算列的时候,DAX会自动创建行上下文。计算引擎会基于行,去计算DAX表达式。现在,我们该学习如何在DAX表达式中创建行上下文。
回想一下,第二章的时候,我们介绍了以X为结尾的函数是迭代行数,也就是它们会对表的每一行进行迭代计算,最后把结果聚合起来,例如下面这个:

[IncreasedSales] := SUMX ( Sales, Sales[SalesAmount] * 1.1 )

sumx是迭代函数,它迭代整个sales表,计算表中的每一行,对每行的销售额加10%,然后在把它们加起来。为了要对每一行计算,sumx在sales表中建立了一个行上下文,用于它的迭代器。
重要的一点是,sumx中,不同的参数使用的是不同的上下文。我们仔细来看下:

= SUMX (
Sales, ← External contexts
Sales[SalesAmount] * 1.1 ← External contexts + new Row Context
)

第一个参数sales,它是在单元格的环境下计算(例如:透视表的单元格,其他的度量值或者查询的某部分),而第二个参数,也就是计算表达式,使用了外部的筛选条件,以及新创建的行上下文。
所有的迭代函数都按下面的逻辑运行:

  • 1.使用第一个参数,对表中的每一行创建行上下文。
  • 2.使用行上下文(任何环境,只要是在迭代开始前创建的),计算每一行的值。
  • 3.把第二步的值聚合计算。
    很重要的一点是,要记得,原始的上下文依旧会影响表达式。迭代器只是新增了行上下文;它们不会改变现有的环境。整个大多数情况下是正确的,但是有个重要的例外,就是如果之前的环境包含了同一个表格的行上下文,那么新建的行上下文会隐藏之前的行上下文。下一节我们会详细的说这个。

相关文章

网友评论

    本文标题:DAX从入门到精通 4-3 创建一个行上下文迭代器

    本文链接:https://www.haomeiwen.com/subject/eovmhctx.html