Python Funktion für die Abfrage von BI Daten

Business Intelligence Daten via Python abfragen

Betriebsart

Cloud Abo

|

ON-PREMISES

Module

Leistung & CRM

Budget & Teilprojekt

Fremdkosten

Ressourcenplanung

Business Intelligence

Erstellt: 02.05.2025
Aktualisiert: 02.05.2025 | Python Funktion ab Vertec 6.8

Ab Vertec 6.8 können die Zahlen aus dem Business Intelligence Modul (BI) auch ausserhalb der BI Ansichten genutzt werden, zum Beispiel in Listen oder Berichten. Damit können ohne Performanceeinbussen auch komplexe Berechnungen angezeigt werden, da auf die vorberechneten BI Zahlen zugegriffen wird.

Dafür gibt es die Python Funktion:

 vtcapp.bigetdata(source, dimensions, measures, from, till, currency=None)
source

Als source kann ein einzelnes Objekt oder eine Liste von Objekten angegeben werden, für welche die BI Daten gelesen werden sollen. In diesem Fall werden nur die Werte berücksichtigt, die zu diesen Objekten gehören.

Falls source None ist, werden alle vorhandenen Daten im Zeitintervall berücksichtigt.

dimensions   

Hier werden die gewünschten Dimensionen als Liste angegeben.

Im Gegensatz zur BI Oberfläche werden die Werte bei Angabe von mehreren Dimensionen nach diesen gruppiert. Wird beispielsweise ["Projekt", "Projektbearbeiter"] übergeben, dann resultiert eine Ergebniszeile für jede vorkommende Kombination von Projekt und Projektbearbeiter.

Folgende Werte können übergeben werden:

  • Für eine einfache Dimension den Klassennamen (String)
  • Für eine Dimension mit Rolle ein Tuple mit dem Namen der Dimension und dem Klassennamen mit Dimensionsindex (Reihenfolge), z.B.:

    ("Projektleiter", "Projektbearbeiter_1")
    ("Bearbeiter", "Projektbearbeiter_2")
  • Für eine Zeit-Dimension den string Wert "Month". Ist bei den Kennzahlen mindestens ein Stichtagwert dabei, dann muss die Zeit-Dimension ("Month") in den Dimensions vorhanden sein, sonst gibt es einen Fehler.
  • Für eine berechnete Dimension ein Tuple bestehend aus dem Namen der berechneten Dimension, dem Klassennamen sowie einer OCL Expression: (<name>, <classname>, <OCL expression>).

    Die OCL Expression wird auf den Ergebnisdimensionen ausgewertet und führt zum eigentlichen Ergebnis der berechneten Dimension (z.B. für Auswertung nach Kunden eines Projekts).

  • Für eine Ordnerprojektion ein Tuple bestehend aus dem Namen der Dimension, dem Klassennamen sowie dem Ordnerobjekt, dessen Subordner die dargestellten Dimensionen darstellen: (<name>, <classname>, <ordner>).
measures   

Eine Liste von BI Kennzahlen

Die Liste kann entweder als String-Liste mit den Namen der Measures oder als Liste von Measure-Objekten übergeben werden.

from, till

Date values, welche den Start- bzw. Endpunkt der Auswertung bezeichnen.

Wird None angegeben, dann ist Start bzw. Ende offen.

currency

Optional. Währungskürzel oder ein Währungsobjekt aus Vertec. Gibt die Währung an, in der die Daten ausgegeben werden sollen. 

Nur notwendig, wenn währungsbehaftete Daten (Betrag, Ansatz) ausgegeben werden.

Wird keine currency angegeben, wird die Leitwährung verwendet.

Der Rückgabewert von bigetdata() ist ein Hilfsobjekt mit folgenden Methoden:

get_dimensions()    
Gibt eine Liste aller (gefundenen) Dimensionstupel zurück.
get_value(dimension_tuple, measure_name, default_value=0)

Gibt den Wert einer Kennzahl für ein Dimensionstupel zurück.

  • dimension_tuple: Dimensionstupel. Die Dimensionen können mit der Methode get_dimensions() ermittelt werden. Wird nur eine Dimension verwendet, kann anstelle des Tupels auch nur das Dimensionsobjekt übergeben werden.
  • measure_name: Interner Name der Kennzahl, die ermittelt wird.
  • default_value: Optional. Falls die Kennzahl für das übergebene Dimensionstupel keinen Wert hat, wird standardmässig 0 angezeigt. Dieser Parameter kann dazu verwendet werden, einen anderen Wert in die Zelle zu schreiben, z.B. None für eine leere Anzeige.

Für die Verwendung dieser Python Funktion ist ein lizenziertes Business Intelligence Modul vorausgesetzt, ansonsten erscheint eine Fehlermeldung.

Beispiele

Die folgenden Beispiele können Sie im Script Editor laufen lassen. Sie geben jeweils das Resultat im Ausgabefenster aus und sollen Ihnen helfen, den Mechanismus zu verstehen.

Einfaches Beispiel mit einer Dimension und einer Kennzahl
projects = vtcapp.currentlogin().evalocl("eigprojekte->select(aktiv)")
result = vtcapp.bigetdata(projects, ["Projekt"], ["FeesExt"], None, None)

for project in projects:
    # standardmässig "0", wenn es für eine Kennzahl keinen Wert gibt
    print("Honorar: {}".format(result.get_value(project, "FeesExt")))

    # alternativ kann man einen default Wert angeben, hier None
    print("Honorar: {}".format(result.get_value(project, "FeesExt", None)))
Beispiel mit Dimensionen und Rollen
projects = vtcapp.currentlogin().evalocl("eigprojekte->select(aktiv)")
dimensions = [
  ("Projektleiter", "Projektbearbeiter_1"),
  ("Bearbeiter", "Projektbearbeiter_2")
]
measures = ["MinutesInt"]
result = vtcapp.bigetdata(projects, dimensions, measures, None, None)

for key in result.get_dimensions():
    text = "Projektleiter {}, Bearbeiter {}\nAufwand {}".format(
            key[0],
            key[1],
            result.get_value(key, "MinutesInt"))
    print(text)

 

Netherlands

United Kingdom