BI中如何配置模式文件(Schema)

阅读更多

在这里系统的看看构成模式文件的元素:
首先说明一点:这个sample中每一部分在形式上有很多重复的地方,为了尽可能地讲的完全,所以在讲解的过程中,
每一部分提取形式上不重复的部分,然后加入该部分的一些可选项,同时可以查阅FoodMart.xml这个Schema文件。
从宏观上来看,配置一个Schema大致可以分成五部分,分别是:1、Table配置 2、Dimension配置 3、Measure配置 4、VirtualCube配置 5、访问权限配置。在本sample中已经标记出,下面分析每一部分中的元素构成。

<第一部分>
 


   
   
       
       
       
       
       
   

   
        ....
      
      
  

 


1、首先给出表名,在一般情况下,一个Cube是建立在一张事实表之上的,所以Table name=某事实表,但也可以在一张基础表上建立Cube。
2、在本sample中加入了一个聚合表(aggregate table),在一个Cube中可以加,也可以不加,需要根据实际情况来决定。聚合表的作用简单的说表现在考虑报表设计时,通过聚合预先计算好数据汇总,从而改进查询响应的时间。聚合表的内容非常丰富,在这里只讲解最基本的概念,进一步了解请访问官网http://mondrian.pentaho.com/documentation/aggregate_tables.php,接下来简单的理解构成聚合表的元素。
3、AggExclude name,这里给出的表名旨在告诉Mondrian该表不是相应事实表的聚合表。
4、AggName name,这里给出的表名告诉Mondrian该表是相应事实表的聚合表
5、AggFactCount column="FACT_COUNT",这个字段在每一张聚合表中都存在,记录了相应的事实表中有多少列写入到聚合表中。
6、AggIgnoreColumn column,该列名的作用是告知Mondrian该列是已知的,应该被忽略。
7、这里给出了一个映射关系,即事实表中的product_id列对应了聚合表中的PRODUCT_ID列。
8、AggMeasure name和AggLevel name这两个元素同样也给出了一个映射关系,即把在Cube的模式文件中定义的逻辑名映射到聚合表中的列名。
9、AggPattern pattern使用了正则表达式,把符合该pattern的聚合表包括进来。如在本sample中把前缀为agg_sales_fact_1997_的聚合表全部包括进来作为孩子元素。
10、AggPattern pattern中的AggExclude name元素,该元素很明确地指出在已包括进来的聚合表中,剔除某特定的聚合表。
11、AggPattern pattern中的AggExclude pattern元素,该元素的作用表现在把符合AggExclude pattern的正则表达式的聚合表剔除。
12、第一部分的完整框架是:
  
    
    
        
        
        
        
        
    

    
       
       
   

  

 

 

<第二部分>
 
 
   
     


     
   
 
 
   
     

     
     
       
          "fname" || ' ' || "lname"
          fname + ' ' + lname
          "fname" || ' ' || "lname"
          CONCAT(`customer`.`fname`, ' ', `customer`.`lname`)
          fname + ' ' + lname
          "customer"."fullname"
          CONCAT(CONCAT("customer"."fname", ' '), "customer"."lname")
          "fname" || ' ' || "lname"
          fullname
       

       
          "fname" || ' ' || "lname"
          fname + ' ' + lname
          "fname" || ' ' || "lname"
          CONCAT(`customer`.`fname`, ' ', `customer`.`lname`)
          fname + ' ' + lname
          "customer"."fullname"
          CONCAT(CONCAT("customer"."fname", ' '), "customer"."lname")
          "fname" || ' ' || "lname"
          fullname
       

       
       
       
       
     

   
 

1、DimensionUsage元素:如果在之前定义了共享维(shared dimensions),并且在该Cube中想要使用该共享维,
那么就如使用,通过store_id把
事实表sales_fact_1997和基础表Store相连接。
2、
   
     

     
   
  
  定义了一个名为Promotion Media的维,通过promotion_id连接基础表promotion和事实表sales_fact_1997。
 定义了一个层次中的级别,选择了基础表promotion的media_type字段,不包括该表中的其他字段。
3、在本上面的例子中又定义了一个名为Customers的demension,通过字段customer_id连接基础表customer和事实表sales_fact_1997。接下来来解释下其他元素的作用:
 
    
     SQL表达式,用于该级别的key,代替了column
    

    
     SQL表达式,用于计算一个成员的标题,代替了Level.captionColumn
    

    
     SQL表达式,用于计算一个度量,代替了Level.parentColumn
    

       
          SQL表达式,用于计算一个成员的名字,代替了Level.nameColumn
       

       
          SQL表达式,用于对一个level的所有成员进行排序,代替了Level.ordinalColumn
       

       
         
          SQL表达式,用于计算一个属性的值,代替了Property.column
         

       

 

4、第二部分的完整框架是:
  
  
    
      

      
    
  
  
    
      

      
      
        
      
     

     
      
     

     
      
     

        
          
        

        
          
        

        
          
           
          

        

      

    
  

 

 

<第三部分>
 
 
   
      (case when "sales_fact_1997"."promotion_id" = 0 then 0 else "sales_fact_1997"."store_sales" end)
   

 

 
    [Measures].[Store Sales] - [Measures].[Store Cost]
   
 


1、第一个Measure的名字是Unit Sales,对应事实表中的unit_sales列,聚合的方法是求和(还可以是:sum,count,min,max,avg,distinct-count),求和之后的结果格式为标准格式。
2、第二个Measure的名字是Promotion Sales,在该Measure下加入了一个MeasureExpression。期望是:从事实表sales_fact_1997中挑选出promotion_id=0的所有行,然后对该事实表的store_sales进行求和(如果某行的sales_fact_1997.store_sales=0,则不对该行进行计算)
3、CalculatedMember元素是一个计算成员,在本sample中取名Profit,属于Measures维。期望是:商店的销售额减去商店的成本得到利润值,得到的值的类型是字符串类型,值的格式是$#,##0.00
4、第三部分一个完整的框架是:
  
   
    
   

  

  
   
   
  

  
   该集合的值是由公式推导出的,是Cube的组成部分
  

  

 

<第四部分>
 
  
  
  
  
     [Measures].[Profit] / [Measures].[Units Shipped]
  

 


1、VirtualCube,A cube defined by combining the dimensions and measures of one or more cubes. A measure originating from another cube can be a .即若干个Cube中的dimension和measure相结合形成一个Cube,该Cube就叫做VirtualCube。来自另一个Cube的measure可以是该VirtualCube的计算成员。
2、在本sample中定义了一个叫Warehouse and Sales的多维虚拟分析主题,VirtualCubeDimension定义了一个来自Sales的Cube,并且选择了该Cube中的Customers维。注意在VirtualCubeDimension的定义中还有另一种方法,如,这是针对共享维的使用方法。
3、VirtualCubeMeasure定义了一个来自Sales的Cube,并且选择了该Cube中的Sales Count度量。
4、CalculatedMember定义了一个计算成员,使用方法和一般的Cube一样。
5、第四部分一个完整的框架是:
  
   
    
    

   

   
   
   

   
   
   

   
   
   

  

  或者如本sample中的写法,即把在VirtualCube中要使用到的Cube写在中,
  从而不需要在中定义。
 

  

<第五部分>

 
   
     
       
       
     

     
   

 



1、该部分属于访问控制配置文件
2、Role定义了一个访问者
3、SchemaGrant是一个访问Schema的权利的集合
4、CubeGrant是一个访问Cube的权利的集合
5、HierarchyGrant是一个访问该层次以及属于该层次的级别的权利的集合
6、MemberGrant是一个访问成员以及该成员的孩子的权利的集合
在理解上述元素的情况下,我们来了解在本sample中该部分的作用:首先定义了一个访问用户,是California manager(加州经理),他不能访问整个Schema中的Cube,但他可以访问Sales这个Cube。其次,自定义了对该Sales Cube中的Store这个层次的访问控制,他可以访问位于美国加州的store(除了洛杉矶)。最后定义了他对该Sales Cube中的Gender层次无访问权限。
7、第五部分的完整框架是:
  
   
     
       
         
       

       
     

   

  

你可能感兴趣的:(SQL,框架,正则表达式,XML,Oracle)