• SSAS的维度表之间的关系只能有一个不能有多个


    我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子。

    现在我们创建了一个维度Customer,由于该维度中的属性除了用到Customer表的字段以外,还要用到了Geography表的字段,所以Customer用到了两个表。

    但是Customer表和Geography表之间现在存在两个依赖关系

    其中一个关系是Customer.CustomerKey到Geography.CustomerKey

    另一个关系是Customer.GeographyKey到Geography.GeographyKey

    在理想状态下我们认为在处理Customer维度的时候,这两个关系会作为Customer表和Geography表连接的条件同时生效,也就是说会有Customer.GeographyKey=Geography.GeographyKey and Customer.CustomerKey=Geography.CustomerKey这样一个关系存在。

    但是实际情况是如何呢?

    我们现在看一看Customer维度的属性Geography Info,它的KeyColumns是Customer表的GeographyKey字段,NameColumns是Geography表的City字段,所以这个维度属性实际上就同时用到了Customer表和Geography表

    接下来我们处理Customer维度,看看生成Geography Info属性时的Sql语句是怎样的

    生成Geography Info属性时的Sql语句如下

    SELECT 
      DISTINCT
     [dbo_DimCustomer].[GeographyKey] AS [dbo_DimCustomerGeographyKey0_0],[dbo_DimGeography].[City] AS [dbo_DimGeographyCity1_0]
      FROM [dbo].[DimCustomer] AS [dbo_DimCustomer],[dbo].[DimGeography] AS [dbo_DimGeography]
      WHERE 
      (
       
      (
       [dbo_DimCustomer].[GeographyKey]   =  [dbo_DimGeography].[GeographyKey]
      )
     
      )

    我们惊讶地发现虽然我们前面在Customer表和Geography表之间定义了两个连接关系,但是只有其中的Customer.GeographyKey=Geography.GeographyKey生效了,而Customer.CustomerKey=Geography.CustomerKey这个关系在上面的Sql语句中根本没有出现。。。

    这说明虽然我们在Customer表和Geography表之间定义了两个连接关系,但是在处理Customer维度的时候只有一个关系是起作用的,另一个关系被SSAS忽略了。所以维度表之间的关系不能有多个,有且只能有一个。

    现在我们将上面Customer.GeographyKey=Geography.GeographyKey和Customer.CustomerKey=Geography.CustomerKey从两个关系合并为一个关系如下

    然后再次处理Customer维度,查看Geography Info属性的Sql语句如下

    SELECT 
      DISTINCT
     [dbo_DimCustomer].[GeographyKey] AS [dbo_DimCustomerGeographyKey0_0],[dbo_DimGeography].[dbo_DimGeographyCity1_0] AS [dbo_DimGeographyCity1_0]
      FROM [dbo].[DimCustomer] AS [dbo_DimCustomer],
          (
         
    
        SELECT [City] AS [dbo_DimGeographyCity1_0],GeographyKey   AS [dbo_DimGeographyCustomerKey1_1],[GeographyKey] AS [dbo_DimGeographyGeographyKey1_2]
      FROM [dbo].[DimGeography]
         )
         AS [dbo_DimGeography]
      WHERE 
      (
       
      (
       [dbo_DimCustomer].[CustomerKey]   =  [dbo_DimGeography].[dbo_DimGeographyCustomerKey1_1]
      )
         AND  
      (
       [dbo_DimCustomer].[GeographyKey]   =  [dbo_DimGeography].[dbo_DimGeographyGeographyKey1_2]
      )
     
      )

    很明显这一次Customer.GeographyKey=Geography.GeographyKey和Customer.CustomerKey=Geography.CustomerKey这两个连接关系都生效了,达到了我们预期的效果。

    所以切记SSAS中一个维度中的多个表之间的连接关系有且只能有一个,如果定义了多个连接关系实际上也只有一个会起作用。

  • 相关阅读:
    mysql 查看数据库及表大小以及数据库扩容评估
    idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
    mybatis plus 中增删改查及Wrapper的使用
    mybatis plus 主键策略
    搭建 spring boot + mybatis plus 项目框架并进行调试
    jeecg datagrid重新指定数据源
    java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的
    java 实现敏感词(sensitive word)工具详解使用说明
    java 日志脱敏框架 sensitive,优雅的打印脱敏日志
    互联网公司OpenAPI链接
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/5760468.html
Copyright © 2020-2023  润新知