27. und 28. April 2016 Schloss Garath | Düsseldorf Das OLAPLINE-Anwendertreffen Das Anwendertreffen ist unser Jahreshöhepunkt. Einmal im Jahr schaffen wir den Anlass, Anwender, Partner, Repräsentanten der IBM und alle OLAPLINER zu einem hochkarätigen Erfahrungsaustausch zusammenzubringen. Es erwarten Sie interessante Vorträge, überraschende Detaillösungen und angeregte Diskussionen. Unser Anwendertreffen ist Networking mit Weiterbildungscharakter. Wir würden uns freuen, Sie auf Schloss Garath begrüßen zu dürfen! Herzlich Willkommen! TM1-Rules Kalkulation, Rechteverwaltung, Picklisten und Drill Tobias Kubitz, Vitalij Rusakovskij Einordnung der Schulungsteilnehmer: 1. Anfänger => keine Rules-Erfahrungen 2. Fortgeschrittene => existierende Rules angepasst und einfache Rules erstellt 3. Profis => Erstellung komplexer Rules Inhalt 1. 2. 3. Grundlagen Anwendungsgebiete Komplexere Anwendungsfälle 1. Grundlagen 1. • Regelprogrammierung => Berechnung auf Datenräumen • Echtzeitberechnung (on demand) • Berechnungen jenseits (+) und (-) (Hierarchiegewichtungen) • Berechnungen über mehrere Dimensionen und Würfel hinweg • Überschreiben der Konsolidierungswerte möglich • Achtung: zu viele oder aufwendige Rules können auch zu langen Ladezeiten von Views führen Grundlagen Prinzipieller Aufbau Definition Ziel Datenraum Formales: [ ‘Def‘ ] = 10; [ ‘Def‘ ] = N: 5; [ ‘Def‘ ] = N: [‘Menge‘] * [‘Preis‘]; [ ‘Def‘ ] = N: [ ‘Menge‘ ] * 100; [ { ‘Def1‘, ‘Def2‘ } ] = [ ‘Menge‘ ] * [ ‘Preis‘ ]; [ Dim1: ‘Def‘ ] = N: [‘Menge‘] * [ ‘Preis‘]; [ ‘Def‘ ] = N: DB ( Cube, !Dim1, ‘2015‘, !Dim3 ); Formel Eine Rule ist immer gültig für einen Cube Holen und Berechnen der Werte aus einem oder mehreren Cubes Kurz- vs. Langform der Rule (DB vs. []) Reihenfolge der Rules spielt eine wichtige Rolle (erste Rule von oben gesehen, speziell zu generell) Für die Performance in größeren Cubes: Skipcheck (beschleunigter Konsolidierungsalgorithmus) und Feeder 1. Grundlagen Feeder Formales: [ ‘Menge‘ ] => [ ‘Umsatz‘ ]; Element feedert Umsatz: nur wenn ‘Menge‘ <> 0 Primär relevant für Nullwertunterdrückung und korrekte Konsolidierung „Feeder“ markiert per Rule zu berechnende Zellen für die TM1 Engine (sparse density Algorithmus) Mit jedem Speichern der Rule werden neue Feeders gesetzt, bereits vorhandene bleiben bestehen (Achtung: RAM Verbrauch) Bei TM1 Server Neustart werden alte Feeders gelöscht, wenn Persistent Feeder deaktiviert sind Ab 10.2.0: PersistentFeeders in tm1s.cfg standardmäßig auf „True“ 1. Grundlagen Syntax Zeichen Bedeutung Beispiel # # hier fängt der Kommentar an Kommentierung Muss an erster Stelle der Zeile stehen @= Vergleich von Textelement IF (!Month @= ‘Jan‘); ; Zeilenende Jede Zeile muss mit ";" abgeschlossen werden | (Pipe) Entspricht "&" in Excel Var1 = 'hallo' | 'User'; Ergibt für Var1: 'halloUser' & UND IF (!Month @= 'Jan‘ & !Year @= '2013', ...,...); % ODER IF (!Month @= 'Jan‘ % !Month @= 'Feb'); ' Textzeichen Var1 = 'hallo'; 1. Grundlagen Häufige Funktionen Funktion Bedeutung / Beispiel DB Liest Daten aus einem Würfel aus DELET Gibt das Ergebnis zurück, nachdem bestimmte Zeichen gelöscht wurden SUBST Schneidet Teilstring aus (vgl. "Teil" in Excel) ELISANC Prüft, ob ein Element unter einem anderen hängt DIMIX Liest den Index eines Elements aus DIMNM Liest aus dem Index ein Element aus CONTINUE Lässt Zelle frei für nächste Rule STET Blockiert die Zelle für Rules STR Macht aus Zahl Text NUMBR Macht aus Text eine Zahl Komplette Übersicht und alle Details im TM1 Referenz Handbuch (Server Explorer=> Hilfe) 1. Grundlagen 2. Anwendungsgebiete • Währungsumrechnung • Quoten • Umlagen & Verteilungen • Umsatz, Produktionsplanung (Menge * Preis) • Sekundärverrechnung • Konsistenzprüfungen • Berechtigungen • Picklist (Auswahllisten) • Drill 2. Anwendungsgebiete 3. Komplexere Anwendungsfälle 3.1 Berechtigungen 3.2 Picklist 3.3 Drill 3.4 Spezialtechniken 3. Komplexere Anwendungsfälle 12 3.1 Berechtigungen • • • Auf folgenden Ebenen können Berechtigungen gesetzt werden: Cubes, Dimensionen, Elemente, Zelle, Anwendung, Prozesse Security Rules müssen für die entsprechenden System Cubes angelegt werden (z.B. }CubeSecurity oder }Applications) => Rechtsklick auf das jeweilige Objekt und Sicherheit => Sicherheitszuweisung Es sind immer String Rules erforderlich und es müssen immer bestimmte Schlüsselwörter als Resultat erscheinen (z.B. ‘READ‘, ‘WRITE‘, ‘NONE‘) Beispiel anhand von Element Security der Dimension Jahre: [] = S: IF (ATTRS(‘Jahre‘, !Jahre, ‘aktJahr‘) @= ‘aktiv‘, ‘WRITE‘, CONTINUE); [‘Accounting‘] = S: ‘WRITE‘; [] = S: ‘READ‘; • Achtung: Security Refresh erforderlich 3. Komplexere Anwendungsfälle 3.2 Picklist • • • • Zu vergleichen mit der Gültigkeitsliste in Excel Sie gelten auf Zellen in Cubes 2 Möglichkeiten der Definition: }Picklist_[Cubename] (Rechtsklick auf den Cube => Auswahllistencube erstellen Attribut ‚picklist‘ erstellen funktionieren auf allen Oberflächen: View, Active Form, TM1Web • • Ausnahme: TI setzt sich über die Einschränkung der Picklist hinweg Picklistcube ist ein Steuerungscube, der manuell nicht löschbar ist (ggf. per TI) 3. Komplexere Anwendungsfälle Picklist Typen Fall 1: Eine statische Liste [ ] = s: ‘static:erfolgreich:nicht erfolgreich‘; [ ] = s: ‚static: : erfolgreich:nicht erfolgreich‘; Fall 2: Elemente einer Dimension: [ ] = S: ‘dimension: Zeilen‘; [ ] = S: ‘dimension:‘| !}Dimensions ; Fall 3: Elemente eines Subsets: [ ] = S: ‘subset: Zeilen: z1_z20 ‘ ; [ ] = S: ‘subset: Monate:‘| !Zeit‘; 3. Komplexere Anwendungsfälle Picklist Typen Fall 4: bedingte Picklist mit einem statischen und einem dynamischen Subset: [ ] = S: ( 'Subset: LH_Flotte:' | IF ( DB ( '}ElementAttributes_LH_Flotte', !LH_Flotte, 'Bezeichnung' ) @= 'LH Flotte Gesamt', 'LH_Flotte_Lufthansa_', IF ( DB ( '}ElementAttributes_LH_Flotte', !LH_Flotte, 'Bezeichnung' ) @= 'Swiss Airlines', 'LH_Flotte_L', 'nElem_Lufthansa' ) ) ); 3. Komplexere Anwendungsfälle 3.3 Drill • • Drill wird für eine Verknüpfung einer Zelle eines Cubes mit weiteren Daten genutzt 2 Möglichkeiten: TM1 View oder SQL Daten • • Wird in Verbindung mit einem Drillprozess verwendet, der die Details spezifiziert Rule und Prozess werden unter Steuerungsobjekten abgelegt ( }Drill_ ) Beispiele: • • • • Sprung aus einer View mit Gesamtsumme auf die View mit entsprechenden Werten Ausführen eines Prozesses für die Erstellung / Bearbeitung einer Dimension Sprung in die View zur Bearbeitung einer weiteren Liste SQL Detaildaten anzeigen, die in diesem Detailgrad im TM1 Cube nicht vorhanden sind 3. Komplexere Anwendungsfälle Vorgehen zum Anlegen eines Drills 1. Drill Prozess erstellen Rechtsklick auf den Cube => Drill => Drillprozess erstellen 2. Drill Rule erstellen Rechtsklick auf den Cube => Drill => Drillzuweisungsrule erstellen [] = S: ‘Namen des Drill Prozess ohne }Drill_‘; 3. Komplexere Anwendungsfälle 3.4 Spezialtechniken - Konditionale Feeder (evtl. CubeProcessFeeders im TI erforderlich) Bedingte Konsolidierung (1. auf ein neues Element nur gewisse Werte nach einer definierten Logik übernehmen und diese dann über die TM1 Konsolidierungslogik) Feederung über eine spezielle Dimensionskombination in einem eigenen Feeder Würfel 3. Komplexere Anwendungsfälle Vielen Dank für Ihre Aufmerksamkeit