成员组是连续维度成员的系统生成的集合。 在 Microsoft SQL Server Analysis Services 中,可以通过称为离散化的进程将属性的成员分组到多个成员组中。 层次结构中的级别包含成员组或成员,但不包含两者。 当业务用户浏览包含成员组的级别时,他们会看到成员组的名称和单元格值。 Analysis Services 为支持成员组而生成的成员称为分组成员,看起来类似于普通成员。
属性 DiscretizationMethod 上的属性控制成员的分组方式。
DiscretizationMethod 设置 |
DESCRIPTION |
|---|---|
None |
显示团体成员。 |
Automatic |
选择最能表示数据的方法: EqualAreas 方法或 Clusters 方法。 |
EqualAreas |
尝试将属性中的成员划分为包含相同数量的成员的组。 |
Clusters |
尝试通过采样训练数据、初始化为多个随机点以及运行 Expectation-Maximization(EM)聚类分析算法的多个迭代,将属性中的成员划分为组。 此方法很有用,因为它适用于任何分布曲线,但在处理时间方面成本更高。 |
属性 DiscretizationNumber 上的属性指定要显示的组数。 如果属性设置为默认值 0,则 Analysis Services 会根据属性的设置 DiscretizationMethod ,通过采样或读取数据来确定组数。
成员组中成员的排序顺序通过使用 OrderBy 特性的属性进行控制。 根据此排序顺序,成员组中的成员将连续排序。
成员组的一个常见用途是从一个拥有较少成员的级别深入探索到一个拥有众多成员的级别。 若要使用户能够在级别之间向下钻取,请将包含大量成员的级别的属性从DiscretizationMethod更改为上表中所述的离散化方法之一。 例如,客户端维度包含具有 500,000 个成员的客户端名称属性层次结构。 可以重命名此属性客户端组,并将属性Automatic设置为DiscretizationMethod在属性层次结构成员级别上显示成员组。
若要向下钻取到每个组中的各个客户端,可以创建绑定到同一表列的另一个客户端名称属性层次结构。 然后,根据这两个属性创建新的用户层次结构。 顶层基于客户端组属性,较低级别将基于客户端名称属性。 该 IsAggregatable 属性位于 True 这两个属性上。 然后,用户可以展开层次结构上的(全部)级别以查看组成员,并展开组成员以查看层次结构的叶节点。 要隐藏组级或客户端级别,您可以将相应属性的值设置为AttributeHierarchyVisible。
命名模板
创建成员组时,会自动生成成员组名称。 除非指定命名模板,否则使用默认命名模板。 可以通过在属性属性的选项NameColumn中Format指定命名模板来更改此命名方法。 可以为在用于属性的列绑定NameColumn集合中指定的每种语言重新定义不同的命名模板。
该 Format 设置使用以下字符串表达式来定义命名模板:
<Naming template> ::= <First definition> [;<Intermediate definition>;<Last definition>]
<First definition> ::= <Name expression>
<Intermediate definition> ::= <Name expression>
<Last definition> ::= <Name expression>
该 <First definition> 参数仅适用于离散化方法生成的第一个或仅成员组。 如果未提供可选参数<Intermediate definition><Last definition>,则<First definition>参数用于为该属性生成的所有度量值组。
该 <Last definition> 参数仅适用于离散化方法生成的最后一个成员组。
该 <Intermediate bucket name> 参数适用于离散化方法生成的第一个或最后一个成员组以外的每个成员组。 如果生成两个或更少的成员组,则忽略此参数。
该 <Bucket name> 参数是一个字符串表达式,可以合并一组变量来表示成员或成员组信息作为成员组名称的一部分:
| 变量 | DESCRIPTION |
|---|---|
| %{第一个桶成员} | 在当前成员组中要包含的第一个成员的成员名称。 |
| %{最后的桶成员} | 将要包含在当前成员组中的成员的最后一个成员名称。 |
| %{上一个存储桶最后成员} | 分配给上一个成员组的最后一个成员的成员名称。 |
| %{下一个存储桶第一个成员} | 要分配给下一个成员组的第一个成员的成员名称。 |
| %{桶最小值} | 要分配给当前成员组的成员数量的最小值。 |
| %{桶最大值} | 要分配给当前成员组的成员人数上限。 |
| %{上一个桶的最大值} | 分配给上一个成员组的成员的最大数量。 |
| %{下一个桶的最小值} | 要分配给下一个成员组的成员的最小值。 |
默认命名模板是 "%{First bucket member} - %{Last bucket member}",提供与早期版本的 Analysis Services 的兼容性。
注释
若要在命名模板中包含分号(;)作为文本字符,请在前面添加百分号(%)字符。
示例:
以下字符串表达式可用于将 Adventure Works DW 多维数据 2012 示例分析服务数据库中的“客户”维度的年收入属性进行分类,其中年收入属性使用成员分组。
“小于%{下一个区间最小值};介于%{第一个区间成员}和%{最后一个区间成员}之间;大于%{前一区间最大值}”
将新成员添加到现有成员组
如果向维度添加新成员,则通过将成员的值与当前成员组布局进行比较,将这些成员分配给相应的成员组。
如果在上一个成员组的最后一个成员和下一个成员组的第一个成员之间插入成员,则新成员将成为上一个成员组的最后一个成员。
使用离散化属性更新维度
处理维度时,离散化属性仅在执行完整更新(ProcessFull)时进行重新离散化。 若要重新离散化属性,必须对维度进行完整更新。 如果离散化属性的维度表已更新,并且使用增量更新(ProcessAdd)处理维度,则该离散化属性不会重新离散化。 新存储桶的名称和子级保持不变。 有关处理维度的详细信息,请参阅 Processing Analysis Services Objects。
使用限制
不能在层次结构最顶层或最底层创建成员组。 但是,如果需要执行此作,可以添加一个级别,使要在其中创建成员组的级别不再是顶部或底部级别。 可以通过将其
Visible属性设置为False来隐藏添加的级别。不能在层次结构的两个连续级别中创建成员组。
使用 ROLAP 存储模式的维度不支持成员组。
如果更新了包含成员组的维度表,并且随后完全重新处理该维度,则将生成新的成员组。 新成员组的名称和子成员组可能与旧成员组不同。