Objektverwaltung:Formeln: Unterschied zwischen den Versionen

Aus CoPlanner 11
Zur Navigation springenZur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(30 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
__TOC__
___TOC__
Eine Formel ist ein Objekt, dass zumindest eine Quell- und eine Zieltabelle besitzt. Diese können zwar auch dieselbe Tabelle sein, grundsätzlich unterscheiden sich Formeln von berechneten Feldern (siehe [[Framework:Tabellen#Tabellendesigner|Tabellendesigner]]) durch einen erweiterten Verwendungsgrad, komplexere Anwendungsmöglichkeiten und einer meist höheren Ausführungszeit.


==Formel-Designer==
Eine '''Formel''' ist ein Objekt, das mindestens eine Quell- und eine Zieltabelle besitzt. Quell- und Zieltabelle können identisch sein. Im Vergleich zu berechneten Feldern (siehe [[Framework:Tabellen#Tabellendesigner|Tabellendesigner]]) bieten Formeln einen deutlich größeren Funktionsumfang, komplexere Einsatzmöglichkeiten und in der Regel eine höhere Ausführungszeit.


===Verknüpfungen===
==Verknüpfungen==


[[image:Fw_Formeln.jpg|thumb|center|Framework, Formeln]]
[[image:Fw_Formeln.jpg|thumb|center|Framework, Formeln]]


===Aktiv===


'''Aktiv'''
Ist diese Option aktiviert, wird die Formel ausgeführt, sobald ein Datensatz in der Quelltabelle gespeichert wird. Das Speichern kann durch eine Benutzereingabe oder durch eine andere Formel ausgelöst werden, deren Zieltabelle die Quelltabelle dieser Formel ist.


Die Formel wird ausgeführt, wenn ein Datensatz in der Quelltabelle gespeichert wird. Dieses Speichern wird entweder durch eine User-Eingabe und dem Klick auf den Speicher-Button ausgelöst, oder aber durch eine andere Formel, die als Zieltabelle obige Quelltabelle eingestellt hat. Eine weitere Möglichkeit aktive Formeln ausführen zu lassen, ist per [[Framework:Makros|Makrobefehl]] „Tabellensätze dieses Plans neu rechnen“.
Alternativ können aktive Formeln auch über den [[Framework:Makros|Makrobefehl]] '''„Tabellensätze dieses Plans neu rechnen“''' ausgeführt werden.


===Bei Makro rechnen===


'''Bei Makro rechnen'''
Die Formel wird ausgeführt, wenn sich die Anwendung im MakroMode befindet. Der MakroMode wird mit dem Makrobefehl '''„Session Parameter ändern“''' und dem Parameter '''MakroMode=1''' aktiviert. Mit '''MakroMode=0''' wird wieder in den Benutzermodus gewechselt.


Die Formel wird ausgeführt, wenn man im MakroMode ist. Man wechselt in diesen MakroMode mit dem Makro-Befehl „Session Parameter ändern“, mit dem Parameter „MakroMode=1. Mit dem Parameter „MakroMode=0“ wechselt man wieder in den User-Modus.
===Formelart===


Die Formelart bestimmt die Ausführungslogik einer Formel. Es stehen folgende Typen zur Verfügung:


'''Formelart'''
:*'''Row''' (ehem. ''Single'')
: Ein Quelldatensatz erzeugt einen neuen Zieldatensatz.


Bezieht sich auf die Ausführungslogik der Fromel, wobei folgende Typen unterschieden werden:
:*'''Same'''
: Die Formel schreibt in denselben Datensatz. Dieser Typ eignet sich beispielsweise zur Berechnung oder Aktualisierung von Feldern innerhalb desselben Datensatzes.


:*Row (ehem. Sinlge): Ein Datensatz erzeugt einen anderen Datensatz
:*'''SourceRow''' (ehem. ''Quellsatz'')
:*Same: Ein Datensatz rechnet auf sich selbst, beschreibt also bspw. ein Feld des selben Datensatzes
: Kann ausschließlich in Kombination mit einer Formel vom Typ '''Row''' verwendet werden. Es werden keine eigenen Datensätze erzeugt. Stattdessen werden Änderungen auf den Quelldatensatz der zugehörigen Row-Formel zurückgeschrieben.
:*SourceRow (ehem. Quellsatz): Kann nur in Kombination mit einer Formel vom Typ Row verwendet werden. Die Formel erzeugt keine eigenen Datensätze, sondern schreibt ihre Werte immer auf den Quelldatensatz der Row-Formel. Z.B.: Eine Row-Formel auf Tabelle tb_A erzeugt einen neuen Datensatz in Tabelle tb_B. Manuelle Änderungen direkt in Tabelle tb_B können auf die erzeugende Zeile von Tabelle tb_A mittels SourceRow-Formel zurückgeschrieben werden. (Eine Formel vom Typ „Row“ würde immer eine weitere Zeile anlegen)
:
:*Group: Mehrere Datensätze werden zu Zieldatensätzen gruppiert. Die Berechnung wird auch bei vielen Änderungen in  der Quelltabelle nur einmal gestartet.
:'''Beispiel:'''
:*Makro: Lässt es zu, Makros bei Änderungen einer Tabelle anzustarten. Dies ermöglicht die Einbindung von Möglichkeiten der Servermakros in ein durch Datenänderungen getriggertes Rechenmodell.
: Eine Row-Formel erzeugt aus einem Datensatz der Tabelle '''tb_A''' einen neuen Datensatz in '''tb_B'''. Änderungen, die direkt am Datensatz in '''tb_B''' vorgenommen werden, können über eine SourceRow-Formel auf den ursprünglichen Datensatz in '''tb_A''' zurückgeschrieben werden. Eine weitere Row-Formel würde dagegen einen zusätzlichen Datensatz erzeugen.
:*Aggregation (ehem. Aggregat): Mehrere Datensätze werden zu einem Datensatz zusammengefasst. Die Ausführung erfolgt pro geänderter Quellzeile. In den meisten Fällen ist eine Group-Formel effizienter. Aufgrund von logischen, nicht lösbaren Problemen wird dieser Typ in zukünftigen Versionen wahrscheinlich nicht mehr enthalten sein. Alle logischen Anforderungen sollten durch andere Möglichkeiten, insbesondere Group-Formel ersetzt werden.
:*Update: Es können mehrere Datensätze zu Zieldatensätzen gruppiert werden. Es werden nur schon vorhandene Datensätze upgedatet und keine neuen erstellt.  


'''Typed calculations'''
:*'''Group'''
: Mehrere Quelldatensätze werden zu Zieldatensätzen gruppiert. Auch wenn mehrere Datensätze der Quelltabelle geändert werden, wird die Berechnung nur einmal ausgeführt.
:<small>''Hinweis: Group-Formeln werden teilweise auch als Mengenformeln bezeichnet.''</small>


Wenn TypedCalculations auf true ist, werden Ausdrücke schon beim Laden des Rechenwerks in echte Codefunktionen kompiliert. Diese sind bei der Ausführung wesentlich schneller, als das bisherige ersetzten von Zeichenketten. Parameter dieser Codefunktionen haben nun eindeutige Datentypen, daher der Name „TypedCalculations“. Die Verwendung dieser Parameter ist nun einheitlicher und eindeutiger (z.B.: Zeichenketten in Hochkommas), allerdings ergeben sich dadurch einige wenige Änderungen in bestehenden Formeln. (Nur bei Verwendung der Option)
:*'''Makro'''
: Ermöglicht das Starten von Makros bei Änderungen an einer Tabelle. Dadurch können Funktionen von Servermakros in ein durch Datenänderungen ausgelöstes Berechnungsmodell integriert werden.


Die Option muss bei Mengenformeln und Updateformeln verwendet werden und kann bei Aggregatformeln nicht verwendet werden. Es wird empfohlen, alle neu angelegten Formeln mit TypedCalculations auf true anzulegen und bestehende Formeln ebenfalls umzustellen.  
:*'''Aggregation''' (ehem. ''Aggregat'')
: Mehrere Quelldatensätze werden zu einem Zieldatensatz zusammengefasst. Die Ausführung erfolgt für jede geänderte Quellzeile. In den meisten Anwendungsfällen ist eine Group-Formel effizienter. Aufgrund konzeptioneller Einschränkungen wird dieser Formeltyp künftig voraussichtlich nicht mehr weiterentwickelt. Neue Anforderungen sollten nach Möglichkeit mit Group-Formeln umgesetzt werden.
 
:*'''Update'''
: Mehrere Quelldatensätze können zu Zieldatensätzen gruppiert werden. Es werden ausschließlich bereits vorhandene Zieldatensätze aktualisiert; neue Datensätze werden nicht angelegt.
 
===[[Framework:Formeln:WarumTyped|Typed calculations]]===
 
Ist '''Typed Calculations''' aktiviert, werden Ausdrücke bereits beim Laden des Rechenwerks in echte Codefunktionen kompiliert. Dadurch werden Formeln deutlich schneller ausgeführt als bei der bisherigen zeichenkettenbasierten Auswertung.
 
Da die Parameter dieser Codefunktionen über eindeutige Datentypen verfügen, ist ihre Verwendung konsistenter und eindeutiger (z.&nbsp;B. müssen Zeichenketten in Hochkommas angegeben werden). Dadurch ergeben sich bei bestehenden Formeln in einigen Fällen notwendige Anpassungen. Diese betreffen ausschließlich Formeln, bei denen die Option '''Typed Calculations''' aktiviert wird.
 
Die Option ist für Group- und Update-Formeln verpflichtend und kann bei Aggregation-Formeln nicht verwendet werden.
 
Es wird empfohlen, neue Formeln grundsätzlich mit aktivierten '''Typed Calculations''' anzulegen und bestehende Formeln schrittweise umzustellen.
 
Eine Erläuterung, warum Zeichenketten in Typed Expressions anders aufgebaut werden müssen, finden Sie auf [[Framework:Formeln:WarumTyped|dieser Seite]].
 
'''Beispiel für die Umstellung von Formeln mit ''FKT_GetRecord'' und ''FKT_Aggregat'''''


{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;'''Umschreiben von Formeln mit FKT_GetRecord und FKT_Aggregat bei Verwendung von TypedCalcultaions'''<br>
Alte Schreibweise:
Alte Schreibweise:
FKT_GetRecord(Kurse_TBL_Standard.Kurs, Unternehmen !me [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID], Zeit !me [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID])
 
FKT_GetRecord(Kurse_TBL_Standard.Kurs, Unternehmen !me [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID], Zeit !me [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID])


Neue Schreibweise:
Neue Schreibweise:
FKT_GetRecord(„Kurse_TBL_Standard.Kurs“, "Unternehmen !me  " + [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID],"Zeit !me " + [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID]  )
|}


FKT_GetRecord("Kurse_TBL_Standard.Kurs", "Unternehmen !me " + [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID], "Zeit !me " + [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID])


{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Wenn Typed calculations aktiviert sind, werden FKT_CIF und FTK_CHOOSE nicht mehr unterstützt.
|}


Bei aktivierten Typed Calculations steht außerdem die '''neue Funktion [[FKT_TimeDimDatePart|FKT_TimeDimDatePart]]''' zur Verfügung.


{| {{Bausteindesign1}}
{{Hinweis|Text='''Boolean-Felder''' werden bei aktivierten Typed Calculations nicht mehr mit 0 oder -1 abgefragt, sondern mit False bzw. True.}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Wenn Typed calculations aktiviert sind, gibt es die neue Funktion FKT_TimeDimDatePart
FKT_TimeDimDatepart('M',[tbPers.Zeit_1.COPSYS_ID])
Parameter: Y,Q,M & D (als string), Keine Überprüfung ob gültiges Datum, Keine Wirtschaftsjahrfunktionalität (hier eigentlich nie gewünscht)
|}




'''Quelltabelle'''
{{Hinweis|Text=Wenn Typed Calculations aktiviert sind, werden '''FKT_CIF''' und '''FKT_CHOOSE''' nicht mehr unterstützt.<br>
Beispiel für das Ersetzen von FKT_CIF bei einem Boolean-Feld:


Jene Tabelle oder Dimension, auf der die Berechnung basiert (bei der Group- und Update-Formel können unter "Tabellen" weitere angegeben werden).
Alte Schreibweise:
<pre>FKT_CIF('[TBL_Example.LastName]' = '' OR '[TBL_Example.FirstName]',0,-1)</pre>


Neue Schreibweise:
<pre>IIF([TBL_Example.LastName] = '' OR [TBL_Example.FirstName] = '0',False,True)</pre>}}


'''Zieltabelle'''


Jene Tabelle oder Dimension, in welcher ein Feld oder Lookup geschrieben werden soll.
===Quelltabelle===


Die Quelltabelle bzw. Dimension bildet die Grundlage für die Berechnung. Bei Group- und Update-Formeln können im Register '''Tabellen''' zusätzlich weitere Quelltabellen angegeben werden.


'''Execution Order'''
===Zieltabelle===


Reihenfolge der Abarbeitung. Ist dann zu verwenden, wenn mehrere Formeln dieselbe Quelltabelle verwenden, und die Reihenfolge der Berechnungen wichtig ist. Bspw. soll in der Erfolgsplanung jene Formel die den Ust-Betrag mittels dem UST-Satz errechnet, vor der Formel ausgeführt worden sein, die diesen Ust-Betrag dann weiter in die Zahllast-Ermittlung rechnet.
Die Zieltabelle bzw. Dimension in welche das Berechnungsergebnis geschrieben wird.


===[[Priorität bei Ausführung|Execution Order]]===


'''Löschweitergabe'''
Die '''Execution Order''' legt die Reihenfolge fest, in der Formeln ausgeführt werden. Sie sollte verwendet werden, wenn mehrere Formeln dieselbe Quelltabelle verwenden und die Reihenfolge der Berechnungen relevant ist.


Vorgänger
Beispielsweise sollte in einer Erfolgsplanung zunächst die Formel ausgeführt werden, welche den Umsatzsteuerbetrag anhand des Umsatzsteuersatzes berechnet. Erst anschließend sollte eine nachgelagerte Formel diesen Betrag für die Ermittlung der Zahllast weiterverarbeiten.


Wenn aktiv, dann werden beim Löschen eines Datensatzes der aus einer Formel generiert wurde, auch die dazugehörigen Quelldatensätze gelöscht. Dieses Verhalten ist nur in Ausnahmefällen gewünscht.
===Löschweitergabe===


Nachfolger
;Vorgänger
: Ist diese Option aktiviert, werden beim Löschen eines Datensatzes, der durch eine Formel erzeugt wurde, auch die zugehörigen Quelldatensätze gelöscht. Dieses Verhalten wird nur in Ausnahmefällen benötigt.


Mit dieser Option werden die aus dem Quellsatz erzeugten Zielsätze automatisch gelöscht, wenn der Quellsatz gelöscht wird. Dieses Verhalten ist in den meisten Fällen gewünscht!
;Nachfolger
: Ist diese Option aktiviert, werden alle aus einem Quelldatensatz erzeugten Zieldatensätze automatisch gelöscht, sobald der Quelldatensatz gelöscht wird. Dieses Verhalten ist in den meisten Anwendungsfällen sinnvoll und wird daher empfohlen.


{| {{Bausteindesign1}}
{{Hinweis|Text=Die Löschweitergabe wirkt sich ausschließlich auf Formeln des Typs '''Single''' (Row) aus. Bei Formeln des Typs '''Same''' hat diese Einstellung keine Auswirkung, da der Datensatz selbst gelöscht wird. Bei Formeln des Typs '''Aggregation''' wird beim Löschen eines Quelldatensatzes die Formel erneut ausgeführt. Der Zieldatensatz wird jedoch nicht automatisch gelöscht, da dieser mehrere Quelldatensätze zusammenfasst.}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Die Löschweitergabe betrifft nur Formeln des Typs Single. Bei Formeln des Typs Same ist diese Einstellung wirkungslos, da der Satz selbst ja gelöscht wird. Bei Formeln des Typs Aggregation, wird beim Löschen eines Quellsatzes die Formeln ausgeführt, nicht aber der Zielsatz gelöscht, da dieser ja mehrere Quellsätze zu einem Zielsatz zusammenfasst.
|}


===Iterationstabelle===


'''Iterationstabelle'''
Mit einer Iterationstabelle kann eine Formel mehrfach mit unterschiedlichen Parametern ausgeführt werden. Die Datensätze, über die iteriert werden soll, stammen dabei aus der hier ausgewählten Tabelle. Weitere Informationen finden Sie im Abschnitt [[#Iterationen|Iterationen]].


Um eine Formel mehrfach mit verschiedenen Parametern aufzurufen, können Iterationen verwendet werden. Sollen die Elemente, über die iteriert werden sollen, aus einer Tabelle kommen, wird diese hier ausgewählt (siehe nachfolgendes Beispiel unter Iterationen).
===Tabellen, deren Änderungen diese Formel auslösen===


Standardmäßig werden Formeln durch Änderungen an ihrer Quelltabelle oder über einen Makrobefehl ausgelöst. Für jede Quelltabelle kann eine Reihenfolge der Formelausführung definiert werden. Same-Formeln werden unabhängig von dieser Reihenfolge immer zuerst ausgeführt.


'''Tabellen welche bei Änderungen diese Formel auslösen'''
Zusätzlich kann das automatische Auslösen durch Änderungen an der Quelltabelle deaktiviert werden. Dadurch lassen sich Modellierungen einfacher umsetzen, für die bisher beispielsweise der MakroMode, das Aktivieren bzw. Deaktivieren von Formeln oder eine Quelltabelle vom Typ „keine“ verwendet werden musste.


Bisher konnten Formeln nur per Makrobefehl oder durch Änderungen der Dateninhalte der Quelltabelle der Formel angestoßen werden. Pro Quelltabelle konnte eine Reihenfolge der Formelabarbeitung angegeben werden. Sameformeln werden unabhängig von der Reihenfolge immer zuerst ausgeführt.
Darüber hinaus kann eine Formel auch durch Änderungen an mehreren Tabellen ausgelöst werden. Zwischen diesen Tabellen und der eigentlichen Formel muss dabei kein technischer Zusammenhang bestehen.


Zusätzlich ist es nun aber möglich das Auslösen einer Formel durch Änderungen der Quelltabelle abzuschalten. Bisher waren komplexe Modellierungen wie Makromodus, Formeln aktivieren/deaktivieren oder Quelltabelle „keine“ notwendig.  Nun kann die Tabelle einfach abgewählt werden.
'''Beispiel:'''


Zusätzlich ist es möglich eine Formel durch Änderungen in unterschiedlichen Tabellen auszulösen. Es muss kein technischer Bezug zu den Inhalten der Formel bestehen. Z.B.: Umsatzformel wird nicht nur bei Änderungen der tb_Umsatz sondern auch bei Änderungen der tb_Zahlungsschlüssel angestoßen.
Eine Umsatzformel kann nicht nur bei Änderungen der Tabelle '''tb_Umsatz''', sondern zusätzlich auch bei Änderungen der Tabelle '''tb_Zahlungsschlüssel''' ausgeführt werden.




Zeile 111: Zeile 129:
[[image:Fw_Formeln_Bedingungen_Formeln.jpg|thumb|center|Framework, Formeln - Bedingungen & Formeln]]
[[image:Fw_Formeln_Bedingungen_Formeln.jpg|thumb|center|Framework, Formeln - Bedingungen & Formeln]]


===Zuweisungen===


===Zuweisungen===
Im oberen Bereich des Registers '''„Zuweisungen Bedingungen“''' werden die eigentlichen Inhalte einer Formel definiert. In der linken Spalte '''„Quelle“''' (bzw. '''„SUM(Quellausdruck)“''' bei Group-Formeln) wird ein Ausdruck oder Wert aus der Quelltabelle angegeben. In der rechten Spalte '''„Ziel“''' wählen Sie das Feld der Zieltabelle aus, das beschrieben werden soll.


Im oberen Teil des Registers „Zuweisungen Bedingungen“ werden nun die Inhalte einer Formel definiert. Während in der linken Spalte „Quelle“ (bzw. „SUM(Quellausdruck)“ bei Group-Formeln) eine Berechnung oder ein Wert aus der Quelltabelle stehen, wird in der rechten Spalte „Ziel“ das zu beschreibende Feld der Zieltabelle ausgewählt.
Um eine neue Zuweisung anzulegen, klicken Sie auf die obere Schaltfläche '''„Hinzufügen“'''. Über das ''''''-Symbol öffnen Sie den Editor des jeweiligen Feldes. Dort stehen Ihnen alle Felder der Quell- und Zieltabelle sowie sämtliche Funktionen, Variablen und [[Framework:Anwendungseigenschaften|Anwendungseigenschaften]] zur Verfügung.
Um meine neue Verbindung anzugeben, klicken Sie auf die obere „Hinzufügen“-Schaltfläche. Danach springen Sie mit Klick auf das …-Symbol in den Editor des jeweiligen Feldes. Dort stehen Ihnen dann alle Felder der Quell- bzw. Zieltabelle sowie alle Funktionen, Variablen und [[Framework:Anwendungseigenschaften|Anwendungseigenschaften]] zur Verfügung.


{{Hinweis|Text=<small>''Ab CoPlanner 11 Release 2 2026:''</small> Update-, Mengen- und Zeilenformeln unterstützen in Zuweisungen nun auch NULL-Werte und wandeln diese nicht mehr automatisch in 0 um. Soll ein NULL-Wert geschrieben werden, verwenden Sie den Ausdruck '''NullValue'''.}}


===Gemeinsame Lookups synchron halten===
===Gemeinsame Lookups synchron halten===


Verbindungen zwischen Quelle und Ziel werden für Wertfelder explizit durch eigene Zeilen in den Zuweisungen angegeben. Auch Dimensionen können auf diese Weise verknüpft werden – durch Anklicken des Hakens „Gemeinsame Lookups synchron halten“ werden jedoch alle Dimensionen, deren Alias-Namen zwischen Quelle und Ziel übereinstimmen, automatisch synchronisiert.
Verbindungen zwischen Quelle und Ziel werden für Wertfelder grundsätzlich über eigene Zeilen in den Zuweisungen definiert.
Felder, die nicht verknüpft sind bzw. durch diese Option verbunden werden können, werden im Ziel bei Neuanlage mit deren Standardwert versorgt.
 
Dimensionen können ebenfalls auf diese Weise verknüpft werden. Wird jedoch die Option '''„Gemeinsame Lookups synchron halten“''' aktiviert, werden alle Dimensionen, deren Aliasnamen in Quelle und Ziel übereinstimmen, automatisch miteinander synchronisiert.
 
Felder, die weder explizit zugewiesen noch automatisch synchronisiert werden, erhalten beim Anlegen eines neuen Zieldatensatzes ihren jeweiligen Standardwert.


===[[:Kategorie:Funktionen_-_serverseitig|Funktionen]]===
===[[:Kategorie:Funktionen_-_serverseitig|Funktionen]]===


Funktionen können im Formeldesigner ausgewählt werden und ermöglichen umfangreiche Berechnungen und Datenmanipulationen in Formeln. Eine Übersicht der [[:Kategorie:Funktionen_-_serverseitig|CoPlanner Funktionen]] finden Sie [[:Kategorie:Funktionen_-_serverseitig|hier]]
Funktionen können im Formeldesigner ausgewählt werden und ermöglichen umfangreiche Berechnungen sowie Datenmanipulationen innerhalb von Formeln.
 
Eine Übersicht aller verfügbaren Funktionen finden Sie unter [[:Kategorie:Funktionen_-_serverseitig|CoPlanner Funktionen]].


===Bedingungen===
===Bedingungen===


Im unteren Teil des Registers „Zuweisungen Bedingungen“ werden nun allfällige Bedingungen für die Formel definiert, das heißt die Formel wird nur angewandt, wenn bestimmte Bedingungen erfüllt sind. Im Standardmodell des CoPlanner sind zum Beispiel alle Formeln auf den Planzeitraum eingeschränkt.
Im unteren Bereich des Registers '''„Zuweisungen Bedingungen“''' definieren Sie die Bedingungen, unter denen eine Formel ausgeführt wird. Die Formel wird nur dann angewendet, wenn alle definierten Bedingungen erfüllt sind.
Um eine neue Bedingung einzufügen, klicken Sie auf die untere „Add“-Schaltfläche. Danach springen Sie mit Klick auf das …-Symbol in den Editor des jeweiligen Feldes. Dort stehen Ihnen dann alle Felder der Quell- und Zieltabelle sowie alle Funktionen, Variablen und [[Framework:Anwendungseigenschaften|Anwendungseigenschaften]] zur Verfügung. Zwischen den beiden zu vergleichenden Werten wählen Sie bitte einen passenden Vergleichsoperator aus und definieren am Ende einen Vergleichstyp (Numerisch, Text oder Datum). Ist die angegebenen Bedingung erfüllt (z. B. [Umsatzerloese_PLAN.Umsatz]>0), wird die Formel für diesen Datensatz ausgeführt.


Im Standardmodell von CoPlanner sind beispielsweise alle Formeln auf den Planzeitraum eingeschränkt.


{| {{Bausteindesign1}}
Um eine neue Bedingung anzulegen, klicken Sie auf die untere Schaltfläche '''„Hinzufügen“'''. Über das ''''''-Symbol öffnen Sie den Editor des jeweiligen Feldes. Dort stehen Ihnen sämtliche Felder der Quell- und Zieltabelle sowie alle Funktionen, Variablen und [[Framework:Anwendungseigenschaften|Anwendungseigenschaften]] zur Verfügung.
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Bei der Group-Formel wird die Formel nur für die Bedingung ausgeführt und alle anderen erzeugten Datensätze dieser Formel für den Plan, an dem man angemeldet ist, werden gelöscht. D.h. wenn zum Beispiel eine Bedingung das Unternehmen mit der Session_Unternehmen_ID gesetzt wäre und ein Benutzer auf Unternehmen A eine Datenänderung vornimmt, die die Formel triggert, werden die Daten für dieses Unternehmen erstellt. Meldet sich der Benutzer dann auf Unternehmen B an und ändert in der gleichen Tabelle Daten, so werden die Daten für Unternehmen B erzeugt und die für Unternehmen A gelöscht, da diese nicht auf die Bedingung zutreffen.
|}


Zwischen den beiden Vergleichswerten wählen Sie den gewünschten Vergleichsoperator aus und legen anschließend den Vergleichstyp (Numerisch, Text oder Datum) fest.
Ist die definierte Bedingung erfüllt (z.&nbsp;B. '''[Umsatzerloese_PLAN.Umsatz] > 0'''), wird die Formel für den jeweiligen Datensatz ausgeführt.
{{Hinweis|Text=Bei '''Group-Formeln''' werden nur Datensätze erzeugt, die den definierten Bedingungen entsprechen. Bereits vorhandene Datensätze derselben Formel, die für den aktuell angemeldeten Plan nicht mehr auf die Bedingung zutreffen, werden gelöscht.
Beispiel:
Ist als Bedingung @Session_Unternehmen_ID@ definiert und ein Benutzer nimmt Änderungen für Unternehmen A vor, werden die Datensätze für Unternehmen A erzeugt. Meldet sich anschließend derselbe Benutzer auf Unternehmen B an und löst die Formel erneut aus, werden die Datensätze für Unternehmen B erstellt. Die zuvor erzeugten Datensätze für Unternehmen A werden gelöscht, da sie die aktuelle Bedingung nicht mehr erfüllen.}}
Folgende Vergleichsoperatoren stehen für Bedingungen zur Verfügung:
:* =
:* <
:* >
:* <=
:* >=
:* <>
:* LIKE
:* isChildOf
:* isParentOf
:* isNotChildOf
:* isNotParentOf
{{Hinweis|Text=Bei den Operatoren '''isChildOf''', '''isParentOf''', '''isNotChildOf''' und '''isNotParentOf''' muss zusätzlich eine Referenzdimension angegeben werden, auf die sich der Vergleich bezieht. Dadurch können Hierarchiebeziehungen innerhalb von Dimensionen ausgewertet werden. Alle vier Operatoren können innerhalb einer Bedingung verwendet werden.}}
{{Hinweis|Text=<small>''Ab CoPlanner 11 Release 2 2026:''</small> Update-, Mengen- und Zeilenformeln unterstützen in Bedingungen nun auch NULL-Werte und wandeln diese nicht mehr automatisch in 0 um. Soll ein NULL-Wert geschrieben werden, verwenden Sie den Ausdruck '''NullValue'''.}}


==Iterationen==
==Iterationen==
Zeile 143: Zeile 191:
[[image:Fw_Formeln_Iterationen.jpg|thumb|center|Framework, Formeln - Iterationen]]
[[image:Fw_Formeln_Iterationen.jpg|thumb|center|Framework, Formeln - Iterationen]]


Iterationen erlauben die mehrfache Abarbeitung einer Formel mit verschiedenen Parametern. Dazu wird das Register Iterationen verwendet. Fügen Sie zunächst mit der Schaltfläche „Parameter hinzufügen“ einen Parameter (eine Spalte) hinzu, danach fügen Sie mittels „Iteration hinzufügen“ beliebig viele Zeilen ein. Dann vergeben Sie Werte für den Parameter.
Iterationen ermöglichen die mehrfache Ausführung einer Formel mit unterschiedlichen Parametern. Hierfür steht das Register '''„Iterationen“''' zur Verfügung.
 
Fügen Sie zunächst über die Schaltfläche '''„Parameter hinzufügen“''' einen Parameter (eine Spalte) hinzu. Anschließend können Sie über '''„Iteration hinzufügen“''' beliebig viele Iterationen (Zeilen) anlegen und den Parametern die gewünschten Werte zuweisen.
 
Benötigen Sie weitere Parameter, können Sie diese ebenfalls über '''„Parameter hinzufügen“''' anlegen. Nicht mehr benötigte Parameter lassen sich mit '''„Parameter löschen“''' entfernen. Einzelne Iterationen können durch Markieren der entsprechenden Zeile und anschließendes Drücken der Entf-Taste oder über das X-Symbol am rechten Ende des Datensatzes gelöscht werden.
 
Innerhalb der Formel greifen Sie auf die unter '''„Parameter“''' definierten Werte über Platzhalter wie '''[PAR 0]''', '''[PAR 1]''' usw. zu.


Benötigen Sie weitere Parameter, fügen Sie diese mit der Schaltfläche „Parameter hinzufügen“ hinzu. Mit „Parameter löschen“ können diese auch wieder gelöscht werden. Um eine einzelne Iteration zu löschen, markieren Sie diese und drücken Entf oder das X-Symbol am rechten Ende des Datensatzes.
Wird beispielsweise der Ausdruck '''[PAR 0] * 100''' in ein Zielfeld geschrieben und sind zwei Iterationen mit den Werten '''0,8''' und '''0,2''' definiert, erzeugt die Formel zwei Zieldatensätze mit den Werten '''80''' bzw. '''20'''.


In der Formel selbst sprechen Sie die in den Feldern „Parameter“ defnierten Werte mit dem Platzhalter [PAR 0] etc. an.
Ist eine Iterationstabelle angegeben, wird das Register '''„Iterationen“''' durch das Register '''„Spaltenmapping für Iterationstabelle“''' ersetzt.


Haben Sie also eine Formel definiert, die den Wert [PAR 0]*100 in ein Zielfeld schreibt und danach zwei Iterationen definiert, die die Werte 0,8 und 0,2 beinhalten, werden bei der Abarbeitung der Formel zwei Zieldatensätze erzeugt, einer mit dem Wert 80 und einer mit dem Wert 20.
In diesem Fall werden automatisch alle Datensätze der angegebenen Iterationstabelle nacheinander verarbeitet. Alle Felder dieser Tabelle können als Parameter verwendet werden. Die Zuordnung erfolgt über '''„Mapping hinzufügen“''', anschließend '''„Neuen Eintrag“''' und die Auswahl des gewünschten Feldes.


Ist eine Iterationstabelle angegeben, wird das Register „Iterationen“ durch das Register „Spaltenmapping für Iterationstabelle“ ersetzt. Da nun eine Tabelle angegeben ist, über die iteriert wird, werden automatisch alle Datensätze dieser Iterationstabelle nacheinander abgearbeitet. Dabei können alle zur Verfügung stehenden Felder dieser Tabelle als Parameter verwendet werden. Diese werden durch „Mapping hinzufügen“, Klick auf „Neuen Eintrag“ und Auswahl eines Feldes angegeben.
Die Zeitdimension wird häufig als Iterationstabelle verwendet, beispielsweise um für alle Monate eines bestimmten Zeitraums (definiert über die Bedingungen der Formel) Datensätze zu erzeugen.


Die Zeit-Dimension wird häufig für solche Iterationen verwendet, wenn etwa für alle Monate in einem bestimmten Zeitraum (zu definieren über die Bedingungen der Formel) ein Datensatz erzeugt werden soll. Bei der Zeitdimension empfiehlt sich darüber hinaus die Einschränkung nur auf Monate, z. B. über die Funktion "fkt_TimeDimTypeFlag".
Bei der Verwendung der Zeitdimension empfiehlt es sich, die Iteration auf Monate einzuschränken, beispielsweise über die Funktion '''FKT_TimeDimTypeFlag'''.


[[image:Fw_Formeln_Spaltenmapping fuer Iterationstabelle.jpg|thumb|center|Framework, Formeln - Spaltenmapping für Iterationstabelle]]
[[image:Fw_Formeln_Spaltenmapping fuer Iterationstabelle.jpg|thumb|center|Framework, Formeln - Spaltenmapping für Iterationstabelle]]


==Groups==
==Groups==


Diese werden nur beim Formeltyp Group und Aggregation verwendet. Sie definieren, nach welchen Look-Ups in der Zieltabelle der Zieldatensatz ermittelt werden soll.
Diese Registerkarte wird ausschließlich bei Formeln des Typs '''Group''' und '''Aggregation''' verwendet. Sie definiert, anhand welcher Lookups der Zieldatensatz ermittelt bzw. gruppiert wird.


[[image:Fw_Formeln_Groups.jpg|thumb|center|Framework, Formeln - Groups]]
[[image:Fw_Formeln_Groups.jpg|thumb|center|Framework, Formeln - Groups]]
Zeile 166: Zeile 219:
===Zielsatzbindung===
===Zielsatzbindung===


Die Option „Zielsatzbindung“ gibt an, ob die erzeugten Gruppen von Datensätzen je Tabelle, je Formel oder nur bezogen auf die in der Gruppierung angegebenen Felder aktualisiert werden sollen. Diese Option steht nur beim Formeltyp Aggregation zur Verfügung.
Die Option '''„Zielsatzbindung“''' legt fest, wie erzeugte Gruppen von Datensätzen aktualisiert werden.


Folgende Varianten stehen zur Verfügung:
* je Tabelle
* je Formel
* anhand der in der Gruppierung definierten Felder
Diese Option steht ausschließlich für Formeln des Typs '''Aggregation''' zur Verfügung.


==Iterationen==
==Iterationen==
Zeile 173: Zeile 233:
[[image:Fw_Formeln_Iteration1.jpg|thumb|center|Framework, Formeln - Groups]]
[[image:Fw_Formeln_Iteration1.jpg|thumb|center|Framework, Formeln - Groups]]


Ist im Register „Verknüpfung“ eine Iterationstabelle angegeben, kann hiermit zu den Datensätzen der Iterationstabelle gesprungen werden.
Ist im Register '''„Verknüpfung“''' eine Iterationstabelle angegeben, kann über dieses Register direkt zu den Datensätzen der Iterationstabelle gewechselt werden.
 


==Tabellen==
==Tabellen==
Hier kann man weitere Quelltabellen angeben und verknüpfen.


Hier können zusätzliche Quelltabellen angegeben und miteinander verknüpft werden.


===Weitere Quelltabellen===
===Weitere Quelltabellen===
Zeile 185: Zeile 244:


Tabellenname,Alias,Join;<br>
Tabellenname,Alias,Join;<br>
Bsp.: Umsatzerloese_PLAN,Umsatz,HAS;


'''Beispiel:'''
Umsatzerloese_PLAN,Umsatz,HAS;


'''Arten von Joins:'''
'''Arten von Joins:'''


'''HAS (oder INNER):''' entspricht quasi einem INNER JOIN in SQL. Bei einem HAS werden alle Zeilen aus der Tabelle A und der Tabelle B zusammengeführt, bei denen die Join Spaltenelemente gleich sind.
'''HAS (oder INNER):'''
Entspricht einem INNER JOIN in SQL. Bei einem HAS werden alle Zeilen der Tabellen A und B zusammengeführt, bei denen die Join-Spaltenelemente übereinstimmen.


[[Datei:Join_HAS.png|100px]]
[[Datei:Join_HAS.png|100px]]


Verfügbar ab 9.4.3 HF 1.2:
'''OPT (oder LEFT):'''
 
Entspricht einem LEFT JOIN in SQL. Bei einem OPT werden alle Zeilen der Tabellen A und B zusammengeführt, bei denen die Join-Spaltenelemente übereinstimmen. Zusätzlich bleiben alle Elemente der ersten Tabelle erhalten.
'''OPT (oder LEFT):''' entspricht quasi einem LEFT JOIN in SQL. Bei einem OPT werden alle Zeilen aus der Tabelle A und der Tabelle B zusammengeführt, bei denen die Join Spaltenelemente gleich sind sowie alle Elemente aus der ersten Tabelle.


[[Datei:Join_OPT.png|100px]]
[[Datei:Join_OPT.png|100px]]


'''OUT (oder OUTER):''' entspricht quasi einem FULL OUTER JOIN in SQL. Bei einem OUT werden alle Zeilen aus der Tabelle A und der Tabelle B zusammengeführt, wo die Join Spaltenelemente gleich sind sowie alle Elemente aus den beiden Tabellen, die keine gleichen Elemente haben.
'''OUT (oder OUTER):'''
Entspricht einem FULL OUTER JOIN in SQL. Bei einem OUT werden alle Zeilen der Tabellen A und B zusammengeführt, deren Join-Spaltenelemente übereinstimmen. Zusätzlich bleiben alle Elemente beider Tabellen erhalten, auch wenn keine Übereinstimmung vorhanden ist.


[[Datei:Join_OUT.png|100px]]
[[Datei:Join_OUT.png|100px]]


'''Alias:''' 
Der Alias einer Tabelle kann und sollte innerhalb der gesamten Formel verwendet werden. Dies gilt insbesondere für Groups, Zuweisungen, Bedingungen und Joins.
Dadurch kann beispielsweise statt
[Umsatzerloese_PLAN.Unternehmen_1.COPSYS_ID]
der kürzere Ausdruck
[Umsatz.Unternehmen_1.COPSYS_ID]


'''Alias:''' der Alias der Tabelle kann überall verwendet werden. Also bei Groups, Zuweisungen und Bedingungen und den Joins. Man kann dann anstatt beispielsweise [Umsatzerloese_PLAN.Unternehmen_1.COPSYS_ID] einfach [Umsatz.Unternehmen_1.COPSYS_ID] verwenden
verwendet werden.


===Join hinzufügen===
===Join hinzufügen===
Hier können Sie angeben, wie die Tabellen untereinander verknüpft sind. Join Tabelle bezieht sich darauf, für welche Tabelle der Join gelten soll. Gültig sind hier nur Einträge, die in den "Weiteren Quelltabellen" vorkommen. Es kann hier der Aliasname verwendet werden oder der Tabellenname. Sobald eine Tabelle mehrfach als weitere Quelltabelle angegeben wurde muss der Alias verwendet werden.


[[image:FW_Mengenformel_Tabellen_Join.JPG|thumb|center|Framework, Mengenformel Tabellen]] 
Hier wird definiert, wie die Tabellen miteinander verknüpft werden.
 
Das Feld '''Join Tabelle''' gibt an, für welche Tabelle der Join gelten soll. Zulässig sind ausschließlich Tabellen, die zuvor unter '''„Weitere Quelltabellen“''' definiert wurden.


Auch hier sollte der Aliasname und nicht der eigentliche Tabellenname verwendet werden. Wird eine Tabelle mehrfach als weitere Quelltabelle angegeben, ist die Verwendung des Alias zwingend erforderlich.
Folgende Operatoren werden für Joins unterstützt:
:* =
:* <
:* >
:* <=
:* >=
:* <>
:* isChildOf
:* isParentOf
{{Hinweis|Text=Bei den Operatoren '''isChildOf''' und '''isParentOf''' muss zusätzlich eine Referenzdimension angegeben werden, auf die sich der Vergleich bezieht. Diese Operatoren ermöglichen Vergleiche innerhalb von Dimensionen.}}
[[image:FW_Mengenformel_Tabellen_Join.JPG|thumb|center|Framework, Mengenformel Tabellen]]


===Subqueries in Joins===
===Subqueries in Joins===
Subqueries bieten die Möglichkeit Daten aus den Tabellen zuerst zu aggregieren und zu filtern, um dann mit den aggregierten und gefilterten Werten weiterrechnen zu können. Es können in der Formel mit dem Alias nur Felder verwendet werden, die auch in der Subquery vorkommen.


Subqueries ermöglichen es, Daten aus Tabellen zunächst zu aggregieren oder zu filtern und anschließend mit den vorbereiteten Ergebnissen weiterzuarbeiten.


Syntax:
Innerhalb der Formel können über den Alias ausschließlich jene Felder verwendet werden, die auch in der Subquery definiert wurden.


TabellennameAusObjektverwaltung,TabellenAliasInJoin([Summenwertfeld1]$[Summenwertfeld2]#Filter1$Filter2#[GruppierungsFeld1]$[Gruppierungsfeld2]),Jointyp;
'''Syntax:'''


Die Bereiche zwischen Summenfeldern, Filter und Gruppierung müssen jeweils mit einem # getrennt werden. Innerhalb der Summenfelder/Filter/Gruppierungen dient ein $ als Trennzeichen zwischen mehreren Feldern.
Tabellenname,Alias([Summenwertfeld1]$[Summenwertfeld2]#Filter1$Filter2#[GruppierungsFeld1]$[Gruppierungsfeld2]),Join;


Beispiele:
Die einzelnen Bereiche für Summenfelder, Filter und Gruppierungen werden jeweils durch ein '''#''' getrennt.
 
Innerhalb der Bereiche werden mehrere Felder durch ein '''$''' voneinander getrennt.
 
'''Beispiele:'''


TabelleA,A([a]##[Unternehmen_1]),INNER;
TabelleA,A([a]##[Unternehmen_1]),INNER;


Summiert das Feld [a] auf Basis einer Gruppierung auf Unternehmen.
Summiert das Feld '''[a]''' anhand einer Gruppierung nach Unternehmen.


TabelleA,A([a]$[b]##[Unternehmen_1]$[Zeit_1]),INNER;
TabelleA,A([a]$[b]##[Unternehmen_1]$[Zeit_1]),INNER;


Summiert die Felder [a] und [b] auf Basis einer Gruppierung auf Unternehmen und Zeit.
Summiert die Felder '''[a]''' und '''[b]''' anhand einer Gruppierung nach Unternehmen und Zeit.


Subqueries unterstützen auch Expressions. Wird eine Expression verwendet, muss zusätzlich ein Alias für das Ergebnisfeld vergeben werden.


Subqueries erlauben auch Expressions. Wird eine Expression verwendet muss auch ein Alias für den Spaltennamen verwendet werden. z.B.: "([a]*[b]) as [newcol]". Auf [newcol] kann dann in der Formel verwiesen werden.
Beispiel: ([a]*[b]) as [newcol]
Auch als Filter können reine Expressions (wie Bedingungen) verwendet werden (z.B.: "[a]+1=iif([b]=1,0,2)". Der Datentyp der gesamten Expression muss dann ein Boolean-Result liefern.
Daneben funktionieren die herkömmlichen Filter weiterhin. Zusätzlich können Filterkriterien ebenfalls eine Expression sein.  z.B.: "[a] !me+under fkt_TimeDimX(@Planstart@)". (Diese Expression darf keine zeilenabhängigen Ausdrücke (Columns) beinhalten.
FKT_SQLQUERY, FKT_AGGREGAT and FKT_GETRECORD sind nicht erlaubt!
Eckige Klammern für Datacolumns in Subqueries sind zwingend.


==Beispiel für eine Mengenformel==
Anschließend kann in der Formel über '''[newcol]''' auf das berechnete Feld zugegriffen werden.
 
Auch Filter können als Expressions definiert werden.
 
Beispiel: "[a]+1=iif([b]=1,0,2)"
 
Der Datentyp der gesamten Filterexpression muss dabei ein Ergebnis vom Typ Boolean liefern.
 
Zusätzlich zu Expressions können weiterhin herkömmliche Filter verwendet werden. Filterkriterien können ebenfalls Expressions enthalten.
 
Beispiel: "[a] !me+under fkt_TimeDimX(@Planstart@)"
 
Diese Expression darf keine zeilenabhängigen Ausdrücke (Columns) enthalten.
 
{{Hinweis|Text=FKT_SQLQUERY, FKT_AGGREGAT und FKT_GETRECORD sind in Subqueries nicht erlaubt.}}
 
{{Hinweis|Text=Eckige Klammern für Datacolumns in Subqueries sind zwingend erforderlich.}}
 
 
==Beispiel für eine Mengenformel ohne Subquery==
Beispielumsatzplanung auf Basis einer Preistabelle und einer Mengentabelle als Eingabetabellen. Als Ergebnis soll das Produkt aus Mengen und Preise in eine Umsatztabelle übertragen werden.
Beispielumsatzplanung auf Basis einer Preistabelle und einer Mengentabelle als Eingabetabellen. Als Ergebnis soll das Produkt aus Mengen und Preise in eine Umsatztabelle übertragen werden.


Zeile 284: Zeile 392:
[[image:FW_Mengenformel_Verknuepfung.JPG|thumb|center|Framework, Mengenformel Verknüpfung]]
[[image:FW_Mengenformel_Verknuepfung.JPG|thumb|center|Framework, Mengenformel Verknüpfung]]


Die dritte Tabelle wird über die Dimensionen Zeit, Unternehmen, Produkte hinzugefügt. Dafür muss der Tabellenname, ein beliebiger Tabellenalias und die Art des Joins (vorläufig nur HAS) angegeben werden.  Über den Button Join hinzufügen können die Join-Bedingungen hinterlegt werden.   
Die dritte Tabelle wird über die Dimensionen Zeit, Unternehmen, Produkte hinzugefügt. Dafür muss der Tabellenname, ein beliebiger Tabellenalias und die Art des Joins angegeben werden.  Über den Button Join hinzufügen können die Join-Bedingungen hinterlegt werden.   


[[image:FW_Mengenformel_Tabellen_Join.JPG|thumb|center|Framework, Mengenformel Tabellen]]         
[[image:FW_Mengenformel_Tabellen_Join.JPG|thumb|center|Framework, Mengenformel Tabellen]]         
Zeile 299: Zeile 407:


[[image:FW_Mengenformel_Tabelle_Umsatz.JPG|thumb|center|Framework, Ergebnis in Umsatztabelle]]  
[[image:FW_Mengenformel_Tabelle_Umsatz.JPG|thumb|center|Framework, Ergebnis in Umsatztabelle]]  
==Beispiel für Kumulierung über eine Mengenformel mit Subquery==
Es wir hier eine Kumulierung nur auf Monaten innerhalb des Planzeitraums je Unternehmen ab dem ersten Startwert ausgeführt.
Die Tabellen haben folgende Ausprägungen und Inhalte:
'''TF37_tbl_A'''
Dimensionen
:* Unternehmen
:* Zeit
:* GuV-Gesamkostenverfahren-Struktur
Measures
:* Wert
[[image:FW_Tabelle_TF37_tbl_A.PNG|thumb|center|Framework, Inhalt Tabelle TF37_tbl_A]]
'''TF37_tbl_Target'''
Dimensionen
:* Unternehmen
:* Zeit
Measures
:* WertA
:* WertB
Die Tabelle TF37_tbl_Targets enthält vor Ausführung der Formel keine Werte
'''Zeit'''
Hier handelt es sich um die Standard-Zeitdimension
Mit einer Mengenformel sollen die Werte aus der Tabelle "TF37_tbl_A" kumuliert in die Tabelle "TF37_tbl_Target" münden.               
Als Basistabelle ist die Tabelle "TF37_tbl_A" definiert. Als Ergebnistabelle ist die Tabelle „TF37_tbl_Target“ ausgewählt. Um keine Lücken bei Monaten, die nicht befüllt sind zu erhalten, wird die Zeit hinzugejoint. Die Formel ist bei Eingaben in der Tabelle "TF37_tbl_A" aktiviert.
[[image:FW_Mengenformel_TF37_Menge_kum_Verknuepfung.JPG|thumb|center|Framework, Mengenformel Verknüpfung]]
Im nächsten Schritt wird auf dem Tab "Tabellen" die Tabelle "TF37_tbl_A" und die Dimension "Zeit" dazugejoint.
Auf der Tabelle "TF37_tbl_A" wird eine Summierung des Feldes "Wert" auf Basis einer Gruppierung von Zeit und Unternehmen erstellt. Das NONE bei dem Join dient dazu, dass man auch die Quelltabelle Summieren und Gruppieren kann.
TF37_tbl_A,a([Wert]##[Zeit_1]$[Unternehmen_1]),NONE;
Zusätzlich wird die Dimension Zeit angegeben mit der Einschränkung, dass nur die Zeitelemente innerhalb des Planzeitraums verwendet werden.
Zeit,z(#[COPSYS_ID] !>=@Session_JP_DimMon_Von@$[COPSYS_ID] !<=@Session_JP_DimMon_Bis@#[COPSYS_ID]),INNER;
Schließlich wird noch ein Join erstellt zwischen der Zeit aus der Tabelle "TF37_tbl_A" und der Zeitdimension.
[[image:FW_Mengenformel_TF37_Menge_kum_Join.JPG|thumb|center|Framework, Mengenformel Tabellen]]
Unter „Zuweisungen Bedingungen“ wird der summierte Wert einem Feld der Zieltabelle zugewiesen. Außerdem wird noch eine Bedingung hinzugefügt, damit nur Monate für die Kumulierung herangezogen werden.
[[image:FW_Mengenformel_TF37_Menge_kum_Zuweisungen.JPG|thumb|center|Framework, Mengenformel Zuweisungen]]
Zum Schluss sind noch die Dimensionen zu hinterlegen, über die gruppiert werden soll. Hier wird die Zeit aus der Zeitdimension herangezogen um keine Lücken bei den Monaten zu haben.
[[image:FW_Mengenformel_TF37_Menge_kum_Groups.JPG|thumb|center|Framework, Mengenformel Groups]]
Als Ergebnis erhält man die kumulierten Werte je Unternehmen ab dem ersten Monat einer Eingabe dieses Unternehmens für den Planzeitraum.
[[image:FW_Mengenformel_TF37_Menge_kum_Tabelle_Targets.JPG|thumb|center|Framework, Ergebnis in Umsatztabelle]]
== Weitere Beispiele ==
* [[Framework:Formeln:BeispielRadberechnung|Berechnete Werte in Dimensionen (für jeden Wert w von Dimensionselement 1 soll x*w  für Dimensionselement 2 gerechnet werden)]]<br />


__NOEDITSECTION__  
__NOEDITSECTION__  


[[Category:Framework|Formeln]][[Category:Framework Objekte|Formeln]]
[[Category:Objektverwaltung|Formeln]]
[[en:Framework:Formulae]]
[[en:Framework:Formulae]]

Aktuelle Version vom 23. Juli 2026, 13:07 Uhr

_

Eine Formel ist ein Objekt, das mindestens eine Quell- und eine Zieltabelle besitzt. Quell- und Zieltabelle können identisch sein. Im Vergleich zu berechneten Feldern (siehe Tabellendesigner) bieten Formeln einen deutlich größeren Funktionsumfang, komplexere Einsatzmöglichkeiten und in der Regel eine höhere Ausführungszeit.

Verknüpfungen

Framework, Formeln

Aktiv

Ist diese Option aktiviert, wird die Formel ausgeführt, sobald ein Datensatz in der Quelltabelle gespeichert wird. Das Speichern kann durch eine Benutzereingabe oder durch eine andere Formel ausgelöst werden, deren Zieltabelle die Quelltabelle dieser Formel ist.

Alternativ können aktive Formeln auch über den Makrobefehl „Tabellensätze dieses Plans neu rechnen“ ausgeführt werden.

Bei Makro rechnen

Die Formel wird ausgeführt, wenn sich die Anwendung im MakroMode befindet. Der MakroMode wird mit dem Makrobefehl „Session Parameter ändern“ und dem Parameter MakroMode=1 aktiviert. Mit MakroMode=0 wird wieder in den Benutzermodus gewechselt.

Formelart

Die Formelart bestimmt die Ausführungslogik einer Formel. Es stehen folgende Typen zur Verfügung:

  • Row (ehem. Single)
Ein Quelldatensatz erzeugt einen neuen Zieldatensatz.
  • Same
Die Formel schreibt in denselben Datensatz. Dieser Typ eignet sich beispielsweise zur Berechnung oder Aktualisierung von Feldern innerhalb desselben Datensatzes.
  • SourceRow (ehem. Quellsatz)
Kann ausschließlich in Kombination mit einer Formel vom Typ Row verwendet werden. Es werden keine eigenen Datensätze erzeugt. Stattdessen werden Änderungen auf den Quelldatensatz der zugehörigen Row-Formel zurückgeschrieben.
Beispiel:
Eine Row-Formel erzeugt aus einem Datensatz der Tabelle tb_A einen neuen Datensatz in tb_B. Änderungen, die direkt am Datensatz in tb_B vorgenommen werden, können über eine SourceRow-Formel auf den ursprünglichen Datensatz in tb_A zurückgeschrieben werden. Eine weitere Row-Formel würde dagegen einen zusätzlichen Datensatz erzeugen.
  • Group
Mehrere Quelldatensätze werden zu Zieldatensätzen gruppiert. Auch wenn mehrere Datensätze der Quelltabelle geändert werden, wird die Berechnung nur einmal ausgeführt.
Hinweis: Group-Formeln werden teilweise auch als Mengenformeln bezeichnet.
  • Makro
Ermöglicht das Starten von Makros bei Änderungen an einer Tabelle. Dadurch können Funktionen von Servermakros in ein durch Datenänderungen ausgelöstes Berechnungsmodell integriert werden.
  • Aggregation (ehem. Aggregat)
Mehrere Quelldatensätze werden zu einem Zieldatensatz zusammengefasst. Die Ausführung erfolgt für jede geänderte Quellzeile. In den meisten Anwendungsfällen ist eine Group-Formel effizienter. Aufgrund konzeptioneller Einschränkungen wird dieser Formeltyp künftig voraussichtlich nicht mehr weiterentwickelt. Neue Anforderungen sollten nach Möglichkeit mit Group-Formeln umgesetzt werden.
  • Update
Mehrere Quelldatensätze können zu Zieldatensätzen gruppiert werden. Es werden ausschließlich bereits vorhandene Zieldatensätze aktualisiert; neue Datensätze werden nicht angelegt.

Typed calculations

Ist Typed Calculations aktiviert, werden Ausdrücke bereits beim Laden des Rechenwerks in echte Codefunktionen kompiliert. Dadurch werden Formeln deutlich schneller ausgeführt als bei der bisherigen zeichenkettenbasierten Auswertung.

Da die Parameter dieser Codefunktionen über eindeutige Datentypen verfügen, ist ihre Verwendung konsistenter und eindeutiger (z. B. müssen Zeichenketten in Hochkommas angegeben werden). Dadurch ergeben sich bei bestehenden Formeln in einigen Fällen notwendige Anpassungen. Diese betreffen ausschließlich Formeln, bei denen die Option Typed Calculations aktiviert wird.

Die Option ist für Group- und Update-Formeln verpflichtend und kann bei Aggregation-Formeln nicht verwendet werden.

Es wird empfohlen, neue Formeln grundsätzlich mit aktivierten Typed Calculations anzulegen und bestehende Formeln schrittweise umzustellen.

Eine Erläuterung, warum Zeichenketten in Typed Expressions anders aufgebaut werden müssen, finden Sie auf dieser Seite.

Beispiel für die Umstellung von Formeln mit FKT_GetRecord und FKT_Aggregat

Alte Schreibweise:

FKT_GetRecord(Kurse_TBL_Standard.Kurs, Unternehmen !me [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID], Zeit !me [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID])

Neue Schreibweise:

FKT_GetRecord("Kurse_TBL_Standard.Kurs", "Unternehmen !me " + [Umsatzerloese_PLAN_REC.Unternehmen_1.COPSYS_ID], "Zeit !me " + [Umsatzerloese_PLAN_REC.Zeit_1.COPSYS_ID])


Bei aktivierten Typed Calculations steht außerdem die neue Funktion FKT_TimeDimDatePart zur Verfügung.

Hinweis  Boolean-Felder werden bei aktivierten Typed Calculations nicht mehr mit 0 oder -1 abgefragt, sondern mit False bzw. True.


Hinweis  Wenn Typed Calculations aktiviert sind, werden FKT_CIF und FKT_CHOOSE nicht mehr unterstützt.

Beispiel für das Ersetzen von FKT_CIF bei einem Boolean-Feld:

Alte Schreibweise:

FKT_CIF('[TBL_Example.LastName]' = '' OR '[TBL_Example.FirstName]',0,-1)

Neue Schreibweise:

IIF([TBL_Example.LastName] = '' OR [TBL_Example.FirstName] = '0',False,True)


Quelltabelle

Die Quelltabelle bzw. Dimension bildet die Grundlage für die Berechnung. Bei Group- und Update-Formeln können im Register Tabellen zusätzlich weitere Quelltabellen angegeben werden.

Zieltabelle

Die Zieltabelle bzw. Dimension in welche das Berechnungsergebnis geschrieben wird.

Execution Order

Die Execution Order legt die Reihenfolge fest, in der Formeln ausgeführt werden. Sie sollte verwendet werden, wenn mehrere Formeln dieselbe Quelltabelle verwenden und die Reihenfolge der Berechnungen relevant ist.

Beispielsweise sollte in einer Erfolgsplanung zunächst die Formel ausgeführt werden, welche den Umsatzsteuerbetrag anhand des Umsatzsteuersatzes berechnet. Erst anschließend sollte eine nachgelagerte Formel diesen Betrag für die Ermittlung der Zahllast weiterverarbeiten.

Löschweitergabe

Vorgänger
Ist diese Option aktiviert, werden beim Löschen eines Datensatzes, der durch eine Formel erzeugt wurde, auch die zugehörigen Quelldatensätze gelöscht. Dieses Verhalten wird nur in Ausnahmefällen benötigt.
Nachfolger
Ist diese Option aktiviert, werden alle aus einem Quelldatensatz erzeugten Zieldatensätze automatisch gelöscht, sobald der Quelldatensatz gelöscht wird. Dieses Verhalten ist in den meisten Anwendungsfällen sinnvoll und wird daher empfohlen.
Hinweis  Die Löschweitergabe wirkt sich ausschließlich auf Formeln des Typs Single (Row) aus. Bei Formeln des Typs Same hat diese Einstellung keine Auswirkung, da der Datensatz selbst gelöscht wird. Bei Formeln des Typs Aggregation wird beim Löschen eines Quelldatensatzes die Formel erneut ausgeführt. Der Zieldatensatz wird jedoch nicht automatisch gelöscht, da dieser mehrere Quelldatensätze zusammenfasst.

Iterationstabelle

Mit einer Iterationstabelle kann eine Formel mehrfach mit unterschiedlichen Parametern ausgeführt werden. Die Datensätze, über die iteriert werden soll, stammen dabei aus der hier ausgewählten Tabelle. Weitere Informationen finden Sie im Abschnitt Iterationen.

Tabellen, deren Änderungen diese Formel auslösen

Standardmäßig werden Formeln durch Änderungen an ihrer Quelltabelle oder über einen Makrobefehl ausgelöst. Für jede Quelltabelle kann eine Reihenfolge der Formelausführung definiert werden. Same-Formeln werden unabhängig von dieser Reihenfolge immer zuerst ausgeführt.

Zusätzlich kann das automatische Auslösen durch Änderungen an der Quelltabelle deaktiviert werden. Dadurch lassen sich Modellierungen einfacher umsetzen, für die bisher beispielsweise der MakroMode, das Aktivieren bzw. Deaktivieren von Formeln oder eine Quelltabelle vom Typ „keine“ verwendet werden musste.

Darüber hinaus kann eine Formel auch durch Änderungen an mehreren Tabellen ausgelöst werden. Zwischen diesen Tabellen und der eigentlichen Formel muss dabei kein technischer Zusammenhang bestehen.

Beispiel:

Eine Umsatzformel kann nicht nur bei Änderungen der Tabelle tb_Umsatz, sondern zusätzlich auch bei Änderungen der Tabelle tb_Zahlungsschlüssel ausgeführt werden.


Zuweisungen Bedingungen

Framework, Formeln - Bedingungen & Formeln

Zuweisungen

Im oberen Bereich des Registers „Zuweisungen Bedingungen“ werden die eigentlichen Inhalte einer Formel definiert. In der linken Spalte „Quelle“ (bzw. „SUM(Quellausdruck)“ bei Group-Formeln) wird ein Ausdruck oder Wert aus der Quelltabelle angegeben. In der rechten Spalte „Ziel“ wählen Sie das Feld der Zieltabelle aus, das beschrieben werden soll.

Um eine neue Zuweisung anzulegen, klicken Sie auf die obere Schaltfläche „Hinzufügen“. Über das -Symbol öffnen Sie den Editor des jeweiligen Feldes. Dort stehen Ihnen alle Felder der Quell- und Zieltabelle sowie sämtliche Funktionen, Variablen und Anwendungseigenschaften zur Verfügung.

Hinweis  Ab CoPlanner 11 Release 2 2026: Update-, Mengen- und Zeilenformeln unterstützen in Zuweisungen nun auch NULL-Werte und wandeln diese nicht mehr automatisch in 0 um. Soll ein NULL-Wert geschrieben werden, verwenden Sie den Ausdruck NullValue.

Gemeinsame Lookups synchron halten

Verbindungen zwischen Quelle und Ziel werden für Wertfelder grundsätzlich über eigene Zeilen in den Zuweisungen definiert.

Dimensionen können ebenfalls auf diese Weise verknüpft werden. Wird jedoch die Option „Gemeinsame Lookups synchron halten“ aktiviert, werden alle Dimensionen, deren Aliasnamen in Quelle und Ziel übereinstimmen, automatisch miteinander synchronisiert.

Felder, die weder explizit zugewiesen noch automatisch synchronisiert werden, erhalten beim Anlegen eines neuen Zieldatensatzes ihren jeweiligen Standardwert.

Funktionen

Funktionen können im Formeldesigner ausgewählt werden und ermöglichen umfangreiche Berechnungen sowie Datenmanipulationen innerhalb von Formeln.

Eine Übersicht aller verfügbaren Funktionen finden Sie unter CoPlanner Funktionen.

Bedingungen

Im unteren Bereich des Registers „Zuweisungen Bedingungen“ definieren Sie die Bedingungen, unter denen eine Formel ausgeführt wird. Die Formel wird nur dann angewendet, wenn alle definierten Bedingungen erfüllt sind.

Im Standardmodell von CoPlanner sind beispielsweise alle Formeln auf den Planzeitraum eingeschränkt.

Um eine neue Bedingung anzulegen, klicken Sie auf die untere Schaltfläche „Hinzufügen“. Über das -Symbol öffnen Sie den Editor des jeweiligen Feldes. Dort stehen Ihnen sämtliche Felder der Quell- und Zieltabelle sowie alle Funktionen, Variablen und Anwendungseigenschaften zur Verfügung.

Zwischen den beiden Vergleichswerten wählen Sie den gewünschten Vergleichsoperator aus und legen anschließend den Vergleichstyp (Numerisch, Text oder Datum) fest.

Ist die definierte Bedingung erfüllt (z. B. [Umsatzerloese_PLAN.Umsatz] > 0), wird die Formel für den jeweiligen Datensatz ausgeführt.

Hinweis  Bei Group-Formeln werden nur Datensätze erzeugt, die den definierten Bedingungen entsprechen. Bereits vorhandene Datensätze derselben Formel, die für den aktuell angemeldeten Plan nicht mehr auf die Bedingung zutreffen, werden gelöscht.

Beispiel:

Ist als Bedingung @Session_Unternehmen_ID@ definiert und ein Benutzer nimmt Änderungen für Unternehmen A vor, werden die Datensätze für Unternehmen A erzeugt. Meldet sich anschließend derselbe Benutzer auf Unternehmen B an und löst die Formel erneut aus, werden die Datensätze für Unternehmen B erstellt. Die zuvor erzeugten Datensätze für Unternehmen A werden gelöscht, da sie die aktuelle Bedingung nicht mehr erfüllen.

Folgende Vergleichsoperatoren stehen für Bedingungen zur Verfügung:

  • =
  • <
  • >
  • <=
  • >=
  • <>
  • LIKE
  • isChildOf
  • isParentOf
  • isNotChildOf
  • isNotParentOf
Hinweis  Bei den Operatoren isChildOf, isParentOf, isNotChildOf und isNotParentOf muss zusätzlich eine Referenzdimension angegeben werden, auf die sich der Vergleich bezieht. Dadurch können Hierarchiebeziehungen innerhalb von Dimensionen ausgewertet werden. Alle vier Operatoren können innerhalb einer Bedingung verwendet werden.
Hinweis  Ab CoPlanner 11 Release 2 2026: Update-, Mengen- und Zeilenformeln unterstützen in Bedingungen nun auch NULL-Werte und wandeln diese nicht mehr automatisch in 0 um. Soll ein NULL-Wert geschrieben werden, verwenden Sie den Ausdruck NullValue.

Iterationen

Framework, Formeln - Iterationen

Iterationen ermöglichen die mehrfache Ausführung einer Formel mit unterschiedlichen Parametern. Hierfür steht das Register „Iterationen“ zur Verfügung.

Fügen Sie zunächst über die Schaltfläche „Parameter hinzufügen“ einen Parameter (eine Spalte) hinzu. Anschließend können Sie über „Iteration hinzufügen“ beliebig viele Iterationen (Zeilen) anlegen und den Parametern die gewünschten Werte zuweisen.

Benötigen Sie weitere Parameter, können Sie diese ebenfalls über „Parameter hinzufügen“ anlegen. Nicht mehr benötigte Parameter lassen sich mit „Parameter löschen“ entfernen. Einzelne Iterationen können durch Markieren der entsprechenden Zeile und anschließendes Drücken der Entf-Taste oder über das X-Symbol am rechten Ende des Datensatzes gelöscht werden.

Innerhalb der Formel greifen Sie auf die unter „Parameter“ definierten Werte über Platzhalter wie [PAR 0], [PAR 1] usw. zu.

Wird beispielsweise der Ausdruck [PAR 0] * 100 in ein Zielfeld geschrieben und sind zwei Iterationen mit den Werten 0,8 und 0,2 definiert, erzeugt die Formel zwei Zieldatensätze mit den Werten 80 bzw. 20.

Ist eine Iterationstabelle angegeben, wird das Register „Iterationen“ durch das Register „Spaltenmapping für Iterationstabelle“ ersetzt.

In diesem Fall werden automatisch alle Datensätze der angegebenen Iterationstabelle nacheinander verarbeitet. Alle Felder dieser Tabelle können als Parameter verwendet werden. Die Zuordnung erfolgt über „Mapping hinzufügen“, anschließend „Neuen Eintrag“ und die Auswahl des gewünschten Feldes.

Die Zeitdimension wird häufig als Iterationstabelle verwendet, beispielsweise um für alle Monate eines bestimmten Zeitraums (definiert über die Bedingungen der Formel) Datensätze zu erzeugen.

Bei der Verwendung der Zeitdimension empfiehlt es sich, die Iteration auf Monate einzuschränken, beispielsweise über die Funktion FKT_TimeDimTypeFlag.

Framework, Formeln - Spaltenmapping für Iterationstabelle

Groups

Diese Registerkarte wird ausschließlich bei Formeln des Typs Group und Aggregation verwendet. Sie definiert, anhand welcher Lookups der Zieldatensatz ermittelt bzw. gruppiert wird.

Framework, Formeln - Groups

Zielsatzbindung

Die Option „Zielsatzbindung“ legt fest, wie erzeugte Gruppen von Datensätzen aktualisiert werden.

Folgende Varianten stehen zur Verfügung:

  • je Tabelle
  • je Formel
  • anhand der in der Gruppierung definierten Felder

Diese Option steht ausschließlich für Formeln des Typs Aggregation zur Verfügung.

Iterationen

Framework, Formeln - Groups

Ist im Register „Verknüpfung“ eine Iterationstabelle angegeben, kann über dieses Register direkt zu den Datensätzen der Iterationstabelle gewechselt werden.

Tabellen

Hier können zusätzliche Quelltabellen angegeben und miteinander verknüpft werden.

Weitere Quelltabellen

Syntax

Tabellenname,Alias,Join;

Beispiel:

Umsatzerloese_PLAN,Umsatz,HAS;

Arten von Joins:

HAS (oder INNER): Entspricht einem INNER JOIN in SQL. Bei einem HAS werden alle Zeilen der Tabellen A und B zusammengeführt, bei denen die Join-Spaltenelemente übereinstimmen.

OPT (oder LEFT): Entspricht einem LEFT JOIN in SQL. Bei einem OPT werden alle Zeilen der Tabellen A und B zusammengeführt, bei denen die Join-Spaltenelemente übereinstimmen. Zusätzlich bleiben alle Elemente der ersten Tabelle erhalten.

OUT (oder OUTER): Entspricht einem FULL OUTER JOIN in SQL. Bei einem OUT werden alle Zeilen der Tabellen A und B zusammengeführt, deren Join-Spaltenelemente übereinstimmen. Zusätzlich bleiben alle Elemente beider Tabellen erhalten, auch wenn keine Übereinstimmung vorhanden ist.

Alias: Der Alias einer Tabelle kann und sollte innerhalb der gesamten Formel verwendet werden. Dies gilt insbesondere für Groups, Zuweisungen, Bedingungen und Joins.

Dadurch kann beispielsweise statt

[Umsatzerloese_PLAN.Unternehmen_1.COPSYS_ID]

der kürzere Ausdruck

[Umsatz.Unternehmen_1.COPSYS_ID]

verwendet werden.

Join hinzufügen

Hier wird definiert, wie die Tabellen miteinander verknüpft werden.

Das Feld Join Tabelle gibt an, für welche Tabelle der Join gelten soll. Zulässig sind ausschließlich Tabellen, die zuvor unter „Weitere Quelltabellen“ definiert wurden.

Auch hier sollte der Aliasname und nicht der eigentliche Tabellenname verwendet werden. Wird eine Tabelle mehrfach als weitere Quelltabelle angegeben, ist die Verwendung des Alias zwingend erforderlich.

Folgende Operatoren werden für Joins unterstützt:

  • =
  • <
  • >
  • <=
  • >=
  • <>
  • isChildOf
  • isParentOf
Hinweis  Bei den Operatoren isChildOf und isParentOf muss zusätzlich eine Referenzdimension angegeben werden, auf die sich der Vergleich bezieht. Diese Operatoren ermöglichen Vergleiche innerhalb von Dimensionen.
Framework, Mengenformel Tabellen

Subqueries in Joins

Subqueries ermöglichen es, Daten aus Tabellen zunächst zu aggregieren oder zu filtern und anschließend mit den vorbereiteten Ergebnissen weiterzuarbeiten.

Innerhalb der Formel können über den Alias ausschließlich jene Felder verwendet werden, die auch in der Subquery definiert wurden.

Syntax:

Tabellenname,Alias([Summenwertfeld1]$[Summenwertfeld2]#Filter1$Filter2#[GruppierungsFeld1]$[Gruppierungsfeld2]),Join;

Die einzelnen Bereiche für Summenfelder, Filter und Gruppierungen werden jeweils durch ein # getrennt.

Innerhalb der Bereiche werden mehrere Felder durch ein $ voneinander getrennt.

Beispiele:

TabelleA,A([a]##[Unternehmen_1]),INNER;

Summiert das Feld [a] anhand einer Gruppierung nach Unternehmen.

TabelleA,A([a]$[b]##[Unternehmen_1]$[Zeit_1]),INNER;

Summiert die Felder [a] und [b] anhand einer Gruppierung nach Unternehmen und Zeit.

Subqueries unterstützen auch Expressions. Wird eine Expression verwendet, muss zusätzlich ein Alias für das Ergebnisfeld vergeben werden.

Beispiel: ([a]*[b]) as [newcol]

Anschließend kann in der Formel über [newcol] auf das berechnete Feld zugegriffen werden.

Auch Filter können als Expressions definiert werden.

Beispiel: "[a]+1=iif([b]=1,0,2)"

Der Datentyp der gesamten Filterexpression muss dabei ein Ergebnis vom Typ Boolean liefern.

Zusätzlich zu Expressions können weiterhin herkömmliche Filter verwendet werden. Filterkriterien können ebenfalls Expressions enthalten.

Beispiel: "[a] !me+under fkt_TimeDimX(@Planstart@)"

Diese Expression darf keine zeilenabhängigen Ausdrücke (Columns) enthalten.

Hinweis  FKT_SQLQUERY, FKT_AGGREGAT und FKT_GETRECORD sind in Subqueries nicht erlaubt.
Hinweis  Eckige Klammern für Datacolumns in Subqueries sind zwingend erforderlich.


Beispiel für eine Mengenformel ohne Subquery

Beispielumsatzplanung auf Basis einer Preistabelle und einer Mengentabelle als Eingabetabellen. Als Ergebnis soll das Produkt aus Mengen und Preise in eine Umsatztabelle übertragen werden.


Die drei Tabellen haben folgende Ausprägungen:

TBL_Preis_PLAN

Dimensionen

  • Unternehmen
  • Zeit
  • Produkte

Measures

  • Preis
Framework, Tabelle Preis

TBL_Mengen_PLAN

Dimensionen

  • Unternehmen
  • Zeit
  • Produkte

Measures

  • Menge
Framework, Tabelle Mengen

TBL_Umsatz_PLAN

Dimensionen

  • Unternehmen
  • Zeit
  • Produkte

Measures

  • Umsatz


Mit einer Mengenformel sollen die Preis- und die Mengentabelle verjoint werden und in die Umsatztabelle münden. Als Basistabelle ist die Preistabelle „TBL_Preise_PLAN“ definiert. Als Ergebnistabelle ist die Tabelle „TBL_Umsatz_PLAN“ ausgewählt. Die Tabelle „TBL_Mengen_PLAN“ wird der Preistabelle hinzugejoint. Die Formel ist sowohl bei Eingaben in der Mengen- als auch in der Preistabelle aktiviert.

Framework, Mengenformel Verknüpfung

Die dritte Tabelle wird über die Dimensionen Zeit, Unternehmen, Produkte hinzugefügt. Dafür muss der Tabellenname, ein beliebiger Tabellenalias und die Art des Joins angegeben werden. Über den Button Join hinzufügen können die Join-Bedingungen hinterlegt werden.

Framework, Mengenformel Tabellen

Unter „Zuweisungen Bedingungen“ wird das Produkt aus Menge x Preis hinterlegt.

Framework, Mengenformel Zuweisungen

Zum Schluss sind noch die Dimensionen zu hinterlegen, über die gruppiert werden soll.

Framework, Mengenformel Groups

Als Ergebnis erhält man den berechneten Umsatz in der Umsatztabelle.

Framework, Ergebnis in Umsatztabelle


Beispiel für Kumulierung über eine Mengenformel mit Subquery

Es wir hier eine Kumulierung nur auf Monaten innerhalb des Planzeitraums je Unternehmen ab dem ersten Startwert ausgeführt.

Die Tabellen haben folgende Ausprägungen und Inhalte:

TF37_tbl_A

Dimensionen

  • Unternehmen
  • Zeit
  • GuV-Gesamkostenverfahren-Struktur

Measures

  • Wert
Framework, Inhalt Tabelle TF37_tbl_A


TF37_tbl_Target Dimensionen

  • Unternehmen
  • Zeit

Measures

  • WertA
  • WertB

Die Tabelle TF37_tbl_Targets enthält vor Ausführung der Formel keine Werte

Zeit Hier handelt es sich um die Standard-Zeitdimension


Mit einer Mengenformel sollen die Werte aus der Tabelle "TF37_tbl_A" kumuliert in die Tabelle "TF37_tbl_Target" münden. Als Basistabelle ist die Tabelle "TF37_tbl_A" definiert. Als Ergebnistabelle ist die Tabelle „TF37_tbl_Target“ ausgewählt. Um keine Lücken bei Monaten, die nicht befüllt sind zu erhalten, wird die Zeit hinzugejoint. Die Formel ist bei Eingaben in der Tabelle "TF37_tbl_A" aktiviert.

Framework, Mengenformel Verknüpfung

Im nächsten Schritt wird auf dem Tab "Tabellen" die Tabelle "TF37_tbl_A" und die Dimension "Zeit" dazugejoint. Auf der Tabelle "TF37_tbl_A" wird eine Summierung des Feldes "Wert" auf Basis einer Gruppierung von Zeit und Unternehmen erstellt. Das NONE bei dem Join dient dazu, dass man auch die Quelltabelle Summieren und Gruppieren kann.

TF37_tbl_A,a([Wert]##[Zeit_1]$[Unternehmen_1]),NONE;

Zusätzlich wird die Dimension Zeit angegeben mit der Einschränkung, dass nur die Zeitelemente innerhalb des Planzeitraums verwendet werden.

Zeit,z(#[COPSYS_ID] !>=@Session_JP_DimMon_Von@$[COPSYS_ID] !<=@Session_JP_DimMon_Bis@#[COPSYS_ID]),INNER;

Schließlich wird noch ein Join erstellt zwischen der Zeit aus der Tabelle "TF37_tbl_A" und der Zeitdimension.

Framework, Mengenformel Tabellen

Unter „Zuweisungen Bedingungen“ wird der summierte Wert einem Feld der Zieltabelle zugewiesen. Außerdem wird noch eine Bedingung hinzugefügt, damit nur Monate für die Kumulierung herangezogen werden.

Framework, Mengenformel Zuweisungen

Zum Schluss sind noch die Dimensionen zu hinterlegen, über die gruppiert werden soll. Hier wird die Zeit aus der Zeitdimension herangezogen um keine Lücken bei den Monaten zu haben.

Framework, Mengenformel Groups

Als Ergebnis erhält man die kumulierten Werte je Unternehmen ab dem ersten Monat einer Eingabe dieses Unternehmens für den Planzeitraum.

Framework, Ergebnis in Umsatztabelle

Weitere Beispiele