【问题标题】:Preventing aggregation along dimensions' attributes防止沿维度属性聚合
【发布时间】:2019-10-16 21:54:27
【问题描述】:

假设我有这个架构(抱歉这个稍微有点复杂的例子):

CREATE TABLE Sales
(
    ID INT PRIMARY KEY,
    Shop NVARCHAR(MAX),
    ShopLocationLeft NVARCHAR(MAX),
    ShopLocationRight NVARCHAR(MAX),
    Amount DECIMAL
)

INSERT INTO Sales VALUES
(1, 'Shop #1', 'New', 'York', 10000),
(2, 'Shop #2', 'New', 'Delhi', 1000),
(3, 'Shop #3', 'North', 'York', 5000)

然后我创建一个具有 Shop 维度 和 3 个 属性 的立方体:

  • Name(列Shop
  • Location Left(列ShopLocationLeft
  • Location Right(列ShopLocationRight

我可以沿着这个维度探索立方体:

SELECT
    [Amount] ON COLUMNS,
    [Shop].[Name].Children ON ROWS
FROM
    [Sales]

获取:

        Amount
Shop #1 10000
Shop #2 1000
Shop #3 5000

到目前为止一切顺利。

但使用其他属性,例如Location Left

SELECT
    [Amount] ON COLUMNS,
    [Shop].[Location Left].Children ON ROWS
FROM
    [Sales]

我们得到:

      Amount
New   11000
North 5000

因此,立方体允许探索和聚合比维度更深 1 级,沿着属性,使它们成为某种子维度

在这种情况下没有商业意义。

我期望像 SQL SELECT 一样,这将显示 Location Left 列:

        Amount
New     10000
New     1000
North   5000

因为对我来说这个维度有 3 个点:

  • ('Shop #1', 'New', 'York')
  • ('Shop #2', 'New', 'Delhi')
  • ('Shop #3', 'North', 'York')

应该将其视为不能进一步分解的原子实体。

我知道这种行为可能很有用(例如,对于名字和姓氏),但在这种情况下它没有任何意义。

或者,如果我为属性(例如国家 -> 城市 -> 位置)定义了 n 级层次结构,这也是合乎逻辑的,因为我会明确要求进行更深入的探索和聚合.

当这种行为会导致不相关的结果时,如何防止它?

【问题讨论】:

    标签: sql-server ssas olap


    【解决方案1】:

    如果您的Shop 维度中有属性Location Left,您可以选择ID 作为Key 列,并选择Location Left 作为该属性的Name 列(在Dimension structure 选项卡中-右键单击在Location Left 属性上并选择属性,然后您将查找KeyColumnNameColumn 属性)。如果执行此操作,您将在结果中看到多次显示“新”。

    如果您有一个属性为Location Left,并选择相同的Location Left 作为Key 列和Name 列,则每个Location Left 名称只会看到一个条目。

    【讨论】:

    • 谢谢,确实,但是按照你的想法,在这种情况下,我需要一个复合名称列:Shop 将是键,ShopLocationLeft + ' ' + ShopLocationRight 是名称。不确定它是否可以在 SSAS 级别完成。否则在数据库级别创建专用视图可能是一种解决方案...
    • 并将其与防止沿 ShopLocationLeftShopLocationRight 属性进行探索的方法相结合。
    • 我认为您应该为此创建一个专用视图,因为这将是一个最简单的解决方案,您可以在视图中添加类似“完整位置”列的内容作为完整位置属性的数据源。您还可以隐藏 ShopLocationLeft 和 ShopLocation Right 属性以防止探索。但关键是,如果您选择适当的键列(可以是 Shop,也可以是 Shop 表中的 ID),您可以获得“重复”或不重复的效果,我认为这是您的问题第一名?您可以在 SSAS 中的维度定义中进行设置。
    • 是的,我想我已经理解了您的回答;但 ID 不能用作商店的密钥,因为它标识的是销售,而不是商店,并且可以在一个商店中进行许多销售。我应该通过添加带有ID = 4 和其他商店之一的第四条记录来更清楚地说明这一点。无论如何+1为您的努力和指点。 :)
    • 哦,我明白了,在这种情况下,最好有单独的维度表,例如 Shop 表,在事实表(Sales)中有 FK。这样,您将避免任何歧义,并且您将拥有更多的星型模式 - 由事实表和维度表组成的数据库结构。看看这里kimballgroup.com/data-warehouse-business-intelligence-resources/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多