2

在我注意到一个我被要求工作的系统有一个完全基于视图的立方体后,我开始思考这个问题。我注意到这些视图都加入了其他表/视图,并且视图也有逻辑编码到它们中(if、case 语句以及 convert 语句、连接等)。这一切对我来说似乎很可怕,但这让我想知道是否应该将他们的数据源建立在视图之外的立方体上?

对我来说,表格更有意义。它可以防止在数据源中进行昂贵的连接,并且不容易出现由于视图执行的转换而可能发生的错误。但是,我仍然看到很多人使用视图作为多维数据集的数据源。这里有最佳实践吗?我是否可能错过了视图在用作数据源时提供的一些优势?

4

3 回答 3

2

视图是将 SSAS 与表隔离的重要层 - 与其说与不需要的行相比,不如说与列更改无关。如果没有视图,SSAS 将始终处理表中的每一行。一个典型的例子是具有 SCD 类型 2 行的维度表,其中多维数据集只需要“当前”行。其他常见情况是限制测试数据或提供 SSAS 分区。

这些视图最好保持简单,即没有复杂的连接、CTE、计算列等。这些要求最好在 ETL 层中解决——在 SSAS 层中测试/调试/支持它们很痛苦。

于 2012-11-02T02:08:05.360 回答
1

不,它不是更快或更慢。

通常的做法是根据视图而不是表构建多维数据集。

它对基础表的更改提供了一定程度的隔离。它允许设计对基础表不同的信息进行分组。它允许发生非规范化。只是几个原因。

例如,您可以轻松地更改视图中的列名称,该视图仅用于为多维数据集提供服务。另外,您可以命名视图列,以便它们模拟多维数据集的域,而不是表中给出的名称。

于 2012-10-31T23:54:39.803 回答
1

如果您要根据表而不是视图构建多维数据集,您将如何将数据放入表中?最合乎逻辑的方法是从视图中加载表。无论您需要一些业务逻辑层来填充您的表,无论它是视图还是 ETL 流程。

这意味着您在给定时间将数据“快照”到表中,这可能意味着当您构建多维数据集时您的数据已过时。

这真的是一个性能问题。在以下情况下,创建表(或索引视图)作为多维数据集源可能是有益的:

  1. 您的源数据没有太大变化(即可以每天批量加载)
  2. 您需要经常从多维数据集数据钻取到关系(表或视图)数据,并且您的视图引入了性能问题

如果您只使用视图来提供多维数据集(而不是详细钻取),那么使用视图可能会更好,因为在从视图构建多维数据集时只会产生一次性能损失,而不是首先从构建表时产生一次性能损失视图,然后是另一个(当然更少)从表中构建立方体。

于 2012-11-01T00:27:18.533 回答