SAS OLAP 元数据信息获取(2006年最后一个关于SAS的帖子)

来源:互联网 发布:血源诅咒联机网络要求 编辑:程序博客网 时间:2024/06/05 22:49

SAS OLAP 元数据信息获取

SAS9由于采用了开放式架构,从而使得外部程序通过公用的API接口可以获得SAS的所有元数据信息
下面简单介绍一下如何获得SAS的OLAP定义信息

在SAS中获取元数据信息有多种办法,下面我介绍使用过程步来获取SAS 元数据信息
通过使用
proc metadata 过程,从而可以获得SAS内部的各种元数据信息
由于是通过的接口,故该过程输入参数和输出都采用了XML来表示

下面通过示例来介绍如何获得SAS中定义的CUBE,以及CUBE的纬度、度量、级别、层次等信息

要想获得在OLAP服务器上定义了多少CUBE,先要确认CUBE定义存储在哪个元数据库上,通过下面语句可以获得SAS中定义了哪些元数据库
%macro serverinfo();
 sERVER="wuyzpc"
 PORT=8561
 USERID="sasadm"
 PASSWORD="sasadm"
 PROTOCOL=BRIDGE
%mend;
proc metadata
%serverinfo()
IN="<GetRepositories>
<Repositories/>
<Flags>0</Flags>
<Options/>
</GetRepositories>";
run;

运行上面语句,回输出下面结果
<GetRepositories><Repositories><Repository Id="A0000001.A5PHUE24" Name="Foundation" Desc=""    
DefaultNS="SAS"/></Repositories><Flags>0</Flags><Options/></GetRepositories>  

上面输出告诉我们元数据存储库的ID和名称

这样我们通过元数据存储库的ID就可以获得该存储库上定义了哪些CUBE,使用下面语句
/*获得CUBE*/              
proc metadata
%serverinfo()
IN="
<GetMetadataObjects>
               <Reposid>A0000001.A5PHUE24</Reposid>
               <Type>cube</Type>
               <Objects/>
               <NS>SAS</NS>
               <Flags>0</Flags>
               <Options/>
               </GetMetadataObjects>";
               run;
输出如下结果:
<GetMetadataObjects><Reposid>A0000001.A5PHUE24</Reposid><Type>cube</Type><Objects><Cube        
Id="A5PHUE24.BI0000RT"                                                                         
Name="test"/></Objects><NS>SAS</NS><Flags>0</Flags><Options/></GetMetadataObjects>

可以看出,在该元数据存储库上定义了TEST CUBE
这样我们可以根据CUBE ID去获取CUBE的纬度、度量、层次信息
如下:
        proc metadata                                                                                                                  
        %serverinfo()                                                                                                                  
        IN="                                                                                                                           
            <GetMetadata>                                                                                                              
               <Metadata>                                                                                                              
               <cube Id=""A5PHUE24.BI0000RT""  Name="""" Desc="""">                                                                              
               <Dimensions /><Measures></Measures>                                                                                     
               </cube>                                                                                                                 
               </Metadata>                                                                                                             
               <NS>SAS</NS>                                                                                                            
               </GetMetadata>                                                                                                          
         "     ;                                                                                                                        
                                                                                                                  
        run;       
从而可以获得CUBE的纬度和度量定义信息,那么根据纬度ID或者度量ID,就可以获得该纬度或者度量的具体定义信息

如获得某个纬度信息:
proc metadata
%serverinfo()
IN='
<GetMetadata>
               <Metadata>
               <Dimension Id="A5PHUE24.BJ0000SI"  Name="" Desc="">
               </Dimension>
               </Metadata>
               <NS>SAS</NS>
               <Flags>6</Flags>
               <Options/>
               </GetMetadata>';RUN;

上面获取的纬度信息上只提供了纬度的名称和纬度的描叙
但是我们可能还想获得纬度的其他 ,那怎么知道纬度具有哪些属性,它的名称是如何定义的呢,则可以通过下面过程步来获取
比如想获得纬度有哪些属性,如下:
proc metadata
%serverinfo()
IN='
<GetTypeProperties>
               <Type>Dimension</Type>
               <Properties/>
               <NS>SAS</NS>
               <Flags>0</Flags>
               <Options/>
               </GetTypeProperties> ';run;
输出结果如下:
<GetTypeProperties><Type>Dimension</Type><Properties Cardinality="" ChangeState="" Desc=""     
DimensionType="" Id="" LockedBy="" MetadataCreated="" MetadataUpdated="" Name="" SortOrder=""  
UniqueName=""><AccessControls/><AssociatedOLAPSchema/><Changes/><Cubes/><DefaultHierarchy/><Defa
ultMeasure/><Documents/><Extensions/><ExternalIdentities/><Groups/><Hierarchies/><Implementors/>
<Keywords/><Levels/><LocalizedAttributes/><Measures/><Notes/><PrimaryPropertyGroup/><Properties/
><PropertySets/><ResponsibleParties/><SourceClassifierMaps/><SourceTransformations/><SpecSourceT
ransformations/><SpecTargetTransformations/><TargetClassifierMaps/><TargetTransformations/><Time
stamps/><Trees/><UsedByPrototypes/><UsingPrototype/><Variables/></Properties><NS>SAS</NS><Flags>
0</Flags><Options/></GetTypeProperties>        
从上面结果可以看出,纬度具有很多属性,且同时具有很多子节点,如 Cardinality="" ChangeState="" Desc=""     
DimensionType="" Id="" LockedBy="" MetadataCreated="" MetadataUpdated="" Name="" SortOrder=""  
UniqueName=""

好了,2006年的最后关于SAS的帖子就此结束了,希望能有所帮助,谢谢
最后
祝愿大家新年快乐,万事如意                                            

原创粉丝点击