【发布时间】: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