Framework:Formeln: Unterschied zwischen den Versionen
Zusammenführung der zwei Bearbeitungen von T.Auer |
Kleinere Korrekturen |
||
| Zeile 33: | Zeile 33: | ||
'''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 | 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. | 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. | ||
| Zeile 85: | Zeile 85: | ||
Jene Tabelle oder Dimension, auf der die Berechnung basiert (bei der Group- und Update-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 90: | 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 95: | 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 111: | Zeile 114: | ||
| <span style="color: darkblue;">'''Hinweis'''</span> 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> 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 116: | 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). | ||
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

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

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

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

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

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

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

TBL_Mengen_PLAN
Dimensionen
- Unternehmen
- Zeit
- Produkte
Measures
- Menge

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.
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.
Unter „Zuweisungen Bedingungen“ wird das Produkt aus Menge x Preis hinterlegt.
Zum Schluss sind noch die Dimensionen zu hinterlegen, über die gruppiert werden soll.
Als Ergebnis erhält man den berechneten Umsatz in der 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
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.
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.
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.
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.
Als Ergebnis erhält man die kumulierten Werte je Unternehmen ab dem ersten Monat einer Eingabe dieses Unternehmens für den Planzeitraum.