sql多值维度

Posted

技术标签:

【中文标题】sql多值维度【英文标题】:sql multi value dimension 【发布时间】:2014-12-03 08:43:12 【问题描述】:

(这是我问的第一个问题,请大家多多包涵)

我在 SQL Server 2014 Enterprise 上创建了一个数据仓库,我正在努力将一个事实映射到一个维度中的多个值。

想象一个数据中心,其服务器为特定服务和客户保留。 这些服务器具有特定的组件,例如网络适配器、CPU 或操作系统。

我的事实表中的几行如下所示:

ServerID   CustomerID   OSID   ServiceID   NetworkGroupID  CPUID
1           1            1        1           1               1
2           1            2        1           2               1
3           2            1        2           2               2

服务器 1 和 2 属于客户 1。服务器 1 运行操作系统 1,另一个操作系统 2。两者都提供服务 1。 服务器 1 有一组被标识为“1”的网络适配器,另外 2 个。这些组包含多个网络适配器(一些是虚拟的,一些是物理的)。

我的网络维度具有属性 ID 和 NetworkAdapterName,我需要 ID 多次出现,如下所示:

ID   NetworkAdapterName
1      IntelAdapter#1
1      IntelAdapter#2
1      VirtualAdapter#1
2      IntelAdapter#1
2      DellAdapter#1
3      VirtualAdapter#1
3      VirtualAdapter#2

我想我需要某种子维度来充当这样的桥梁:

NetworkGroupID   NetworkID
  1              1
  1              2
  1              3
  2              1
  2              5
  3              3
  3              4

NetworkID NetworkAdapterName
1         IntelAdapter#1
2         IntelAdapter#2
3         VirtualAdapter#1
4         VirtualAdapter#2
5         DellAdapter#1

但是,既然有多个与 NetworkGroupID 具有相同值的外观,我该如何定义从事实表到桥接维度的主键或关系呢?

(CPU 和操作系统也是如此,但一旦我让它为网络适配器工作,我也可以为其他组件做这件事。)

编辑: 最后,我想在 SSAS 中构建一个多维数据集,它可以向我展示一台服务器拥有的多个组件。

【问题讨论】:

【参考方案1】:

您可以创建一个表(或维度)定义NetworkGroup

CREATE TABLE NetworkGroup (
    NetworkGroupID int          not null PRIMARY KEY,
    Name           nvarchar(50) null
);

然后使用您的“桥”表(又名Junction Table)将其与您的Network 表连接起来:

CREATE TABLE NetworkGroupNetwork (
    NetworkGroupID int not null,
    NetworkID      int not null,

    CONSTRAINT PK_NetworkGroupNetwork
        PRIMARY KEY (NetworkGroupID, NetworkID),

    CONSTRAINT FK_NetworkGroupNetwork_NetworkGroup
        FOREIGN KEY (NetworkGroupID)
        REFERENCES NetworkGroup (NetworkGroupID),

    CONSTRAINT FK_NetworkGroupNetwork_Network
        FOREIGN KEY (NetworkID)
        REFERENCES Network (NetworkID)
);

【讨论】:

Design Tip #124 Alternatives for Multi-valued Dimensions 也值得一读。 这是我的想法,但我如何才能创建从 PK NetworkGroup 到 NetworkGroupNetwork 中的复合 PK 的约束? 反之亦然;约束是从NetworkGroupNetwork 中的一列到NetworkGroup 的PK。类似于 Fact 表(CustomerID 列)和 Customer 表之间的内容。 我现在觉得很傻,当然可以:D 看起来很有希望,我需要再花几分钟来验证结果。我仍然需要弄清楚如何在 SSAS 中将它们放入我的立方体中 完全正确;)感谢您的帮助!在 SSAS 中,我必须将 NetworkGroupNetwork 定义为另一个度量组(事实表),并通过 NetworkGroupNetwork 在我的原始事实表和 dimNetwork 之间建立多对多关系

以上是关于sql多值维度的主要内容,如果未能解决你的问题,请参考以下文章

考虑到它具有一对多的关系 [Dim 1: many Fact],如何在星型模式中表示多值维度?

Sql 以id为维度,选不重复的

根据经维度计算距离,在sql实现根据经维度计算距离

根据经维度计算距离,在sql实现根据经维度计算距离

SQL Analysis Services OLAP TIME 维度

结合事实表和维度表的SQL语句?