Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
MartensCPArtis
Contributor III
Contributor III

Spalte mit Werten aus anderer Spalte mit Variablen verrechnen und summieren

Hallo,

ich finde die Ursache nicht, warum in meiner verrechneten Spalte die Summen nicht mit berechnet bzw. dargestellt werden:

MartensCPArtis_0-1692090662161.png

Die Spalte wird berechnet aus der Spalte "Gesamtwert" sowie "Aufschlag in %":

[Gesamtwert]+(([Gesamtwert]*[Aufschlag in %])/100)

 

Selbst wenn ich die Formel komplett in der Spalte selbst errechnen lasse, werden die Summen nicht berechnet:

(sum(if(Kosten.typ = 'Eingangsrechnung' OR Kosten.typ = 'Stundenerfassung' OR Kosten.typ = 'Gutschrift', (Kosten.netto)*-1, Kosten.netto)))+

((

(sum(if(Kosten.typ = 'Eingangsrechnung' OR Kosten.typ = 'Stundenerfassung' OR Kosten.typ = 'Gutschrift', (Kosten.netto)*-1, Kosten.netto)))

*

(if(Kosten.kostengruppe = 'Ausbildungslohn', vAufschlag_Ausbildungslohn,
if(Kosten.kostengruppe = 'Stundenlohn', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Lohnartbeitsstd.', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Vorfertigungsstd.', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Überstunden o. Prozente', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Überstunden 25%', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Überstunden mit 25%', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Überstunden 50%', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Überstunden mit 50%', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Schmutzstunden 30%', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Akkordlohn', vAufschlag_Akkordlohn,
if(Kosten.kostengruppe = 'Akkordsicherheit', vAufschlag_Akkordsicherheit,
if(Kosten.kostengruppe = 'Akkordüberschuss', vAufschlag_Akkordüberschuss,
if(Kosten.kostengruppe = 'Fremdlohnstunden', vAufschlag_Fremdlohn,
if(Kosten.kostengruppe = 'Material', vAufschlag_Material,
if(Kosten.kostengruppe = 'Lagermaterial', vAufschlag_Lagermaterial,
if(Kosten.kostengruppe = 'Fremdleistung', vAufschlag_Fremdleistung,
if(Kosten.kostengruppe = 'Fremdlohn', vAufschlag_Fremdlohn,
if(Kosten.kostengruppe = 'Baunebenkosten', vAufschlag_Baunebenkosten,
if(Kosten.kostengruppe = 'Stundenlohn', vAufschlag_Stundenlohn,
if(Kosten.kostengruppe = 'Fremdleistung_CH+HE', vAufschlag_Fremdleistung_CH_HE,
if(Kosten.kostengruppe = 'Ausbildungslohn', vAufschlag_Ausbildungslohn,
if(Kosten.kostengruppe = 'Akkordlohn', vAufschlag_Akkordlohn,
if(Kosten.kostengruppe = 'Akkordüberschuss', vAufschlag_Akkordüberschuss,
if(Kosten.kostengruppe = 'Akkordsicherheit', vAufschlag_Akkordsicherheit,
if(Kosten.kostengruppe = 'Personalnebenkosten', vAufschlag_Personalnebenkosten,

'0' ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ))

)/100)
 
Was kann die Ursache dafür sein?
Labels (1)
2 Replies
marcus_sommer

Das Total ist im Standard nicht die Summe der Zeilen-Ergebnisse, sondern dort wird über alle Dimensionswerte gerechnet. Für einfache sum(Wert) passt das immer. Wenn jedoch Quoten berechnet werden und/oder Bedingungen enthalten sind, müssen diese auch über alle Dimensionswerte hin, eindeutig und valide sein.

In diesem Fall ist es vermutlich so, dass es auf dieser globalen Dimensionsebene mehrere Werte für die Kostengruppe gibt und da der Zugriff hier per only() erfolgt - jede Feld-Referenz ohne explizite Aggregierung verwendet implizit only - ist dieses Ergebnis NULL.

In manchen Objekt-Typen und Szenarien kann man diese Verhalten im Tab Formeln (rechts unten) über den  Berechnungsmodus bei Gesamtwert anpassen. Ich glaube die Pivot gehört nicht dazu. Um dennoch zu den gewünschten Totals zu kommen, kann man jedoch auch die eigentliche Formel in eine aggr() setzen, wodurch man eine verschachtelte Aggregierung erzeugt. Das sieht dann so aus:

sum(aggr(DeineFormel, Dim1, Dim2))

wobei Dim1 + Dim2 jetzt Platzhalter sind, für den dimensionalen Kontext, in dem die innere Berechnung erfolgen soll. Das sind häufig die Objekt-Dimensionen, kann aber je nach Dataset auch abweichend sein.

Davon abgesehen, würde ich empfehlen, die ganze Herangehensweise nochmal zu prüfen, denn vermutlich geht das alles auch deutlich einfacher, wenn z.B. im Datenmodell die Werte bereits entsprechend positiv oder negativ geladen werden (man kann auch zwei Felder mitführen - einmal alles positiv und das andere mit positiv + negativ). Auch bei der Masse an Variablen könnte ich mir vorstellen, dass man diese besser als Feld-Werte anlegt, um möglichst nahe zu Lösungen wie sum(Wert) oder sum(Wert * Faktor) zu gelangen.

MartensCPArtis
Contributor III
Contributor III
Author

Ich habe den Fehler selbst finden können. Die Summierung war falsch platziert und die Variablen habe ich falsch gesetzt:

sum(

(if(Kosten.typ = 'Eingangsrechnung' OR Kosten.typ = 'Stundenerfassung' OR Kosten.typ = 'Gutschrift', (Kosten.netto)*-1, Kosten.netto))

+
	(

		(

		(if(Kosten.typ = 'Eingangsrechnung' OR Kosten.typ = 'Stundenerfassung' OR Kosten.typ = 'Gutschrift', (Kosten.netto)*-1, Kosten.netto))
	
		)
	
		*
	
		(if(Kosten.kostengruppe = 'Ausbildungslohn', $(vAufschlag_Ausbildungslohn),
			if(Kosten.kostengruppe = 'Stundenlohn', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Lohnartbeitsstd.', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Vorfertigungsstd.', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Überstunden o. Prozente', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Überstunden 25%', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Überstunden mit 25%', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Überstunden 50%', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Überstunden mit 50%', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Schmutzstunden 30%', $(vAufschlag_Stundenlohn),
			if(Kosten.kostengruppe = 'Akkordlohn', $(vAufschlag_Akkordlohn),
			if(Kosten.kostengruppe = 'Akkordsicherheit', $(vAufschlag_Akkordsicherheit),
			if(Kosten.kostengruppe = 'Akkordüberschuss', $(vAufschlag_Akkordüberschuss),
			if(Kosten.kostengruppe = 'Fremdlohnstunden', $(vAufschlag_Fremdlohn),
			if(Kosten.kostengruppe = 'Personalnebenkosten', $(vAufschlag_Personalnebenkosten),
			if(Kosten.kostengruppe = 'Material', $(vAufschlag_Material),
			if(Kosten.kostengruppe = 'Lagermaterial', $(vAufschlag_Lagermaterial),
			if(Kosten.kostengruppe = 'Fremdleistung', $(vAufschlag_Fremdleistung),
			if(Kosten.kostengruppe = 'Fremdlohn', $(vAufschlag_Fremdlohn),
			if(Kosten.kostengruppe = 'Baunebenkosten', $(vAufschlag_Baunebenkosten),
			if(Kosten.kostengruppe = 'Fremdleistung_CH+HE', $(vAufschlag_Fremdleistung_CH_HE), '0' ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ))

		)

	/100
		
	)
	
)


//[Gesamtwert]+(([Gesamtwert]*[Aufschlag in %])/100)