跳到主要内容 跳到补充内容

内部和外部集合表达式

集合表达式可以在聚合函数内外使用,并用花括号括起来。

在聚合函数中使用集合表达式时,它可能如下所示:

示例: 内部集合表达式

Sum( {$<Year={2021}>} Sales )

如果表达式具有多个聚合,并且希望避免在每个聚合函数中写入相同的集合表达式,请在聚合函数外使用集合表达式。

如果使用外部集合表达式,则必须将其放置在范围的开头。

示例: 外部集合表达式

{<Year={2021}>} Sum(Sales) / Count(distinct Customer)

如果在聚合函数之外使用集合表达式,也可以将其应用于现有的主度量值。

示例: 应用于主度量值的外部集表达式

{<Year={2021}>} [Master Measure]

在聚合函数外部使用的集合表达式会影响整个表达式,除非它用括号括起来,否则括号定义范围。在下面的词法范围示例中,集合表达式仅应用于括号内的聚合。

示例: 词法定界

( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)

规则

词法定界

除非用括号括起来,否则集合表达式会影响整个表达式。如果是,括号定义词法范围。

位置

集合表达式必须放在词法范围的开头。

上下文

上下文是与表达式相关的选择。传统上,上下文始终是当前选择的默认状态。但如果对象设置为备用状态,则上下文是当前选择的备用状态。

还可以以外部集表达式的形式定义上下文。

继承

内部集合表达式优先于外部集合表达式。如果内部集合表达式包含集合标识符,它将替换上下文。否则,将合并上下文和集合表达式。

  • {$<SetExpression>} - 覆盖外部集合表达式

  • {<SetExpression>} - 与外部集合表达式合并

元素集分配

元素集指定决定了如何合并两个选择。如果使用法线等号,则内部集合表达式中的选择具有优先权。否则,将使用隐式集合运算符。

  • {<Field={value}>} - 此内部选择将替换 “Field” 中的任何外部选择。

  • {<Field+={value}>} - 使用并集运算符,此内部选择与 “Field” 中的外部选择合并。

  • {<Field*={value}>} - 使用交叉运算符,此内部选择与 “Field” 中的外部选择合并。

多步骤继承

继承可以分多个步骤进行。示例:

  • 当前选择项 → Sum(Amount)

    聚合函数将使用上下文,这是当前选择。

  • 当前选择项 → {<Set1>} Sum(Amount)

    Set1 将从当前选择继承,结果将是聚合函数的上下文。

  • 当前选择项 → {<Set1>} ({<Set2>} Sum(Amount))

    Set2 将从 Set1 继承,其将从当前选择继承,结果将是聚合函数的上下文。

Aggr() 函数

Aggr() 函数创建一个具有两个独立聚合的嵌套聚合。在下面的示例中,为 Dim 的每个值计算 Count(),并使用 Sum() 函数聚合得到的数组。

示例:  

Sum(Aggr(Count(X),Dim))

Count() 是内部聚合,Sum() 是外部聚合。

  • 内部聚合未从外部聚合继承任何上下文。

  • 内部聚合从 Aggr() 函数继承上下文,该函数可能包含集合表达式。

  • Aggr() 函数和外部聚合函数都从外部集表达式继承上下文。

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!