在SQL Server Analysis Service中,维度(Dimension)是一个非常重要的概念,通常情况下一个包含多个属性,每个属性为某个对象(例如Customer, Product等)的一个字段表现。这样,对于每个维度的特定属性,唯一列举了所有可能出现的值。在某些情况下,这些属性具有数百万个值而且不具有任何层次结构,这对于业务人员来说要想找到某个特定的值就会非常困难,如果能够将他们分组-例如Year-Quater-Month-Date这样的结构类似,但不采用Hierarchy--这样寻找起来就会非常简单。这就引入了分组的概念。举个简单的例子对于年收入,在一个拥有数百万员工的单位,每个人的工资收入在很大范围内是不同的,这样Yearly Income这个属性就会有很多的值。而在现实中我们可能更喜欢根据一个区间去限制这些统计值。分组的概念就是将这些属性值按区间进行归类。

 

成员组是系统生成的连续维度成员的集合。 在 Microsoft SQL Server Analysis Services 中,可以通过名为离散化的进程将属性成员分成若干成员组。层次结构中的级别或者包含成员组,或者包含成员,但是不能同时包含二者。 业务用户浏览包含成员组的级别时,将看见成员组的名称和单元值。 由 Analysis Services 为了支持成员组而生成的成员称为分组成员,看上去与普通成员相同。

 

通过使用DiscretizationMethod和DiscretizationBucketCount属性,Analysis Service可以自动为您创建组.使用DiscretizationMethod 属性控制成员的分组方式:

 

DiscretizationMethod 设置  

None

显示成员,不分组。

Automatic

选择最佳数据表示法: EqualAreas 方法或 Clusters 方法。

EqualAreas

尝试将属性中的成员分成若干包含相同数量成员的组。

Clusters

尝试通过抽样定型数据、初始化为大量随机点和运行几次期望最大化 (EM) 聚类分析算法的迭代来将属性中的成员分成若干组。

本方法的好处是适用于任何分布曲线,但就处理时间而言开销较大。

例如,对于Adventure Works DW2008,我将Yearly Income的DiscretizationMethod属性设置为Automatic后会有如下分组:

image

 但很显然,这让你无法可以随心所欲的控制区间及显示名称(即使你可以使用Name Template)。某些情况下如果你愿意,你也可以通过在数据库表中增加一个计算列来控制,这会让你更容易去决定他们的区间和名称。

CASE WHEN Weight IS NULL OR Weight<0 THEN 'N/A'

         WHEN Weight<10 THEN '0-10Kg'

         WHEN Weight<20 THEN '10-20Kg'

         ELSE '20Kg or More'

END

命名模板


当创建成员组时,会自动生成成员组的名称。 除非您指定了一个命名模板,否则使用默认的命名模板。 通过在某个特性的 NameColumn 属性的 Format 选项中指定命名模板,可以更改此命名方法。 可以针对列绑定(用于特性的 NameColumn 属性)的 Translations 集合中指定的每种语言重新定义不同的命名模板。默认的命名模板为 "%{First bucket member} - %{Last bucket member}"

 

变量

说明

%{First bucket member}

包含在当前成员组中的第一个成员的名称。

%{Last bucket member}

包含在当前成员组中的最后一个成员的名称。

%{Previous bucket last member}

分配到上一个成员组的最后一个成员的名称。

%{Next bucket first member}

分配到下一个成员组的第一个成员的名称。

%{Bucket Min}

要分配到当前成员组的最小成员数。

%{Bucket Max}

要分配到当前成员组的最大成员数。

%{Previous Bucket Max}

要分配到上一个成员组的最大成员数。

%{Next Bucket Min}

要分配到下一个成员组的最小成员数。

例如我们将YearlyIncome的NameColumn属性的Format选项设置为”Less than %{Next Bucket Min};Between %{First bucket member} and %{Last bucket member};Greater than %{Previous Bucket Max}”,分组的名称会有所改变。我们可以通过Name Template来改变各个分组的名称:

image

image

 

使用离散化属性更新维度


处理维度时,离散化属性只在完全更新 (ProcessFull) 中进行重新离散化。 若要对属性进行重新离散化,必须对维度执行完全更新。 如果离散化属性的维度表已更新,并且您使用增量式更新 (ProcessAdd) 处理该维度,则离散化属性不会进行重新离散化。 新存储的名称和子级将保持不变。

posted on 2010-08-14 13:22  Allan.  阅读(2498)  评论(3编辑  收藏  举报