Dieses Script generiert aus einer Tabelle Variablen welche die Formeln für Ihre Anwendung enthalten. Somit können Formelfehler schneller bereinigt werden und man stellt sicher das in allen Apps die gleichen Formeln erstellt werden. Zudem wird eine Übersichtstabelle für die App erstellt, diese kann als Tabelle an der Oberfläche dargestellt werden.
set FieldLanguage = 'DE';
$(Must_Include=$(incPath)BI-Governance-Master.qvs);
Der generelle Aufbau der Tabelle sieht wie folgt aus:
| Name | Value | Description | ReplacVar | used Tables | Lang | generateSA |
| Name der Var | Inhalt der Var | Beschreibung | True / False
Sorgt dafür das die @ Zeichen gegen $ Zeichen ersetzt werden |
Tabelle der Felder für die Berechnung | Sprache der Felder in den Formeln | Komma separierter String mit den Variablen welche die SET ANALYSIS Ausdrücke enthalten. |
In der Tabelle können Set Analysis Ausdrücke in Variablen gespeichert werden und Basisformeln mit den entsprechenden Ausdrücken mit generiert werden.
Bitte beachten Sie das aus technischen Gründen sämtliche $ Zeichen in Set Analysis, durch ein @ Zeichen ersetzt werden müssen und der Wert ReplaceVar auf True gesetzt werden muss. Anderenfalls werden beim Anlegen der Variablen Adhoc Variablen direkt ausgeführt und die Funktion ist nicht mehr gegeben.
Beispiel: Sie benötigen eine Formel Umsatz mit dem Inhalt sum(Umsatz) und möchten diese auch für das aktuelle und Vorjahr nutzen.
| Name | Value | Description | ReplacVar | used Tables |
Lang | generateSA |
| CY | {1<Jahr={@(=max(Jahr))}>} | aktuelles Jahr | True | DE | ||
| LY | {1<Jahr={@(=max(Jahr)-1)}>} | Vorjahr | True | DE | ||
| Umsatz | sum(Umsatz) | Summe der Umsätze | DE | CY,LY |
Generiert an der Oberfläche folgende Variablen mit Inhalt und Beschreibung:
| CY | = {1<Jahr={$(=max(Jahr))}>} | aktuelles Jahr |
| LY | = {1<Jahr={$(=max(Jahr)-1)}>} | Vorjahr |
| Umsatz | = sum(Umsatz) | Summe der Umsätze |
| Umsatz_CY | = sum($(CY)Umsatz) | Summe der Umsätze (aktuelles Jahr) |
| Umsatz_LY | = sum($(LY)Umsatz) | Summe der Umsätze (Vorjahr ) |
Inhalt des gesamten Scripts:
/****************************************************************
* @Project: BI-Governance
*
* @Author: Thomas Lindackers
* @Version: 1.1
*
* @last changes: 22.09.2017
*
*****************************************************************/
//set $(BI-Governance-WhereStatement) = '';
Trace Loading BI-Governance @ $(ProjectName);
Trace ----------------------------------------------------------;
if not isNull(BIGovWhereTables) then
endif;
if not isNull(FieldLanguage) then
Set BIWhere = "Where Lang = '$(FieldLanguage)'";
endif;
if(isNull(FrameworkFile) then
Set FrameworkFile = Framework.xlsx;
EndIf;
[BI_Governance]:
LOAD
Name
, Value
, Description
, ReplaceVar
, [used Table(s)]
, GenerateSA
FROM [$(incPath)$(FrameworkFile)] (ooxml, embedded labels, table is [BI-Governance]) $(BIWhere);
FOR i=0 TO NoOfRows('BI_Governance')-1
LET vVar = Peek('Name', $(i), 'BI_Governance');
LET vVal = Peek('Value', $(i), 'BI_Governance');
LET generateSA = Peek('GenerateSA', $(i), 'BI_Governance');
LET ReplaceVar = Peek('ReplaceVar', $(i), 'BI_Governance');
LET aDesc = Peek('Description', $(i), 'BI_Governance');
if not isNull(ReplaceVar) and ReplaceVar = 'True' then
let '$(vVar)' = '$(vVal)';
let '$(vVar)' = Replace($(vVar),'@','
);
else
let '$(vVar)' = '$(vVal)';
endif
if not isNull(generateSA) and generateSA <> '' then
FOR k=1 to SubStringCount(generateSA,',')+1
let genValue = subfield(generateSA,',',$(k));
let vVarGen = '$(vVar)' & '_' & genValue;
let bDesc = aDesc & ' (' & genValue &')';
trace $(bDesc);
let vValGen =
replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace( '$(vVal)',
'sum(','sum(@('&genValue&') '),
'count(','count(@('&genValue&') '),
'avg(','avg(@('&genValue&') '),
'min(','min(@('&genValue&') '),
'max(','max(@('&genValue&') '),
'count(distinct','count(distinct @('&genValue&') '),
'sum(distinct','sum(distinct @('&genValue&') '),
'avg(distinct','avg(distinct @('&genValue&') '),
'min(distinct','min(distinct @('&genValue&') '),
'max(distinct','max(distinct @('&genValue&') ')
;
trace Generate Expression: $(vVarGen) = $(vValGen);
let '$(vVarGen)' = '$(vValGen)';
let '$(vVarGen)' = Replace($(vVarGen),'@','
);
GenVarsNewValues:
Load
'New' As xxxsource
,'$(vVarGen)' As Name
, '$(vValGen)' As Value
, '$(bDesc)' As Description
, '' As ReplaceVar
, 'GeneratedVar' As [used Table(s)]
, '' As GenerateSA
Autogenerate 1;
Next k;
endif;
NEXT i;
LOAD
Name
, Value
, Description
, ReplaceVar
, [used Table(s)]
, GenerateSA
Resident GenVarsNewValues;
Drop Table GenVarsNewValues;
[BIGovernance]:
LOAD
Name As VariableName
, Replace(Value,'@','
) AS VariableValue
, Description As BI_Description
Resident [BI_Governance] Where [used Table(s)] <> 'QReference';
Drop Table [BI_Governance];