设置相对维度?
Posted
技术标签:
【中文标题】设置相对维度?【英文标题】:Setting up a relative dimension? 【发布时间】:2011-09-26 18:17:30 【问题描述】:我有一个非常简单的场景,但数据集非常大(使用下面更简单的示例来说明我的问题)。
假设我有一个由 Country 表(事实)组成的多维数据集,该表具有一个称为 Continent 的维度。
有了这个,我可以按大洲汇总国家数据。
但是假设每个国家都有一个城市:
这里我不能将大陆维度直接分配给城市,因为城市没有大陆属性。这是一个简化的示例,在填充城市事实表时加入 Country 信息很简单。但是,我的应用程序正在使用一个非常大的数据集,需要很长时间才能查询,并且我试图避免必须加入 Country 才能获取大陆 id。我需要能够编写简单的 MDX 查询来按国家或城市获取人口数量。
如何设置我的多维数据集,以便在城市和大陆之间建立上述场景中的维度关系,而无需将大陆ID添加到城市?
更新
正如布赖恩所建议的,我可以将国家作为一个维度。这就是我最初的做法,也许我做得不对,但它对性能造成了影响,因为:上面的例子很简单,但就我而言,我有 15 个属性(例如上面的大陆)需要聚合我的数据。如果我创建一个国家维度,并将这 15 个属性指定为维度属性,那么每次我处理我的多维数据集时,它都会执行“从国家/地区选择不同的大陆”x15(每个属性一次)以获得该不同的大陆列表.如果 Country 表很大(在我的情况下,它是一个由许多大表组成的视图),则需要很长时间才能获得每个维度的不同值列表。
我上面的尝试只是解决此问题的一种方法,并且每个维度都有单独的表,我可以轻松管理。我唯一的问题是我有需要在这些属性上聚合的子视图,而子表上不存在这些属性,需要从“国家”视图等中查找。
【问题讨论】:
“如果 Country 表很大(在我的情况下,它是一个由许多大表组成的视图)”这让我认为要么 a.)您正在从操作数据源中读取,要么 b .) 数据仓库设计不正确。事实应该是一个可衡量的过程,由度量(计数、日期、金钱……)和度量的上下文(链接到维度的键)组成。该维度应该是一个表,具有一个聚集的主键,并且当您需要不同的值时是非聚集的。拥有多个来源会使这进一步复杂化。 是的,我正在从操作数据源读取数据。此数据源从“实时”和“存档”数据库中读取。专用数据仓库将是理想的解决方案,但是目前我们没有资源来为此多维数据集创建新仓库。我正在尝试尽可能多地优化它。 带有键/视图的映射表很有用 【参考方案1】:看起来维度模型没有经过深思熟虑。
解决问题的创可贴将是国家维度。 Country 对 Country 和 City 都是通用的。
我确信问题比这复杂得多,但您列出了一个非常简单的问题。
AFAIK,再多的 MDX(或任何其他技术)都无法克服糟糕的设计问题。维度模型是数据仓库性能的基础。尽早做好是非常重要的。
【讨论】:
是的,我从国家作为维度解决方案开始,但要分开维度表以提高性能.. 将用我的意思更新我的问题以上是关于设置相对维度?的主要内容,如果未能解决你的问题,请参考以下文章