Framework:RuleFilter: Unterschied zwischen den Versionen

Aus CoPlanner 10
Zur Navigation springenZur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
==[[Framework:Funktionen|Funktion]]==
==[[Framework:Funktionen|Funktion]]==


<span {{CoPFormel}}>RuleFilter(Tabellenname,Spaltenname,[Kriterium 1 - Kriterium N]);</span>
Über Rulefilter können Dimension abhängig von einer bestimmten Filtereinstellung eingeschränkt werden. Diese können in Zeilensichten, Eingabe- sowie Einzelsatzmasken definiert werden.


Kaskadierende Filter: Diese Funktion bietet die Möglichkeit Filter einer Tabelle einzuschränken.
Rulefilter entsprechen kaskadierenden Filtern (nacheinander geschaltete Filter), welche die Auswahl der Daten für eine Dimension beschränken.
Einzugeben im Feld "[[Framework:BI_Center:Eingabemaske_-_Eigenschaften_Dimension|SpecialDefinition]]" in der Dimension.
Die abhängige Dimension kann sich im Filter oder auf der Achse befinden.
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Der [[Framework:BI_Center:Eingabemaske_-_Eigenschaften_Dimension|OpenElementTyp]] der Dimension, auf welche der Rulefilter angewendet wird, muss auf ALL gesetzt sein.
|}
 
Einzugeben ist der Rulefilter im Feld "[[Framework:BI_Center:Eingabemaske_-_Eigenschaften_Dimension|SpecialDefinition]]" der Dimension bzw. des Measures.
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Die Expression darf KEINE Leerzeichen enthalten.
|}
 
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Es kann nicht auf Pläne via [Plan.ID] zugegriffen werden.
|}
 
===Rulefilter mit CoPlanner-Tabellen===
 
<span {{CoPFormel}}>RuleFilter(Tabellenname,Spaltenname,[Kriterium 1 - Kriterium N]'',FilterOperator,EmptyResult'');</span>


{| class="wikitable" width={{{breite|80%}}}
{| class="wikitable" width={{{breite|80%}}}
Zeile 12: Zeile 34:
|-
|-
|Tabellenname
|Tabellenname
|Bezeichnung der Tabelle
|Bezeichnung der CoPlanner-Tabelle, auf welche der Rulefilter angewendet wird
|-
|-
|Spaltenname
|Spaltenname
|Bezeichnung der Spalte in der Tabelle
|Bezeichnung der Spalte in der CoPlanner-Tabelle, auf welche der Filter ''(entspricht Kriterium)'' angewendet wird
|-
|-
|Kriterium
|Kriterium
|Ausdruck der angewendet wird
|Filterkriterium, welches auf die Dimension ''(entspricht Spaltenname)'' angewendet wird
|-
|''FilterOperator''
|[[Framework:RuleFilter#FilterOperator|optionaler Parameter]] des Rulefilters
|-
|''EmptyResult''
|[[Framework:RuleFilter#EmptyResult|optionaler Parameter]] des Rulefilters
|}
 
{| {{Bausteindesign1}}
|-
| <span style="color: darkblue;">'''Hinweis'''</span> &nbsp;Sind zum ausgewählten Filterelement keine Daten vorhanden, wird standardmäßig eine leere Liste angezeigt. Diese kann mit dem Parameter [[Framework:RuleFilter#EmptyResult|EmptyResult]] übersteuert werden.
|}
|}




<!-- <span {{CoPFormel}}>RuleFilter(Tabellenname,Spaltenname,[Kriterium 1 - Kriterium N],default=Dimensionselement);</span> -->
====Anwendungsfall====


Es ist auch möglich direkt über ein SQL Statement auf den SQL Server zuzugreifen:
'''Ziel:'''


::In der Maske Umsatzerlöse IST sollen nur mehr jene Produkte gefiltert werden können, welche in der ausgewählten Region verkauft wurden.


<span {{CoPFormel}}>RuleFilter(SqlQuery,Connection String,Bedingung);</span>
'''Definition des Rulefilters:'''
 
::Dazu definiert man folgenden Rulefilter auf der Dimension Produkte:
 
::<span {{CoPFormel}}>RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID]);</span><br>
 
::{| class="wikitable" width={{{breite|80%}}}
|- {{Tabellentitel}}
| Parameter
| Beschreibung
|-
|Tabellenname
|Umsatzerloese_IST
|-
|Spaltenname
|Produkte
|-
|Kriterium
|Regionen/Kunden=[Regionen/Kunden.ID]
Vor dem '=' steht der Spaltenname und danach das Kriterium, das auf die Spalte angewendet werden soll. Mit diesem Ausdruck wird erreicht, dass nur jene Datensätze gefiltert werden, bei denen Regionen/Kunden mit dem ausgewählten Filterelement übereinstimmen.
|}
 
'''Ergebnis, wenn Dimension im Filter:'''
 
::Nach Auswahl der Region ''Schweiz'', können im Produkte-Filter nur mehr jene Produkte ausgewählt werden, die in der Schweiz verkauft worden sind.
 
[[Image:EE_Ergebnis_Rulefilter_Umsatzerloese_IST.png|thumb|center|Enterprise Edition, Rulefilter mit CoPlanner-Tabellen im Filter]]
 
'''Ergebnis, wenn Dimension auf Achse:'''
 
::Nach Auswahl der Region ''Schweiz'', werden auf der Achse nur mehr jene Produkte angezeigt, die in der Schweiz verkauft worden sind.
 
[[Image:EE_Ergebnis_Rulefilter_Umsatzerloese_IST_Achse.png|thumb|center|Enterprise Edition, Rulefilter mit CoPlanner-Tabellen auf der Achse]]
 
 
===Rulefilter mit SQL-Statements===
 
Es ist auch möglich direkt über ein SQL Statement auf den SQL Server zuzugreifen. Wird der Paramter '''SqlQuery''' verwendet so erfolgt eine Sortierung anhand der verwendeten Dimension:
 
<span {{CoPFormel}}>RuleFilter(SqlQuery,Connection String,Bedingung'',EmptyResult'');</span>


{| class="wikitable" width={{{breite|80%}}}
{| class="wikitable" width={{{breite|80%}}}
Zeile 42: Zeile 115:
|Bedingung
|Bedingung
|SQL Statement
|SQL Statement
|-
|''EmptyResult''
|[[Framework:RuleFilter#EmptyResult|optionaler Parameter]] des Rulefilters
|}
|}


Mit <span {{CoPFormel}}> RuleFilter(SqlQueryWithOrder,Connection String, Bedingung);</span> erfolgt die Sortierung über das SQL Statement.
Der Paramter '''SqlQuery''' kann durch die Konstante '''SqlQueryWithOrder''' ersetzt werden. Die Sortierung erfolgt in diesem Fall über das SQL-Statement.
<span {{CoPFormel}}> RuleFilter(SqlQueryWithOrder,Connection String, Bedingung);</span>  
 
===Beispiele===
 
Sollen nur jene Kostenstellen angezeigt werden, für welche Umsatzerlöse am angemeldeten Plan und ausgewählten Unternehmen geplant wurden, ist folgender Rulefilter auf der Dimenstion PC/KST zu hinterlegen:
 
<span {{CoPFormel}}>RuleFilter(SqlQuery,CopSystemDB,select PCKST from Umsatzerloese_Plan where COPSYS_PLAN_ID=@Session_PLAN_ID@ and Unternehmen=[Unternehmen.ID]);</span><br>
 
 
Dieser Filter gibt den Istzeitraum zurück der im Plan eingestellt ist:
 
<span {{CoPFormel}}>RuleFilter(SqlQuery,CopSystemDB, select COPSYS_ID from dim_sys_Time where Datum between(select Istdatenvon from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) and (select Istdatenbis from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) UNION ALL Select 1);<span {{CoPFormel}}>
 
Wird dieser Rulefilter auf der Zeit hinterlegt, können nur einträge gewählt werden, die zwischen Beginn und Ende des Ist-Zeitraumes des aktuellen Plans liegen:
 
<span {{CoPFormel}}>RuleFilter(SqlQuery,CopSystemDB, select COPSYS_ID from [631690024174725168] where Datum between(select Istdatenvon from tb_Planverwaltung where COPSYS_ID IN (select COPSYS_ID from tb_Planverwaltung where COPSYS_ID=@Session_PLAN_ID@)) and (select Istdatenbis from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) UNION ALL Select 1);<span {{CoPFormel}}>
 
Wenn eine Sortierung anhand des Dimensionsnamens erfolgen soll:


<span {{CoPFormel}}>RuleFilter(SqlQueryWithOrder,CopSystemDB,select copsys_id from Produkte where copsys_id > 2 order by copsys_dim_name)<span {{CoPFormel}}>


Diese Funktion gehört zu den [[:Kategorie:Funktionen_-_clientseitig|clientseitigen Funktionen]].
Wenn eine manuelle Sortierung erfolgen soll und Dimensionselemente gefiltert werden müssen gestalltet sich die Abfrage schwieriger da eine Flat View für die Dimension verwendet werden muss. In dem folgenden Beispiel werden aus der Produktedimension anhand der Attribute Kam, Region und ArtikelKurz Elemente gefiltert. Die Sortierung erfolgt anahand des vs_keys. Die Tabelle xxx_DIMFLAT_PRODUKTE muss immer zuvor mit der Stored Procedure sp_SE_Produkt_DimensionToTable befüllt werden.  


==Ergebnis==
<span {{CoPFormel}}>RuleFilter(SqlQueryWithOrder,CopSystemDB,exec sp_UmsatzKAM_Order [KAM.ID], [Regionen/Kunden.ID], [ArtikelKurz.ID])<span {{CoPFormel}}>
Filtert die ausgwählte Spalte in einer bestimmten Tabelle nach einem oder mehreren Kriterien.  


==Beispiel==
Zusätzliche benötigte SQL Dateien: [[Media:RuleFilterFlatDim.zip]]
<span {{CoPFormel}}>RuleFilter(Umsatzerloese_PLAN,Zeit,Produkte=[Produkte.ID]);</span><br>
Eingegeben in "SpecialDefinition" in der Dimension "Zeit". In der Dimension "Produkte"  werden nur jene Produkte dargestellt, die der ausgewählten Zeit zugeordnet sind.


==Optionale Parameter des Rulefilters==


<span {{CoPFormel}}>RuleFilter(SqlQuery,CopSystemDB,select PCKST from Umsatzerloese_Plan where COPSYS_PLAN_ID=@Session_PLAN_ID@ and Unternehmen=[Unternehmen.ID]);</span><br>
===FilterOperator===
Standardmäßig wird als Operator '=' verwendet. Dieser kann mit folgendem Parameter übersteuert werden: '''„FilterOperator=<Operator>“'''
Folgende Operatoren können ausgewählt werden:


Dieser Filter selektiert die PC/KST die dem angemeldeten Plan bzw. dem Unternehmen zugeordnet sind.
:*me
:*under
:*me_under
:*not_me
:*first_under
:*me_first_under
:*greater
:*greater_equal
:*less
:*less_equal
:*Like


<span {{CoPFormel}}>RuleFilter(SqlQuery,CopSystemDB, select COPSYS_ID from dim_sys_Time where Datum between(select Istdatenvon from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) and (select Istdatenbis from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) UNION ALL Select 1);<span {{CoPFormel}}>
===EmptyResult===
Wenn eine Bedinung nicht zutrifft liefert der Rulefilter standardmäßig eine leere Liste. Das Verhalten kann mit folgendem Parameter übersteuert werden: '''EmptyResult=<Operator>'''
Folgende Operatoren können ausgewählt werden:
:*NoData (Default Wert)
:*AllData -  „. AllData“ liefert alle Dimensionselemente, nach Aufbereiten der Security, wenn die Bedingung nicht zutrifft.


Dieser Filter gibt den Istzeitraum zurück der im Plan eingestellt ist.
Diese Funktion gehört zu den [[:Kategorie:Funktionen_-_clientseitig|clientseitigen Funktionen]].


<span {{CoPFormel}}>RuleFilter(Umsatzerloese_PLAN,Produkte,PC/KST=[PC/KST.ID]);RuleFilter(Umsatzerloese_PLAN,Produkte,Regionen/Kunden=[Regionen/Kunden.ID]);<span {{CoPFormel}}>
===Beispiele===


Dieser Rulefilter, eingegeben in Produkte, zeigt jene Produkte die mit den Einstellungen der PC/KST bzw. der Regionen/Kunden übereinstimmen.
<span {{CoPFormel}}>RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID],FilterOperator=not_me);</span><br>


RuleFilter können in Zeilensichten, Eingabe- sowie Einzelsatzmasken definiert werden.
<span {{CoPFormel}}>RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID],EmptyResult=AllData);</span><br>


'''Wichtig''': Die Expression darf KEIN Leerzeichen enthalten.
Filter auf das Boolfeld ProjekteDim Bool:<br>
<span {{CoPFormel}}>RuleFilter(tbl_Projekte_Users,Projekte,ProjekteDim = True);</span><br>


Filter auf das Boolfeld ProjekteDim Bool und weiterem Filter:<br>
<span {{CoPFormel}}>RuleFilter(tbl_Projekte_Users,Projekte,ProjekteDim = True,tbsysUsers=@Session_User_ID@);</span><br>


__NOEDITSECTION__  
__NOEDITSECTION__  

Aktuelle Version vom 13. Dezember 2017, 15:16 Uhr

Funktion

Über Rulefilter können Dimension abhängig von einer bestimmten Filtereinstellung eingeschränkt werden. Diese können in Zeilensichten, Eingabe- sowie Einzelsatzmasken definiert werden.

Rulefilter entsprechen kaskadierenden Filtern (nacheinander geschaltete Filter), welche die Auswahl der Daten für eine Dimension beschränken. Die abhängige Dimension kann sich im Filter oder auf der Achse befinden.

Hinweis  Der OpenElementTyp der Dimension, auf welche der Rulefilter angewendet wird, muss auf ALL gesetzt sein.

Einzugeben ist der Rulefilter im Feld "SpecialDefinition" der Dimension bzw. des Measures.

Hinweis  Die Expression darf KEINE Leerzeichen enthalten.


Hinweis  Es kann nicht auf Pläne via [Plan.ID] zugegriffen werden.

Rulefilter mit CoPlanner-Tabellen

RuleFilter(Tabellenname,Spaltenname,[Kriterium 1 - Kriterium N],FilterOperator,EmptyResult);

Parameter Beschreibung
Tabellenname Bezeichnung der CoPlanner-Tabelle, auf welche der Rulefilter angewendet wird
Spaltenname Bezeichnung der Spalte in der CoPlanner-Tabelle, auf welche der Filter (entspricht Kriterium) angewendet wird
Kriterium Filterkriterium, welches auf die Dimension (entspricht Spaltenname) angewendet wird
FilterOperator optionaler Parameter des Rulefilters
EmptyResult optionaler Parameter des Rulefilters
Hinweis  Sind zum ausgewählten Filterelement keine Daten vorhanden, wird standardmäßig eine leere Liste angezeigt. Diese kann mit dem Parameter EmptyResult übersteuert werden.


Anwendungsfall

Ziel:

In der Maske Umsatzerlöse IST sollen nur mehr jene Produkte gefiltert werden können, welche in der ausgewählten Region verkauft wurden.

Definition des Rulefilters:

Dazu definiert man folgenden Rulefilter auf der Dimension Produkte:
RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID]);
Parameter Beschreibung
Tabellenname Umsatzerloese_IST
Spaltenname Produkte
Kriterium Regionen/Kunden=[Regionen/Kunden.ID]

Vor dem '=' steht der Spaltenname und danach das Kriterium, das auf die Spalte angewendet werden soll. Mit diesem Ausdruck wird erreicht, dass nur jene Datensätze gefiltert werden, bei denen Regionen/Kunden mit dem ausgewählten Filterelement übereinstimmen.

Ergebnis, wenn Dimension im Filter:

Nach Auswahl der Region Schweiz, können im Produkte-Filter nur mehr jene Produkte ausgewählt werden, die in der Schweiz verkauft worden sind.
Enterprise Edition, Rulefilter mit CoPlanner-Tabellen im Filter

Ergebnis, wenn Dimension auf Achse:

Nach Auswahl der Region Schweiz, werden auf der Achse nur mehr jene Produkte angezeigt, die in der Schweiz verkauft worden sind.
Enterprise Edition, Rulefilter mit CoPlanner-Tabellen auf der Achse


Rulefilter mit SQL-Statements

Es ist auch möglich direkt über ein SQL Statement auf den SQL Server zuzugreifen. Wird der Paramter SqlQuery verwendet so erfolgt eine Sortierung anhand der verwendeten Dimension:

RuleFilter(SqlQuery,Connection String,Bedingung,EmptyResult);

Parameter Beschreibung
SqlQuery Konstante für das SQL Statement, damit der CoPlanner erkennt, dass es sich um ein Statement handelt
Connection String Bezeichnung der SQL Connection (Stage, SystemDB, individuelle Connection)
Bedingung SQL Statement
EmptyResult optionaler Parameter des Rulefilters

Der Paramter SqlQuery kann durch die Konstante SqlQueryWithOrder ersetzt werden. Die Sortierung erfolgt in diesem Fall über das SQL-Statement. RuleFilter(SqlQueryWithOrder,Connection String, Bedingung);

Beispiele

Sollen nur jene Kostenstellen angezeigt werden, für welche Umsatzerlöse am angemeldeten Plan und ausgewählten Unternehmen geplant wurden, ist folgender Rulefilter auf der Dimenstion PC/KST zu hinterlegen:

RuleFilter(SqlQuery,CopSystemDB,select PCKST from Umsatzerloese_Plan where COPSYS_PLAN_ID=@Session_PLAN_ID@ and Unternehmen=[Unternehmen.ID]);


Dieser Filter gibt den Istzeitraum zurück der im Plan eingestellt ist:

RuleFilter(SqlQuery,CopSystemDB, select COPSYS_ID from dim_sys_Time where Datum between(select Istdatenvon from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) and (select Istdatenbis from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) UNION ALL Select 1);

Wird dieser Rulefilter auf der Zeit hinterlegt, können nur einträge gewählt werden, die zwischen Beginn und Ende des Ist-Zeitraumes des aktuellen Plans liegen:

RuleFilter(SqlQuery,CopSystemDB, select COPSYS_ID from [631690024174725168] where Datum between(select Istdatenvon from tb_Planverwaltung where COPSYS_ID IN (select COPSYS_ID from tb_Planverwaltung where COPSYS_ID=@Session_PLAN_ID@)) and (select Istdatenbis from tb_Planverwaltung where COPSYS_ID = @Session_PLAN_ID@) UNION ALL Select 1);

Wenn eine Sortierung anhand des Dimensionsnamens erfolgen soll:

RuleFilter(SqlQueryWithOrder,CopSystemDB,select copsys_id from Produkte where copsys_id > 2 order by copsys_dim_name)

Wenn eine manuelle Sortierung erfolgen soll und Dimensionselemente gefiltert werden müssen gestalltet sich die Abfrage schwieriger da eine Flat View für die Dimension verwendet werden muss. In dem folgenden Beispiel werden aus der Produktedimension anhand der Attribute Kam, Region und ArtikelKurz Elemente gefiltert. Die Sortierung erfolgt anahand des vs_keys. Die Tabelle xxx_DIMFLAT_PRODUKTE muss immer zuvor mit der Stored Procedure sp_SE_Produkt_DimensionToTable befüllt werden.

RuleFilter(SqlQueryWithOrder,CopSystemDB,exec sp_UmsatzKAM_Order [KAM.ID], [Regionen/Kunden.ID], [ArtikelKurz.ID])

Zusätzliche benötigte SQL Dateien: Media:RuleFilterFlatDim.zip

Optionale Parameter des Rulefilters

FilterOperator

Standardmäßig wird als Operator '=' verwendet. Dieser kann mit folgendem Parameter übersteuert werden: „FilterOperator=<Operator>“ Folgende Operatoren können ausgewählt werden:

  • me
  • under
  • me_under
  • not_me
  • first_under
  • me_first_under
  • greater
  • greater_equal
  • less
  • less_equal
  • Like

EmptyResult

Wenn eine Bedinung nicht zutrifft liefert der Rulefilter standardmäßig eine leere Liste. Das Verhalten kann mit folgendem Parameter übersteuert werden: EmptyResult=<Operator> Folgende Operatoren können ausgewählt werden:

  • NoData (Default Wert)
  • AllData - „. AllData“ liefert alle Dimensionselemente, nach Aufbereiten der Security, wenn die Bedingung nicht zutrifft.

Diese Funktion gehört zu den clientseitigen Funktionen.

Beispiele

RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID],FilterOperator=not_me);

RuleFilter(Umsatzerloese_IST,Produkte,Regionen/Kunden=[Regionen/Kunden.ID],EmptyResult=AllData);

Filter auf das Boolfeld ProjekteDim Bool:
RuleFilter(tbl_Projekte_Users,Projekte,ProjekteDim = True);

Filter auf das Boolfeld ProjekteDim Bool und weiterem Filter:
RuleFilter(tbl_Projekte_Users,Projekte,ProjekteDim = True,tbsysUsers=@Session_User_ID@);