Auf kurzem Weg: Drei schnelle TM1-Programmiertipps

Programmierungen in TM1 können manchmal zeitaufwendig sein, zumal teilweise Befehle fehlen, die in anderen Programmiersprachen zum Standard gehören. Deswegen verraten wir drei vielgenutzte Abkürzungen, die Ihnen hoffentlich das Leben erleichtern.

Funktion zur Erkennung von Zahlen in TM1

Problem: Häufig werden Text-Quellen verwendet, um Zahlen in die numerischen Zellen eines multidimensionalen Würfels zu schreiben. Diese können aus CSV-Dateien, Excel- oder Web-Berichten, aber auch aus SQL-Datenbanken stammen. Um Fehlermeldungen zu vermeiden, ist es unerlässlich, die Zeichenkette vor der Umwandlung in eine Zahl zu prüfen.

Herausforderung: Aktuell gibt es in TM1 keine analoge Funktion, die überprüft, ob es sich bei einer Variable inhaltlich um eine Zahl handelt, wie das zum Beispiel in Microsoft Excel mit der Funktion ISTZAHL() der Fall ist.

Lösung: Da man jedes Zeichen, das über Eingabeparameter oder Variablen eingegeben wird, mit einem sogenannten Ascii-Code überprüfen kann, kann man in einer „While“-Schleife alle Zeichen der Benutzereingabe durchlaufen und stoppen, sobald der Code sich nicht zwischen 48 und 57 befindet. Eine „While“-Schleife führt anhand einer festgelegten Bedingung eine Reihe an Befehlen aus. Liegt der Ascii-Code außerhalb des oben genannten Bereichs, so handelt es sich nicht um eine Zahl. Dies ist der Kern der Lösung. Zusätzlich braucht man nur noch eine Boolesche Variable, um die „While“-Schleife zu stoppen und muss anhand der Länge der Dateneingabe die Zeichen dann nur noch durchlaufen. Eine Boolesche Variable hat nur zwei mögliche Inhalte: „Ja“ oder „Nein“ bzw. „1“ oder „0“. Diese Tatsache kann man verwenden, um die Bedingung der „While“-Schleife solange zu durchlaufen (Variable =0), bis man auf einen Code außerhalb des Bereiches trifft bzw. das Ende der Länge erreicht und die Variable auf 1 setzt, um die „While“-Schleife zu beenden.

Praktische „Suchen und Ersetzen“-Funktion in TI-Prozessen ermöglichen

Problem: In TM1 gibt es keine TurboIntegrator-Funktion für „Suchen und Ersetzen“. Gerade im Umgang mit Kommentaren müssen aber bestimmte Zeichen ersetzt werden, um diese z. B. für einen CSV-Export vorzubereiten. Eine „Suchen und Ersetzen“-Funktion ist aber auch hilfreich, um Texte gegebenenfalls in ein bestimmtes Format zu bringen.

Herausforderung: Aktuell ist keine „Suchen und Ersetzen“-Funktion in den TM1-Prozessen integriert, daher muss man diese über eine „While“-Schleife selbst implementieren.

Lösung: Im folgenden Quellcode-Schnipsel wird in einer Variable jedes Minuszeichen gesucht und ersetzt. Dies kann man leicht für jede beliebige Zeichenkette abwandeln. Wie es funktioniert, ist schnell erklärt:

Die „While“-Schleife fängt hinten bei der Variable an, sucht die zu ersetzende Zeichenkette, teilt bei Erfolg die restliche Variable und die bereits durchsuchte Zeichenkette auf und setzt den einzufügenden String (Zeichenkette) zwischen die beiden Teile zu einem neuen String zusammen. Dieses Beispiel wandelt ein Datum im Format YYYY-MM-DD zum Format YYYYMMDD, um es anschließend nummerisch weiter zu verarbeiten.

     sString = ‚2018-12-24’;

     sStringToReplace = ‚-‚;

     sReplaceString = “;

     nStrLen = long(sStringToReplace);

     i = long(sString);

     while(i > 0 & scan(sStringToReplace, sString) > 0);

          if(subst(sString, i, nStrLen) @= sStringToReplace);

               sStringBefore = subst(sString, 1, i-1);

               sStringAfter = subst(sString, i+nStrLen, long(sString));

               sString = trim(sStringBefore | sReplaceString | sStringAfter);

          endif;

          i = i-1;

     end;

     sDateFrom = SUBST(sString, 1, 8);

     nDateFrom = StringToNumber(sDateFrom);

Mehrere Benutzer per TI-Prozess und Subset löschen

Problem: Man muss oft mehrere Benutzer aus der Systemdimension }Clients löschen, um zum Beispiel alte, nicht mehr benötigte User zu entfernen.

Herausforderung: Zurzeit bietet TM1 nur eine umständliche manuelle Funktion, um einzelne Benutzer aus dem Sicherheitsbereich zu entfernen. Systemdimensionen mit einer geschweiften Klammer davor können nicht über den Dimensionsstruktur-Editor, sondern müssen durch Prozesse über entsprechende Befehle bearbeitet werden.

Lösung: Die einfachste Methode hierfür ist die Erstellung eines Prozesses mit einem Subset der Dimension }Clients als Datenquelle. Anschließend überprüft man im Metadatenbereich die User in dem erstellten Subset und löscht sie über den Befehl Clientdelete(sUser);. Dies kann noch durch Bedingungen erweitert werden, je nachdem, wie die Benutzerlöschung gesteuert werden soll.

By | 2018-12-18T16:19:13+00:00 19. Dezember 2018|Categories: BI Know-how|