集合分析
在应用程序中进行选择时,将在数据中定义记录的子集。聚合函数,诸如 Sum()、Max()、Min()、Avg() 和 Count() 都基于该子集计算。
换句话说,您的选择定义了聚合的范围;它定义了进行计算的记录集。
集合分析提供了一种定义范围的方法,该范围不同于当前选择所定义的记录集。该新范围也可被视为一种替代选择。
如果要将当前选择与特定值(例如去年的值或全球市场份额)进行比较,此选项非常有用。
集合表达式
集合表达式可以在聚合函数内外使用,并用花括号括起来。
示例: 内部集合表达式
Sum( {$<Year={2021}>} Sales )
示例: 外部集合表达式
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
有关内部和外部集合表达式的更多信息,请参阅内部和外部集合表达式。
集合表达式包含以下元件的组合:
-
标识符。集合标识符表示在别处定义的选择。它还表示数据中的一组特定记录。它可以是当前选择、书签选择或备用状态选择。简单的集合表达式包含一个单一的标识符(如美元符号 {$}),这意味着当前选择项中的所有记录。
示例:$、1、BookMark1、State2
请参阅: 集合标识符
-
运算符。集合运算符可用于创建不同集合标识符之间的并集、差异或交点。通过这种方式,您可以创建由集合标识符定义的选择的子集或超集。
示例:+、-、*、/
请参阅: 集合运算符
-
修饰符。可以将集合修饰符添加到集合标识符以更改其选择。修饰符也可以单独使用,然后修改默认标识符。修饰符必须用尖括号 <…> 括起来。
示例:<Year={2020}>、<Supplier={ACME}>
请参阅: 集合修饰符
这些元素被组合成集合表达式。
例如,以上集合表达式是从聚合 Sum(Sales) 生成的。
第一个操作数返回当前选择的年份 2021 的销售额,由 $ 集合标识符和包含年份 2021 选择的修饰符指示。第二个操作数返回 Sweden 的 Sales,并忽略由 1 集合标识符指示的当前选择。
最后,表达式返回一个集合,该集合由属于两个集合操作数中任何一个的记录组成,如 + 集合运算符所示。
有关完整的语法描述,请参见集合表达式语法。
示例
以下主题中提供了组合上述集合表达式元素的示例:
要尝试其他一些表达式,请参阅教程 - 创建集合表达式。
自然集
通常,集合表达式表示数据模型中的一组记录和定义此数据子集的选择。在这种情况下,该集合称为自然集合。
集合标识符(带或不带集合修饰符)始终表示自然集合。
然而,使用集合运算符的集合表达式也表示记录的子集,但通常仍然不能使用字段值的选择来描述。这样的表达式是非自然的集合。
例如,{1-$} 给定的集合不能总是由选择定义。因此,它不是一个自然的集合。这可以通过加载以下数据、将其添加到表中,然后使用筛选窗格进行选择来显示。
Load * Inline
[Dim1, Dim2, Number
A, X, 1
A, Y, 1
B, X, 1
B, Y, 1];
通过对 Dim1 和 Dim2 进行选择,可以获得下表所示的视图。
第一个度量中的集合表达式使用自然集合:它对应于所做的选择 {$}。
第二度量是不同的。它使用 {1-$}。不可能做出与此集合对应的选择,因此它是非自然集合。
这种区别有许多后果:
-
集合修饰符只能应用于集合标识符。它们不能应用于任何集合表达式。例如,不可能使用以下集合表达式:
{ (BM01 * BM02) <Field={x,y}> }
在这里,正常(圆形)括号表示应在应用“设置”修饰符之前计算 BM01 和 BM02 之间的交点。原因是没有可以修改的元素集。
-
不能在 P() 和 E() 元素函数中使用非自然集。这些函数返回一个元素集,但无法从非自然集推断元素集。
-
如果数据模型有多个表,则使用非自然集的度量值不能始终归因于正确的维度值。例如,在下表中,一些排除在外的销售数字归因于正确的 Country,而另一些将 NULL 作为 Country。
分配是否正确取决于数据模型。在这种情况下,如果号码属于被选择排除在外的国家,则无法分配该号码。
标识符 | 说明 |
---|---|
1 | 表示应用程序中所有记录的完整集合,而不考虑选择的任何选择项。 |
$ | 表示当前选择项的记录。因此,集合表达式 {$} 与不陈述集合表达式的意义等同。 |
$1 | 表示上一个选择项。$2 表示上一个选择项,但只表示一个,以此类推。 |
$_1 | 表示下一个(前进)选择项。$_2 表示下一个选择项,但只表示一个,以此类推。 |
BM01 | 您可以使用任何书签 ID 或书签名称。 |
MyAltState | 您可以使用状态名称引用处于备用状态的这些选择项。 |
示例 | 结果 |
---|---|
sum ({1} Sales) | 返回应用程序的总销售额,忽略选择项而不是维度。 |
sum ({$} Sales) |
返回当前选择项的销售额,也就是说效果与 sum(Sales) 相同。 |
sum ({$1} Sales) |
返回上一个选择项的销售额。 |
sum ({BM01} Sales) |
返回书签名为 BM01 的销售额。 |
示例 | 结果 |
---|---|
sum({$<OrderDate = DeliveryDate>} Sales) | 返回当前选择项的销售额,其中 OrderDate = DeliveryDate。 |
sum({1<Region = {US}>} Sales) |
返回美国地区的销售额,忽略当前选择项 |
sum({$<Region = >} Sales) |
返回选择项的销售额,但移除 Region 中的选择项。 |
sum({<Region = >} Sales) |
返回与上述示例相同的销售额。当省略要修改的集合时,则假定 $。 |
sum({$<Year={2000}, Region={“U*”}>} Sales) | 返回当前选择项的销售额,但 Year 和 Region 中均有新选择项。 |