FKT Set

Aus CoPlanner 11
Version vom 14. April 2025, 16:56 Uhr von T.auer (Diskussion | Beiträge) (beispiel für fkt_setbyexpression)

Zur Navigation springenZur Suche springen

Funktion

FKT_SET('<Bedingung 1>', ..., '<Bedingung n>')

FKT_SET dient dazu, Elemente aus einer Dimension auszuwählen, bzw. eine Dimension einzuschränken (ähnlich wie dies bisher über RuleFilter gelöst werden konnte).

Der Aufbau der Syntax ist dabei an Funktionen wie FKT_SUM oder FKT_AGG orientiert.

Parameter Beschreibung
Bedingung 1 bis n Jede Bedingung besteht aus 3 Teilen
  • dem einzuschränkenden Attribut
  • einem Operator
  • und der Einschränkung selbst

Beispiel: COPSYS_ID me @Session_Unternehmen_ID@.

Das einzuschränkende Attribut bezieht sich immer auf die Dimension auf der das FKT_SET gesetzt wird. Daher sind diese nur mit dem Namen anzugeben. Falls eine Dimension als Attribut mehrfach in der Dimension vorkommt, dann kann durch Angabe des Alias oder des LookUp-Appendix die gewünschte Dimension angegeben werden. Wird kein Appendix angegeben und kein Alias verwendet, wird immer die LookUp-Dimension _1 genommen. Anzugeben wäre dies z.B.: Unternehmen_1 me @Session_Unternehmen_ID@

Der Operator ist mit einem Vergleichstyp anzugeben, wobei folgende erlaubt sind:

  • me+under
  • me
  • <>
  • >
  • >=
  • <
  • <=

Die Einschränkung = wird bei Dimensionen immer als me interpretiert und ist nur aus Kompatibilitätsgründen enthalten.

Die Einschränkung selbst kann jeder Datenpfad, Variable oder Funktion sein, die eine gültige COPSYS_ID liefert.

Hinweis  Die Bedingungen können sich dabei nur auf in der Dimension vorhandene Lookupdimensionen beziehen. Auf Dimensionsattribute(wie z. B. ein in die Dimension eingefügtes Dezimal-Measure) kann nicht direkt gefiltert werden.

Diese Funktion gehört zu den serverseitigen Funktionen.

Ergebnis

Liefert alle Elemente, auf welche die Bedingung(en) zutreffen.

Anwendungsmöglichkeiten

Normalerweise kann - mit kleineren Ausnahmen - FKT_SET überall angewendet werden. Die gängigsten Anwendungsfälle sind ReadOnlyElementsExpression oder AvailableElementsExpression in Matrixmasken.

Beispiele

Hinweis  In den hier aufgeführten Beispielen bzw. auch bei vergleichbaren Funktionen in CoPlanner handelt es sich bei einer Schreibweise wie z.B. Einwohnerzahl != ' + @Anwendungseigenschaft@ oder COPSYS_ID !< 2 entgegen allgemein gängiger Konventionen NICHT um ein "Ungleich" oder einen Negationsoperator. Das "!" wird in CoPlanner in manchen Fällen zur Kennzeichnung des Vergleichoperators innerhalb bestimmter Expressions benötigt. Es sind hier sowohl Beispiele aufgeführt, in denen das "!" benötigt wird und andere Fälle in denen dies nicht notwendig ist.

Beispiel: Einwohnerzahl größer als 10.000

Beispielaufbau

Man hat eine einfache Dimension Regionen, die wie folgt aussieht:

Die einzelnen Orte der Bezirke haben dabei ein Attribut "DIM_Einwohnerzahl" das angibt, ob die Orte mehr als 10.000 Einwohner haben.

  • Hinweis: Es handelt sich hierbei um eine Lookupdimension, nicht um Wertfeld wie z. b. ein Dezimalattribut

Zusätzlich definiert man eine Anwendungseigenschaft "EinwohnerZehntausend" für mehr als 10.000 Einwohner auf diese Lookupdimension. (Anwendungseigenschaft auf Dimension: DIM_Einwohnerzahl: Dimensionselement >10.000)


Wenn man jetzt in einer einfachen Maske die Regionen auf die Achse gibt und folgenden Ausdruck bei AvailableElementsExpression der Dimension angibt:

FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@)

so erhält man folgendes Ergebnis auf der Achse:


Es kann auf Session-Variablen und Anwendungseigenschaften zugegriffen werden, und gleich wie in FKT_SUM... auf Filter in der Maske.

Anwendung der Funktion erfolgt z.B. bei Matrixmasken in der ReadOnlyElementsExpression oder AvailableElementsExpression.


Verwandte Funktionen

Funktioniert wie FKT_SET, liefert aber zusätzlich einen Teilbaum (bis zu einem gemeinsamen Parent)

Beispielexpression: FKT_SPARSESUBTREE('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@) oder FKT_SPARSESUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))

Im oben beschriebenen Beispiel erhält man folgendes Ergebnis:


Funktioniert wie FKT_SET, liefert aber zusätzlich alle Parentelemente bis zum Wurzelknoten

Beispielexpression: FKT_FULLSUBTREE('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@) oder FKT_FULLSUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))

Im oben beschriebenen Beispiel erhält man folgendes Ergebnis:


  • FKT_COMMONPARENTSUBTREE

Funktioniert wie FKT_SET, liefert aber zusätzlich ein gemeinsames Element als Wurzelknoten (damit dieses z.B. im Filter ausgewählt werden kann um alle zu wählen)

Beispielexpression: FKT_COMMONPARENTSUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))

Im oben beschriebenen Beispiel erhält man folgendes Ergebnis:


Liefert die gruppierten Elemente der angegebenen Spalte in der angegebenen Tabelle. Um auch diese Daten als Sparsetree bzw. Fulltree aufzubauen, ist eine Verschachtelung der Expressions möglich.

(siehe Beispiele)


Gesammelte Auflistung der Expressions für die oben angeführten Beispiele
  • FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@)
  • FKT_FULLSUBTREE('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@)
  • FKT_FULLSUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))
  • FKT_SPARSESUBTREE('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@)
  • FKT_SPARSESUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))
  • FKT_COMMONPARENTSUBTREE(FKT_SET('DIM_Einwohnerzahl != ' + @EinwohnerZehntausend@))

Weitere einfache Beispiele

  • Root-Element und "keine Zuordnung" in der Dimension unterdrücken
FKT_SET('COPSYS_ID > 2')
  • Bestimmte einzelne Elemente über deren COPSYS_ID aus einer Dimension wegfiltern
FKT_SET('COPSYS_ID <> 938797822888410908','COPSYS_ID <> 637797822088410900')
  • Nur auf ein bestimmtes Element und dessen Children filtern
FKT_SET('COPSYS_ID me+under 638797822088410875')

Komplexere Abfragen

Für komplexere Abfragen gibt es noch die Funktion FKT_SetByExpression, die es ermöglicht, eine Menge mit boolschen Ausdrücken abzufragen.

Anhand eines einfachen Beispiels: wenn man in der Dimension "Regionen" nur das Root-Element und alle Blattelemente als Ergebnis haben möchte, so geht dies mit folgender Abfrage:


FKT_SetByExpression('([COPSYS_ID] = 1) OR (FKT_DimHasChildren("Regionen", [COPSYS_ID]) = false)')

damit dies funktioniert, muss man im Ausdruck 2 unterschiedliche Hochkomma verwenden.