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