Qlik Community

QlikView App Dev

Discussion Board for collaboration related to QlikView App Development.

Announcements
Read about the latest Qlik Community enhancements on the Community News blog!
cancel
Showing results for 
Search instead for 
Did you mean: 
merry2018
Creator III
Creator III

Berechnen des wöchentlichen Durchschnitts

Hallo Zusammen,

ich habe ein Diagramm, welches mir die wöchentlichen Werte darstellt. Bei manchen Teilen gibt es für jede Woche Werte und bei anderen nur alle zwei Wochen, deshalb benötige ich eine z. b. Positionslinie, welche mir den Wöchentlichen Durchschnitt darstellt.

Dazu muss ich aber zuerst ermitteln wieviel Wochen angezeigt werden, also die erste und letzte ermitteln und daraus eine Differenz bilden. Leider bekomme ich nur teilweise die erste und letzte Woche ermittelt und dann aber keine Differenz gebildet.

Versucht habe ich es mit folgender Formel:

=sum(Menge)

/

(

num(Week(max(Datum)))

-

Week(Min(Datum))

)

oder mit:

Count(Week)

Was aber leider nicht klappt.

Um ein Beispiel des Diagramms zu haben:

lieferterminvorschau-schnitlinieN.pngDer Zeitraum erschließt sich über 13 Wochen und die Gesamtsumme sind 136'000, somit müsste eine Linie bei ca 10'461 sein, aber den Wert "13" bekomme ich eben nicht ermittelt.

Ich hoffe es kann mir jemand weiterhelfen.

Gruß

Merry

1 Solution

Accepted Solutions
marcus_sommer
MVP & Luminary
MVP & Luminary

In der Form lässt es sich nicht verschachteln, da Set Analysis von der Logik her wie eine where-clause funktioniert, bei der ein FELD gegen eine Bedingung geprüft wird, die dann je nachdem WAHR oder FALSCH zurück gibt. Hier in Deinem Fall könnte es dann vielleicht so aussehen:

week(min({< Datum = {"=

rangesum(sum({<Doctype={'Auft'},feld1={'no'},feld2={'no'}>}Menge1-Menge2),

                 sum({<Doctype={'Abr'},feld3={'yes'}>}Menge1-Menge2))>0"}>} total Datum)) 

Sowas ist aber auch vom Datenmodell abhängig und es kann sein, dass wenn die jeweiligen Felder aus verschiedenen Tabellen kommen, dass dann die Set Analysis nicht funktioniert. Dann könnte man es auch so versuchen:

if(rangesum(sum({<Doctype={'Auft'},feld1={'no'},feld2={'no'}>}Menge1-Menge2),

                    sum({<Doctype={'Abr'},feld3={'yes'}>}Menge1-Menge2))>0,

week(min(total Datum)))

Sofern es am Ende aber nur darum geht, ob Menge1 und Menge2 überhaupt Werte enthalten, könnte man auch einfach beide Felder in die Set Analysis aufnehmen und die sum() mit den Bedingungen aus der Logik rauslassen, wie:

week(min({< Menge1 = {'*'} > + < Menge2 = {'*'}>} TOTAL Datum))

- Marcus

View solution in original post

10 Replies
Frank_Hartmann
Master II
Master II

Kannst du eine Beispiel qwv hochladen, die dein Problem zeigt?

Wahrscheinlich benutzt du keinen Mastercalender und somit werden jene KWs in denen keine Datenpunkte verfügbar sind nicht mitgezählt...

merry2018
Creator III
Creator III
Author

Das ist etwas schwierig, da diese zu umfangreich ist und zu viele Informationen, aber es ist nur ein Kalender, der für alle Datums verwendet werden und aus der zweiten Tabelle, welche die Infos zur Menge der Teile hat, werden die restlichen Infos genommen. Diese beiden Tabellen sind über das Datumsfeld verbunden.

marcus_sommer
MVP & Luminary
MVP & Luminary

Probiere es mal mit:

num(Week(max(TOTAL Datum))) 

Week(Min(TOTAL Datum) + 1)

- Marcus

merry2018
Creator III
Creator III
Author

Ändert leider auch nichts am Ergebnis, also es bringt entweder zu viele oder Zuwenig Wochen und nur manchmal stimmt die Anzahl.

Hat sonst noch jemand eine Idee?

marcus_sommer
MVP & Luminary
MVP & Luminary

In meiner obigen Empfehlung ist ein kleiner Fehler und die + 1 müsste hinter der letzten Klammer stehen und nicht davor. Wenn ich Deine Antwort richtig interpretiere, wird das aber hier nicht das entscheidende sein.

Ohne weiteren Input wird es aber recht schwierig werden, herauszufinden was anders als gedacht ist. Erstelle mal so eine Tabelle wie im oberen Screenshot, nur mit dem Datum als Dimension und sum(Menge), sum(TOTAL Menge) sowie den min/max-Week mit und ohne TOTAL vom Datum als Formeln und falls das dann nicht bereits die Ursache aufzeigt, poste davon einen Screenshot.

- Marcus

merry2018
Creator III
Creator III
Author

Also ich habe die Tabelle mal aufgebaut und sehe im Prinzip auch warum er mir die falschen Werte gibt, aber ich bekomme die Nullwerte nicht ausgeblendet.

Aussehen tut die Tabelle nun folgend:

lieferterminvorschau-tabelle.jpg

Wie kann ich jetzt die Woche 22 als Beginn und Woche 34 als Ende ermitteln, damit ich eine korrekte Differenz von 12 bekomme?

Danke und Gruß

Insa

marcus_sommer
MVP & Luminary
MVP & Luminary

Bei einer Selektion der entsprechenden Datumswerte sollte das eigentlich so funktionieren, wie oben beschrieben. Falls keine Selektionen gesetzt werden sollen oder das nicht funktiniert, müsste man die Formel mit entsprechenden Filtern versehen, z.B.

week(min({< Menge = {'*'}>} TOTAL Datum))

oder

week(min({< Menge = {">0"}>} TOTAL Datum))

- Marcus

merry2018
Creator III
Creator III
Author

Vielen Dank für die Hilfe.

Ja genau das ist das Thema, es soll eben auch funktionieren ohne das der Datumsbereich ausgewählt ist.

Ich habe die Formel eingesetzt, aber da meine Menge aus einer umfangreichen Formel zusammengebaut ist, lässt sich das nicht so anwenden, sondern hat ein Problem mit dem Zusammenbauen.

week(min({<

(sum({<Doctype={'Auft'},feld1={'no'},feld2={'no'}>}Menge1-Menge2)
+
sum({<Doctype={'Abr'},feld3={'yes'}>}Menge1-Menge2)
)

={">0"}>}total Datum))

Und zwar unterstreicht es mir die Klammer in der Zeile 8 und sagt "Error in set modifier Expression".

Ist das Verschachteln wie ich es tue nicht möglich, oder muss ich dabei noch was weiteres Beachten?
Oder kann ich die Berechnung villeicht davor machen und das Ergebnis in einer Variable zwischen Speichern?

-Merry

marcus_sommer
MVP & Luminary
MVP & Luminary

In der Form lässt es sich nicht verschachteln, da Set Analysis von der Logik her wie eine where-clause funktioniert, bei der ein FELD gegen eine Bedingung geprüft wird, die dann je nachdem WAHR oder FALSCH zurück gibt. Hier in Deinem Fall könnte es dann vielleicht so aussehen:

week(min({< Datum = {"=

rangesum(sum({<Doctype={'Auft'},feld1={'no'},feld2={'no'}>}Menge1-Menge2),

                 sum({<Doctype={'Abr'},feld3={'yes'}>}Menge1-Menge2))>0"}>} total Datum)) 

Sowas ist aber auch vom Datenmodell abhängig und es kann sein, dass wenn die jeweiligen Felder aus verschiedenen Tabellen kommen, dass dann die Set Analysis nicht funktioniert. Dann könnte man es auch so versuchen:

if(rangesum(sum({<Doctype={'Auft'},feld1={'no'},feld2={'no'}>}Menge1-Menge2),

                    sum({<Doctype={'Abr'},feld3={'yes'}>}Menge1-Menge2))>0,

week(min(total Datum)))

Sofern es am Ende aber nur darum geht, ob Menge1 und Menge2 überhaupt Werte enthalten, könnte man auch einfach beide Felder in die Set Analysis aufnehmen und die sum() mit den Bedingungen aus der Logik rauslassen, wie:

week(min({< Menge1 = {'*'} > + < Menge2 = {'*'}>} TOTAL Datum))

- Marcus

View solution in original post