...
在选择集成到一个模型表中时,还可以定义一个层次结构,其中包含维度的最高和最低粒度。 冗余非规范化数据的存储可能会增加模型存储大小,尤其是在维度表很大的情况下。
角色扮演维度
角色扮演维度是能以不同方式筛选相关事实的维度 。 例如,在Northwind中,订单维度表与订单销售明细事实之间有三种关系:可以使用同一维度表中按订单日期、发货日期或交货日期筛选事实。
数据仓库中接受的设计方法是定义单个日期维度表。 在查询时,日期维度的“角色”是通过用于联接表的事实列建立的。 例如,在按订单日期分析销售情况时,表联接与订单日期列相关。
在Smartbi数据模型中,我们用一种常见的建模方法解决,就是为每个角色扮演实例创建维度类型表。 该模型可以包含日期表、发货日期表和交货日期表,每个表与其对应的销售表列之间都存在单一且活动的关系 。
杂项维度
如果有多个维度,特别是包含几个属性(可能只有一种)并且这些属性的值很少时,则杂项维度非常有用 。
合适的候选项包括订单状态列或客户人口统计列(性别、年龄分组等)。
杂项维度的设计目标是将多个“小”维度合并为一个维度,以减少模型的存储大小,还可以通过呈现更少的模型表来缓解“字段”窗格的混乱情况 。
杂项维度表通常是所有维度属性成员的笛卡尔积,具有唯一标识列。 可以在数据仓库中构建维度,也可以通过使用Smartbi数据模型中的私有查询创建,并此查询作为维度类型表加载到模型中。
退化维度
退化维度指的是筛选所需的事实数据表的属性 。 我们的northwind中就有一个例子,就是销售订单号。 在这种情况下,创建仅包含这一列的独立表对模型设计并没有什么积极作用,因为这会增加模型的存储大小,并导致“字段”窗格混乱 。
在Smartbi模型中,可以将销售订单号列添加到事实类型表,以允许按销售订单号进行筛选或分组。
无事实事实数据表
无事实事实数据表不包含任何度量值列 。 它仅包含维度键。
无事实事实数据表可以存储由维度键定义的观察值。 例如,在特定日期和时间,特定客户登录到你的网站。 你可以定义一个度量值以对无事实事实数据表中的行进行计数,从而对客户的登录时间和数量进行计数分析。
无事实事实数据表的更有力的用途是存储维度之间的关系,例如,假设销售人员可以分配到一个或多个销售区域 , 则需要设计为包含两列的无事实事实数据表:销售人员键和区域键, 这两列中可以存储重复的值。
模型表关系
模型设计过程中,模型表的关系也是很重要的一项内容。
...