信息化 频道

SAS OLAP 元数据信息获取

  【IT168 信息化】

  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=""
 

0
相关文章