TSQL - 使用程序连接查看

时间:2014-02-11 18:09:55

标签: sql sql-server sql-server-2008 view data-warehouse

我需要一些帮助来简化DWH实现。

目前我们有一个事实表,其中包含17个维度,这些维度是事实中的变量(我没有设计这个)。我们已经重新处理了整个ETL过程以添加单个维度id值,该值是对新雪花的引用 - 它表示17个值的组合。我们称之为“矩阵id”。我们所有的ETL进程现在都在关注这个ID,而不是17个varchars,即使我们仍在编写varchars,合并性能仍然令人惊讶。

我们现在想要取消17个varchar值(停止写入,并从事实中删除列)。

我们表格的大致轮廓(省略无用的信息):

  • dbo.factPerformance: ifactID, sMarketCode, sListCode, sBatchCode..., iDimMatrixID(FK)
  • dbo.Matrix: iDimMatrixID(PK), iDimMarketCodeID(FK), iDimListCodeID(FK), iDimBatchCodeID(FK)...
  • dbo.dimMarketCode: iDimMarketCodeID(PK), sMarketCode
  • dbo.dimListCode: iDimListCodeID(PK), sListCode
  • dbo.dimBatchCode: iDimBatchCodeID(PK), sBatchCode

等等......

所以这个新的iDimMatrixID是对17个可能的其他外键的引用。这些值是独一无二的。任何维度中都不会有两个具有重复值的条目。

现在到了有趣的部分...... 由于我们有如此多的进程按照它的方式使用事实表,并且使用这些varchars构建,我们需要一种方法来保持它们存在 - 即使它们不存在。因此,我们希望重命名这个事实,并构建一个视图(使用旧的事实名称)将事实连接到新维度,以便生成的视图看起来像旧事实表...但这是低效的,因为75%以上我们的报告并不关心这17个值 - 如果我们的select / where / group中没有任何varchar,那么为什么还要加入维度呢。

所以我的问题是......我很确定答案是否定的。

是否有任何可想到的方法来设计一个足够“智能”的视图来省略与dimMatrix的连接,如果select / where / group by没有引用17个字符串中的任何一个,那么所有子维度。

就像我说的那样,我很确定它无法完成,但我们希望在确定修改报告程序以仅动态连接所需的维度之前确定。

0 个答案:

没有答案