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