Qlik Community

Ask a Question

QlikView Administration

Discussion Board for collaboration on QlikView Management.

Announcements
Join us for a live Q&A! September 21, 10 AM ET - Onboarding Fast in Qlik Sense SaaS! REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
merry2018
Creator III
Creator III

Aufsummieren der Werte einer Dimension

Hallo Zusammen,

ich bräuchte mal wieder eure Hilfe und zwar geht es um die Aggregierungs Funktion welche ich in einer Tabelle benötige, zu mindestens vermute ich das es mit dieser Funktionieren sollte.

Und zwar habe ich folgende Tabelle:

AuftragAktivitaetPositionProduktionsMengeMengeGutMengeAuschussAusschussAggregiert
11112341060059911
11112352060059901
11112363060059723
11112374060059525
2221244

10

4003505050
2221245

20

4003401060
2221246

30

4003202070

 

Und ich möchte die letzte Spalte (AusschussAggregiert) mit einer Formel berechnen, und zwar soll je Auftrag der Ausschuss aufaddiert werden und auch immer die jeweilige Summe bis zu dieser Position hin angezeigt werden.

Versucht habe ich es mit folgender Formel:

 

sum(aggr(sum(MengeAuschuss),Auftrag))

 

aber damit wird immer nur die letzte Zahl des Auftrages angezeigt, also in unserem Beispiel nur die 5 und 70, bei den anderen Zeilen ist eine '0'.

Oder mit dieser Erweiterung der Formel "+above(sum(MengeAusschuss))" also:

 

 

sum(aggr(sum(MengeAuschuss)+above(sum(MengeAusschuss)),Auftrag))

 

 

 Aber eigentlich sollte es eine Ergänzung geben, bei welcher ich sage nach was ich innerhalb des Auftrages Sortieren will und wie, also z.b. folgende Ergänzung:  (Position,  (NUMERIC, ASCENDING)))  aber damit funktioniert es garnicht und bringt nur Fehler.

 

Wer kann mir sagen was ich übersehen habe oder wo ich etwas vergessen habe oder anders machen sollte??

 

Grüße
Merry

 

Labels (4)
2 Solutions

Accepted Solutions
merry2018
Creator III
Creator III
Author

Ich hab selber vermutlich eine Lösung gefunden, wenn es sonst noch jemand benötigt.

Mit folgender Formel:

RangeSum(Above(TOTAL Sum(MengeAusschuss), 0, Aggr(RowNo(), Auftrag,Position))) 

 

View solution in original post

marcus_sommer
MVP & Luminary
MVP & Luminary

Sowas kann man mit peek() machen:

load *,
   if(TeileNummer = previous(TeileNummer),
   rangesum(Menge, peek('KummulierteMenge')), Menge) as KummulierteMenge
resident Source order by TeileNummer, Position;

- Marcus

View solution in original post

14 Replies
marcus_sommer
MVP & Luminary
MVP & Luminary

Probiere es mal mit:

rangesum(above(sum(MengeAusschuss), 0, rowno(total)))


- Marcus

merry2018
Creator III
Creator III
Author

Das habe ich fast so in der Art auch schon probiert nur mit der Position statt rowno(total) und leider funktioniert es nicht, bzw. gibt nur die Spalte MengeAusschuss so wieder wie sie bereits ist.

marcus_sommer
MVP & Luminary
MVP & Luminary

Also grundsätzlich funktioniert dieser Ansatz schon - es hängt aber auch immer vom Aufbau der Tabelle und den enthaltenen Dimensionen ab, wie aufwändig sowas wird. Insofern ist es empfehlenswert, diese so einfach wie möglich zu halten, um mit der "normalen" Interrekord-Funktion bzw. den zusätzlichen TOTAL's hinzukommen. Das meint (ohne Berücksichtigung einer Range-Funktion):

above(Formel, Start, Anzahl)
   oder
above(Formel, Start, rowno(TOTAL))
   oder
above(TOTAL Formel, Start, Anzahl)
   oder
above(TOTAL Formel, Start, rowno(TOTAL))

Wenn das nicht ausreicht, muss man tatsächlich Start und Anzahl individuell berechnen - mit oder ohne aggr() und eventueller Skript-Unterstützung. Daher nimm mal aus der Tabelle alles raus, was für diese Kumulationssicht nicht zwingend benötigt wird und probiere es noch mal.

- Marcus

merry2018
Creator III
Creator III
Author

Ich hab nun alle Spalten ausgeblendet, bis auf den Auftrag und die Position und leider klappt keine deiner Formeln, aber wenn ich es folgend ergänze:

 

rangesum(above( TOTAL
Sum (MengeAusschuss)
,0,RowNo(total)))

 

würde es gehen, abgesehen davon das er über alle Aufträge die Werte aufsummiert und nicht je Dimension(Auftrag).

Wie könnte ich dies noch mit rein bringen?

 

Gruß Merry

merry2018
Creator III
Creator III
Author

Ich hab es gerade selber rausgefunden, also vermutlich sollte es mit der Formel von oben und noch etwas erweitert, zu folgender Endformel passen:

Aggr(rangesum(above( total
    Sum (MengeAusschuss)
,0,RowNo(total))),Auftrag,Position)

 

Vielen Dank noch für die Unterstützung beim Hinführen zu der Formel.

Grüße
Merry

merry2018
Creator III
Creator III
Author

ok leider klappt es doch nur meistens, bei manchen Aufträgen summiert er immer noch übergreifend weiter, gibt es noch etwas um die Auswahl sicherer zu halten bei der Formel?

 

marcus_sommer
MVP & Luminary
MVP & Luminary

Die aggr() wie Du sie jetzt - ohne äußere Aggregation - einsetzt, ist eigentlich eine berechnete Dimension und keine "normale" Objekt-Formel. Man könnte jetzt versuchen, diese um eine äußere Aggregation zu erweitern, wobei diese möglicherweise dann auch die entsprechenden Set Analysis und TOTAL aufweisen müsste. Alternativ könnte man es auch mit dem NODISTINCT Zusatz in der aggr() probieren.

Ich schlage jedoch vor, erstmal ohne aggr() zu einer Lösung zu kommen und vielleicht noch mal ganz von vorn anzufangen, also Auftrag und Position als Dimension sowie:

sum(MengeAusschuss)

rangesum(above(sum(MengeAusschuss), 0, rowno(total)))

als Formeln. In einer vergleichsweise ähnlichen Konstellation funktioniert das jedenfalls bei mir.

Eine Beeinflussung der Ergebnisse könnte auch durch verschiedene Objekt-Settings hervorgerufen werden - ich nutze nahezu immer die Default-Werte, also keine Kumulierung bei den Formeln sowie bei den Gesamtwerten immer über alle Werte (Tab Formeln), NULL als Formelergebnis wird ausgeblendet (Tab Präsentation), keine Gesamtwerte (Tab Beschränkungen), vermutlich noch weitere - hier wäre ein Check angebracht.

Wichtig bei einem trial & error Ansatz ist auch, möglichst systematisch und auch kleinteilig (also auch bestimmten Formelteile extra zu testen) vorzugehen, da man sonst unter Umständen dieselbe Konstellation mehrfach testet und die richtige Richtung aber verpasst.

- Marcus

merry2018
Creator III
Creator III
Author

Mit nodistinct klappt es nicht und mit einem vorangestellten sum, also um die aggr herum klappt es so auch noch nicht. 

Deine Formel bringt mir leider nicht mehr wie ich bereits schon erwähnt hatte und auch die standardDefault Einstellungen habe ich überprüft und auch meistens so gelassen wie sie waren. 

 

Wenn irgendjemand eine andere Idee hat warum es teilweise Dimensionübergreifend aufsummiert wäre ich sehr dankbar, anonsten ja werde ich morgen mal versuchen es unterschiedlich zusammen zu bauen um evtl. irgendwie auf eine lösung zu kommen.

Danke vorerst und grüße
Insa 

merry2018
Creator III
Creator III
Author

Ich hab selber vermutlich eine Lösung gefunden, wenn es sonst noch jemand benötigt.

Mit folgender Formel:

RangeSum(Above(TOTAL Sum(MengeAusschuss), 0, Aggr(RowNo(), Auftrag,Position))) 

 

View solution in original post