Sql server 防止沿维度聚合';属性
假设我有这个模式(为这个稍微复杂的示例感到抱歉): 然后,我创建了一个带有Sql server 防止沿维度聚合';属性,sql-server,ssas,olap,Sql Server,Ssas,Olap,假设我有这个模式(为这个稍微复杂的示例感到抱歉): 然后,我创建了一个带有商店维度和3个属性的多维数据集: 名称(列商店) Location Left(列ShopLocationLeft) Location Right(列shopLocation Right) 我可以沿着这个维度探索多维数据集: SELECT [Amount] ON COLUMNS, [Shop].[Name].Children ON ROWS FROM [Sales] 要获得: A
商店维度和3个属性的多维数据集:
名称
(列商店
)
Location Left
(列ShopLocationLeft
)
Location Right
(列shopLocation Right
)
我可以沿着这个维度探索多维数据集:
SELECT
[Amount] ON COLUMNS,
[Shop].[Name].Children ON ROWS
FROM
[Sales]
要获得:
Amount
Shop #1 10000
Shop #2 1000
Shop #3 5000
到目前为止还不错
但使用其他属性如左位置
:
SELECT
[Amount] ON COLUMNS,
[Shop].[Location Left].Children ON ROWS
FROM
[Sales]
我们得到:
Amount
New 11000
North 5000
因此,多维数据集允许沿属性进行比维度更深一层的探索和聚合,使它们成为某种子维度
在这种情况下没有商业意义
我原以为,与SQLSELECT
一样,这将显示左位置
列:
Amount
New 10000
New 1000
North 5000
因为对我来说,这个维度有3个点:
('Shop#1'、'New'、'York')
('Shop#2'、'New'、'drish')
('Shop#3'、'North'、'York')
它们应该被认为是原子实体,不能被进一步分解
我理解这种行为可能有用(例如,对于名字和姓氏),但在这种情况下,它没有任何意义
或者,如果我为一个属性定义了一个n级层次结构(例如国家->城市->位置),这也是合乎逻辑的,因为我会明确要求进行更深入的探索和聚合
当这种行为会导致不相关的结果时,如何防止这种行为?如果您在商店维度中有一个属性位置
,您可以选择ID作为键
列,选择位置
作为该属性的名称
列(在维度结构
选项卡中,右键单击位置左侧
属性并选择属性,然后您将查找键列
和名称列
属性)。如果执行此操作,您将看到结果中多次显示“新建”
如果您有一个属性,比如说Location Left
,并选择与Key
列和Name
列相同的Location Left
,那么每个Location Left
Name只会看到一个条目。谢谢,但是,按照您的想法,在这种情况下,我需要一个复合名称column:Shop
将是关键,ShopLocationLeft+''+ShopLocationRight
名称。不确定它是否可以在SSAS级别完成。否则,在DB级别创建专用视图可能是一个解决方案……并将其与防止沿着ShopLocationLeft
和ShopLocationRight
属性进行探索的方法相结合我认为您应该为此创建一个专用视图,因为这将是一个最简单的解决方案,您可以添加“完整位置”之类的内容视图中的列将成为完整位置属性的数据源。您还可以隐藏ShopLocationLeft和ShopLocation Right属性以防止探索。但问题是,如果选择适当的键列(可以是Shop,也可以是Shop表中的ID),则可以获得“重复”或者非重复效应,我认为,这是您首先要问的问题?您可以在SSAS中的维度定义中设置这一点。是的,我想我已经理解了您的答案;但是ID不能用作店铺的键,因为它标识的是销售,而不是店铺,并且许多销售可以在单个店铺中进行。我应该通过添加fo来更清楚地说明这一点urth record withID=4
和一个其他商店。无论如何+1表示您的努力和指示。哦,我明白了,在这种情况下,最好有单独的维度表,例如商店表,事实表(销售)中有FK。这样,您将避免任何歧义,而且您将拥有更多由事实表和维度表组成的星型模式数据库结构。看看这里
Amount
New 10000
New 1000
North 5000