防止沿维度属性聚合

Preventing aggregation along dimensions' attributes

假设我有这个模式(抱歉这个例子有点复杂):

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 属性:

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

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个点:

哪些应该被视为不能进一步分解的原子实体。

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

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

如何防止这种行为导致不相关的结果?

如果您的 Shop 维度中有属性 Location Left,您可以选择 ID 作为 Key 列和 Location Left 作为 Name 列此属性(在 Dimension structure 选项卡中 - 右键单击​​ Location Left 属性和 select 属性,然后您将查找 KeyColumnNameColumn 属性)。如果这样做,您将看到 'New' 在结果中多次显示。

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