防止沿维度属性聚合
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 属性:
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 级层次结构(例如国家 -> 城市 -> 位置),这也是合乎逻辑的,因为我会明确要求更深入的探索和聚合。
如何防止这种行为导致不相关的结果?
如果您的 Shop
维度中有属性 Location Left
,您可以选择 ID 作为 Key
列和 Location Left
作为 Name
列此属性(在 Dimension structure
选项卡中 - 右键单击 Location Left
属性和 select 属性,然后您将查找 KeyColumn
和 NameColumn
属性)。如果这样做,您将看到 'New' 在结果中多次显示。
如果您有一个属性说 Location Left
并选择相同的 Location Left
作为 Key
列和 Name
列,您将只会看到一个条目每 Location Left
个名字。
假设我有这个模式(抱歉这个例子有点复杂):
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 级层次结构(例如国家 -> 城市 -> 位置),这也是合乎逻辑的,因为我会明确要求更深入的探索和聚合。
如何防止这种行为导致不相关的结果?
如果您的 Shop
维度中有属性 Location Left
,您可以选择 ID 作为 Key
列和 Location Left
作为 Name
列此属性(在 Dimension structure
选项卡中 - 右键单击 Location Left
属性和 select 属性,然后您将查找 KeyColumn
和 NameColumn
属性)。如果这样做,您将看到 'New' 在结果中多次显示。
如果您有一个属性说 Location Left
并选择相同的 Location Left
作为 Key
列和 Name
列,您将只会看到一个条目每 Location Left
个名字。