Metadatenverbindung iMap zu Report auslesen

Aus BI-Snippets - Business Intelligence Code und Module
Wechseln zu: Navigation, Suche

Welcher Nutzer bzw. Entwickler der SAS BI-Tools "SAS Information Map Studio 4.x" und "SAS Web Report Studio 4.x" kennt folgendes Problem nicht: Zu Analysezwecken wird eine Auswertung benötigt, auf welcher iMap welche Web Report Studio Reports aufsetzten. Nachfolgend ist ein Weg aufgeführt, wie diese Information programmtechnisch aus den Metadaten auszulesen ist.

Im ersten Schritt sind die für die Auswertung relevanten iMaps und Reports wie in dem Artikel Rekursion zum Auslesen der Metadaten-Verzeichnisstruktur beschrieben aus den Metadaten auszulesen. Anschließend sind die "Notes" der gefundenen Report-Metadaten-Objekte auszulesen, da diese die MetadatenID der zugehörigen iMap enthalten. Hierzu kann nachstehendes Programm verwendet werden.
<syntaxhighlight lang="SAS" line="1" >

/********************* Standard Programm Header *****************************************
* Programm     : read_MDObjectReport_Note  
* Beschreibung : Das Makro read_MDObjectReport_Note ließt die Notes aller via Dataset
*                übergebenen Report-Metadatenobjekte aus.  
*
* Ersteller    : Steffen Marquardt & Christopher Gies | accantec consulting AG
* Datum        : 22.01.15
*
* Parameter    :  _OUTPUT         = Output DataSet (Zweistufig)
*                                   FORMAT: LIBRARY.DATASETNAME
*                 _INPUT          = Input DataSet (Zweistufig)
*                                   FORMAT: LIBRARY.DATASETNAME
*
***************************** Änderungen ************************************************
*
*  Version    Datum      Autor     Beschreibung der Änderung
*
*  V0.1       22.01.15   MQ & ChG  Initale Erstellung
*
****************************************************************************************/

%macro read_MDObjectReport_Note(_OUTPUT=, _INPUT=);
  /****************************************************************/
  /*                  Verbindungsdaten zum MD-Server              */
  /****************************************************************/
  options metaserver="sasmdentw01"
    metaport=8561
    metaprotocol=bridge
    metarepository="Foundation";
 
  data &_OUTPUT.;
 
    set &_INPUT. (where=(member_type='Report'));
 
    length  note_uri $256
            note_name $256
            note_text $4096
            iMap_uri $20;
 
    /* Objekt-Uri im Metadatenserver auflösen */
    nNotes = metadata_getnasn(next_member_uri, "Notes", 1, note_uri);
    do l = 1 to nNotes;
      /* Notiz auslesen */
      nNotes = metadata_getnasn(next_member_uri, "Notes", l, note_uri);
      rc = metadata_getattr(note_uri, "name", note_name);
      rc = metadata_getattr(note_uri, "StoredText", note_text);
      iMap_uri = substr(note_text ,find(note_text,'id=')+3,17);
      put note_text=;
      if note_name = 'WRS_Hints' then output;
    end;
  run;
%mend read_MDObjectReport_Note;

</syntaxhighlight>

Das aus o.g. Code Snippet resultierende Output-DataSet enthält nun alle Reports inkl. zugehöriger Note-Felder und dem daraus aufbereiteten Attribut iMap_uri. Das DataSet kann nun über iMap_uri mit dem DataSet aus dem ersten Schritt (via dem Attribut next_member_uri) verjoined werden. Auf diesem Weg erhält man eine Tabelle, über welche die Zugehörigkeit von Reports zu iMaps ersichtlich wird.