Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 防止沿维度聚合';属性_Sql Server_Ssas_Olap - Fatal编程技术网

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
因此,多维数据集允许沿属性进行比维度更深一层的探索和聚合,使它们成为某种子维度

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

我原以为,与SQL
SELECT
一样,这将显示
左位置
列:

        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 with
ID=4
和一个其他商店。无论如何+1表示您的努力和指示。哦,我明白了,在这种情况下,最好有单独的维度表,例如商店表,事实表(销售)中有FK。这样,您将避免任何歧义,而且您将拥有更多由事实表和维度表组成的星型模式数据库结构。看看这里
        Amount
New     10000
New     1000
North   5000