Das TM1 Modell verbraucht zu viel Speicher? Die Performance des PA/TM1 Modells sollte besser sein? Eine Ursache könnte „Overfeeding“ sind – Overfeeding tritt auf, wenn Rule Feeder zu viele Cube Zellen aktivieren. Die Ursachen zu finden und zu korrigieren, kann aufwendig sein – aber erhöht die Leistung und senkt den Speicherverbrauch erheblich.
Eine Methode Overfeeding zu prüfen und zu identifizieren, zeigt Cubewise hier. Ich habe diesen Ansatz per TM1py (in einem Jupyter Notebook) wiederverwendbar umgesetzt. Die Idee ist, dass ich bei einer solchen Aufgabestellung lediglich das Jupyter Notebook gegen den TM1 Server verbinde und per Code den Check Cube erzeugen kann.
"""
Check the overfeeded cube c and get dimensions
"""
c_name = 'Sales'
c = tm1.cubes.get(c_name)
print(c.name, c.dimensions)
if c.has_rules:
print("\n#### these are the rules:\n")
print(c.rules)
Im Beispiel prüfe ich den „Sales“ Cube und zeige die Rule an. Im nächsten Schritt iteriere ich über die Dimensionen des Sales Cubes und schreibe die Rule für einen Check Cube.
"""
Create the rule by concatenating the dimension names
Following the Cubewise example resulting rule should look like
SKIPCHECK;
[] = N: IF(DB('SalesCube',!actvsbud,!region,!model,!account1,!month) = 0,1,0);
FEEDERS;
"""
d_rule = ",".join(["!" + d for d in c.dimensions])
r_line = "[] = N: IF(DB('" + c.name + "', " + d_rule + ") = 0,1,0);"
r = "SKIPCHECK;\n" + r_line + "\nFEEDERS;"
print(r)
# SKIPCHECK;
# [] = N: IF(DB('Sales', !Years,!Months,!Locations,!Products,!Measures) = 0,1,0);
# FEEDERS;
Jetzt nur noch den Check Cube erzeugen und die Rule anhängen.
"""
Create the Check Cube
"""
c_check_name = c_name + "_Overfeeding"
c_check = Cube(name=c_check_name, dimensions=c.dimensions, rules=r)
resp = tm1.cubes.create(c_check)
if resp.status_code == 201:
print("Cube created")
Fast fertig! Fehlt nur noch der Feeder im „Sales“ Cube. Dazu füge ich die Feeder Zeile an das Ende bestehende Rule an und aktualisiere den „Sales“ Cube.
"""
Last step: update rule of overfeed cube and feeder check cube:
[] => DB('SalesCube - Overfeeding',!actvsbud,!region,!model,!account1,!month);
"""
f_line = "\n[] => DB('" + c_check_name + "', " + d_rule + ");"
r_new = str(c.rules) + f_line
c_new = Cube(name=c.name, dimensions=c.dimensions, rules=r_new)
resp = tm1.cubes.update_or_create(c_new)
if resp.status_code == 200:
print("Rule added")
Natürlich sollte ich einen solchen Check Cube NICHT(!) während der Planung im P System erzeugen (und auf das Beste hoffen). Besser auf einem dedizierten Server ein repräsentatives Testszenario aufsetzen und die Performanceverbesserungen der Rule sukzessive gegen den Check Würfel testen. Ich behaupte, wenn du bis hier her gelesen hast, weißt du das 😉
Ich empfehle meinen Kunden regelmäßig die Performance und speziell den RAM Verbrauch von IBM Planning Analytics TM1 Modelle zu prüfen. Idealerweise verankert man einige automatisierte Mechanismen, um die wichtigsten Indikatoren stets zu tracken und Veränderungen kurzfristig zu identifizieren.
P.S.: lass mich doch kurz wissen, wieso du nach diesem Thema gesucht hast hier oder per LinkedIn – danke!
Sie suchen Unterstützung für Ihr IBM Planning Analytics TM1 Projekt?