Cognos Makro Funktionen in Report Studio

Hallo zusammen,

das heutige Thema meines BLOGs bezieht sich auf die Cognos Entwicklung im Report Studio. Anwendungsfall war, dass man dynamisch den MUN(=Member Unique Name) für eine drillbare Dimension erzeugen wollte. Hintergrund ist, dass sich ein User aussuchen kann, anhand welcher Dimension der Report strukturiert wird und gedrillt werden kann.

Die beiden relevanten MUNs auf oberster Ebene sahen wie folgt aus:

  1. [Dimensional].[OWG].[OWG].[Oberwarengruppe]
  2. [Dimensional].[AX].[AX].[Zielgruppe]

Das Ganze wurde mit Hilfe von Makro Funktionen umgesetzt, und zwar mit folgenden:

  • Operator +
  • Funktion substitute (<Suchmuster>, <Ersetzungstext>, <Zeichenkette>)
  • Funktion prompt (<p_name>, <Datentyp>, <Std-Wert>)

Um Makrofunktionen zu verwenden, muss man einen Makroblock definieren. Das macht man mit der Raute:  # … <  Makro Anweisungen > … #. Das Makro erzeugt dann die entsprechende Report-Struktur zur Laufzeit.

Man könnte z.B. in einer Abfrage ein Datenelement erzeugen mit dem Inhalt: # ‘Test1‘+‘ Hallo‘ # Cognos würde zur Laufzeit Test1Hallo in das Datenelement schreiben. Als wenn man es vorher von Hand so da rein schreiben würde. Diese Anweisung würde natürlich erst einmal zu einem Fehler führen, da die Hochkommata fehlen. Um diese um unsere Zeichenkette zu ergänzen, können wir die Funktion sq( <Zeichenkette> ) verwenden: # sq(‘Test1‘ + ‘Hallo‘) #. Jetzt würde in dem Datenelement ‘Test1Hallo‘ stehen und es würde keinen Fehler mehr geben. Der + Operator verbindet übrigens Zeichenketten. ;)

Um auf unser Ausgangsproblem zurückzukommen. Die Funktion substitute ersetzt in <Zeichenkette> die Zeichenfolge <Suchmuster> durch <Ersetzungstext>. Mit prompt können Parameter abgefragt und verwendet werden. (Baut man manchmal in der Form auch in Framework Modelle direkt ein). Die Parameter der Funktion prompt sind selbsterklärend. Wenn es eine Eingabeaufforderungseite mit Parameterauswahl für diesen Parameter gibt, dann wird dieser auch nicht erneut abgefragt sondern prompt gibt das Ergebnis dieser Selektion zurück.

Die Lösung des obigen Problems sieht jetzt folgendermaßen aus:

# ‘[Dimensional].[' +  prompt('p_prodstruktur', 'token' ,'OWG')  +  '].['  +  prompt('p_prodstruktur', 'token' ,'OWG')  +  '].['  +  substitute('AX', 'Zielgruppe',  substitute('OWG', 'Oberwarengruppe', prompt('p_prodstruktur', 'token' ,'OWG')))  +  ']‘   #

Der Parameter p_prodstruktur dient zur Auswahl der entsprechenden Struktur (‚OWG‘ oder ‚AX‘). Zunächst wird der fest stehende Anfang als Zeichenkette definiert, dann wird das Ergebnis des Parameters verwendet und zwar zweimal. Das Ergebnis wird jeweils in eckige Klammern eingeschlossen, so dass man damit schon mal folgendes hätten: [Dimensional].[OWG].[OWG].[ im Falle der Auswahl OWG. Nun wird mit Hilfe von substitute geguckt, ob das Suchmuster OWG in dem Produktstrukturparameter enthalten ist (und somit gewählt wurde). Dies wird dann durch Oberwarengruppe ersetzt. Falls nicht, wird der Parameterinhalt vom äußeren substitute geprüft, ob AX drin ist. Dieses wird dann durch Zielgruppe ersetzt. Auf diese Art und Weise kann man eine einfache If- Then- Else- Struktur im Makro abbilden und die gestellt Aufgabe somit lösen.

Das Ganze stellt eine von vielen Anwendungsmöglichkeiten der Cognos-Makro-Funktionen dar. In zukünftigen BLOG-Einträgen werde ich auch auf dieses Thema weiter eingehen.

If you are interested in this or other advanced Cognos/SQL topics you can also attend training on my corporate homepage. At the moment my open courses are only available in German. Inhouse training and online courses are also available in English language. So check out my open trainings (German) or my online courses (English)!

Share and Enjoy: Diese Icons verlinken auf Bookmark Dienste bei denen Nutzer neue Inhalte finden und mit anderen teilen können.
  • LinkedIn
  • XING
  • Facebook
  • Google Bookmarks
  • Twitter

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *