Framework:Formeln: Unterschied zwischen den Versionen

Aus CoPlanner 10
Zur Navigation springenZur Suche springen
Keine Bearbeitungszusammenfassung
Kleinere Korrekturen
 
(22 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 21: Zeile 21:
'''Formelart'''
'''Formelart'''


Bezieht sich auf die Ausführungslogik der Fromel, wobei folgende Typen unterschieden werden:
Bezieht sich auf die Ausführungslogik der Formel, wobei folgende Typen unterschieden werden:


:*Row (ehem. Sinlge): Ein Datensatz erzeugt einen anderen Datensatz
:*Row (ehem. Sinlge): Ein Datensatz erzeugt einen anderen Datensatz
Zeile 29: Zeile 29:
:*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.
:*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.
:*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.
:*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'''
'''Typed calculations'''


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)
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 Ersetzen 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)


Die Option muss bei Mengenformeln 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.  
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.  


{| {{Bausteindesign1}}
{| {{Bausteindesign1}}
Zeile 44: Zeile 44:


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;Boolean-Felder werden nicht mehr mit 0 oder -1 abgefragt, sondern mit False oder True.
|}
|}


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


Zeile 60: Zeile 73:
Parameter: Y,Q,M & D (als string), Keine Überprüfung ob gültiges Datum, Keine Wirtschaftsjahrfunktionalität (hier eigentlich nie gewünscht)
Parameter: Y,Q,M & D (als string), Keine Überprüfung ob gültiges Datum, Keine Wirtschaftsjahrfunktionalität (hier eigentlich nie gewünscht)
|}
|}
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Eine Motivation, warum strings in typed expressions anders gebaut werden müssen, [[Framework:Formeln:WarumTyped|findet sich auf folgender Seite]]
|}




'''Quelltabelle'''
'''Quelltabelle'''


Jene Tabelle oder Dimension, auf der die Berechnung basiert (bei der Group-Formel können unter Tabellen weitere angegeben werden).
Jene Tabelle oder Dimension, auf der die Berechnung basiert (bei der Group- und Update-Formel können unter "Tabellen" weitere angegeben werden).
 




Zeile 70: Zeile 91:


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




Zeile 75: Zeile 97:


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.
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.




Zeile 91: Zeile 114:
| <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.
| <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.
|}
|}




Zeile 96: Zeile 120:


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).
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).




Zeile 115: Zeile 140:


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.
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 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.
Um eine 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.




Zeile 137: Zeile 162:
| <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.
| <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.
|}
|}
Es werden die folgenden Operatoren für die Bedingungen unterstützt:
:* =
:* <
:* >
:* <=
:* >=
:* <>
:* LIKE
:* isChildOf
:* isParentOf
:* isNotChildOf
:* isNotParentOf
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Bei den Operatoren "isChildOf","isParentOf", "isNotChildOf" und "isNotParentOf" muss eine Referenzdimension angegeben werden auf die sich der Operator bezieht, da sie einen Vergleich bei Dimensionen erlauben. In einer Bedingung können alle 4 Operatoren genutzt werden.
|}




Zeile 180: Zeile 226:




===Weitere Quelltabellen:===
===Weitere Quelltabellen===


'''Syntax'''
'''Syntax'''
Zeile 190: Zeile 236:
'''Arten von Joins:'''
'''Arten von Joins:'''


'''HAS:''' 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 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.


[[Datei:Join_HAS.png|100px]]
[[Datei:Join_HAS.png|100px]]
Zeile 196: Zeile 242:
Verfügbar ab 9.4.3 HF 1.2:
Verfügbar ab 9.4.3 HF 1.2:


'''OPT:''' 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.
'''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:''' 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 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.


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




'''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
'''Alias:''' der Alias der Tabelle kann und soll ü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


   
   
===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.
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 soll auch hier der Aliasname verwendet werden und nicht der Tabellenname. Sobald eine Tabelle mehrfach als weitere Quelltabelle angegeben wurde muss der Alias verwendet werden.
 
Es werden die folgenden Operatoren für einen Join unterstützt:
:* =
:* <
:* >
:* <=
:* >=
:* <>
:* isChildOf
:* isParentOf
 
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Bei den Operatoren "isChildOf" und "isParentOf" muss eine Referenzdimension angegeben werden auf die sich der Operator bezieht, da sie einen Vergleich bei Dimensionen erlauben.
|}
 


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




==Beispiel für eine Mengenformel==
 
===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.
 
 
Syntax:
 
Tabellenname,Alias([Summenwertfeld1]$[Summenwertfeld2]#Filter1$Filter2#[GruppierungsFeld1]$[Gruppierungsfeld2]),Join;
 
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.
 
Beispiele:
 
TabelleA,A([a]##[Unternehmen_1]),INNER;
 
Summiert das Feld [a] auf Basis einer Gruppierung auf Unternehmen.
 
TabelleA,A([a]$[b]##[Unternehmen_1]$[Zeit_1]),INNER;
 
Summiert die Felder [a] und [b] auf Basis einer Gruppierung auf Unternehmen und Zeit.
 
 
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.
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.
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;FKT_SQLQUERY, FKT_AGGREGAT and FKT_GETRECORD sind nicht erlaubt.
|}
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Eckige Klammern für Datacolumns in Subqueries sind zwingend.
|}
 
 
 
==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 257: Zeile 358:
[[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 272: Zeile 373:


[[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__  

Aktuelle Version vom 14. Juli 2022, 10:59 Uhr

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 Tabellendesigner) durch einen erweiterten Verwendungsgrad, komplexere Anwendungsmöglichkeiten und einer meist höheren Ausführungszeit.

Formel-Designer

Verknüpfungen

Framework, Formeln


Aktiv

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 Makrobefehl „Tabellensätze dieses Plans neu rechnen“.


Bei Makro rechnen

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

Bezieht sich auf die Ausführungslogik der Formel, wobei folgende Typen unterschieden werden:

  • Row (ehem. Sinlge): Ein Datensatz erzeugt einen anderen Datensatz
  • Same: Ein Datensatz rechnet auf sich selbst, beschreibt also bspw. ein Feld des selben Datensatzes
  • 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.
  • 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.
  • 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

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 Ersetzen 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)

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.

Hinweis  Umschreiben von Formeln mit FKT_GetRecord und FKT_Aggregat bei Verwendung von TypedCalcultaions

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] )


Hinweis  Boolean-Felder werden nicht mehr mit 0 oder -1 abgefragt, sondern mit False oder True.


Hinweis  Wenn Typed calculations aktiviert sind, werden FKT_CIF und FTK_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)


Hinweis  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)


Hinweis  Eine Motivation, warum strings in typed expressions anders gebaut werden müssen, findet sich auf folgender Seite


Quelltabelle

Jene Tabelle oder Dimension, auf der die Berechnung basiert (bei der Group- und Update-Formel können unter "Tabellen" weitere angegeben werden).


Zieltabelle

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


Execution Order

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.


Löschweitergabe

Vorgänger

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.

Nachfolger

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!

Hinweis  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

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 welche bei Änderungen diese Formel auslösen

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.

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.

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.


Zuweisungen Bedingungen

Framework, Formeln - Bedingungen & Formeln


Zuweisungen

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 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 Anwendungseigenschaften zur Verfügung.


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. Felder, die nicht verknüpft sind bzw. durch diese Option verbunden werden können, werden im Ziel bei Neuanlage mit deren Standardwert versorgt.

Funktionen

Funktionen können im Formeldesigner ausgewählt werden und ermöglichen umfangreiche Berechnungen und Datenmanipulationen in Formeln. Eine Übersicht der CoPlanner Funktionen finden Sie hier

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. 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 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.


Hinweis  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.


Es werden die folgenden Operatoren für die Bedingungen unterstützt:

  • =
  • <
  • >
  • <=
  • >=
  • <>
  • LIKE
  • isChildOf
  • isParentOf
  • isNotChildOf
  • isNotParentOf


Hinweis  Bei den Operatoren "isChildOf","isParentOf", "isNotChildOf" und "isNotParentOf" muss eine Referenzdimension angegeben werden auf die sich der Operator bezieht, da sie einen Vergleich bei Dimensionen erlauben. In einer Bedingung können alle 4 Operatoren genutzt werden.


Iterationen

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.

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.

In der Formel selbst sprechen Sie die in den Feldern „Parameter“ defnierten Werte mit dem Platzhalter [PAR 0] etc. an.

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.

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 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".

Framework, Formeln - Spaltenmapping für Iterationstabelle


Groups

Diese werden nur beim Formeltyp Group und Aggregation verwendet. Sie definieren, nach welchen Look-Ups in der Zieltabelle der Zieldatensatz ermittelt werden soll.

Framework, Formeln - Groups

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.


Iterationen

Framework, Formeln - Groups

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


Tabellen

Hier kann man weitere Quelltabellen angeben und verknüpfen.


Weitere Quelltabellen

Syntax

Tabellenname,Alias,Join;
Bsp.: Umsatzerloese_PLAN,Umsatz,HAS;


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.

Verfügbar ab 9.4.3 HF 1.2:

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.

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.


Alias: der Alias der Tabelle kann und soll ü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


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 soll auch hier der Aliasname verwendet werden und nicht der Tabellenname. Sobald eine Tabelle mehrfach als weitere Quelltabelle angegeben wurde muss der Alias verwendet werden.

Es werden die folgenden Operatoren für einen Join unterstützt:

  • =
  • <
  • >
  • <=
  • >=
  • <>
  • isChildOf
  • isParentOf


Hinweis  Bei den Operatoren "isChildOf" und "isParentOf" muss eine Referenzdimension angegeben werden auf die sich der Operator bezieht, da sie einen Vergleich bei Dimensionen erlauben.


Framework, Mengenformel Tabellen


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.


Syntax:

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

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.

Beispiele:

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

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

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

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


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. 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.

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


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