Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
GK1
Contributor II
Contributor II

IF THEN ELSE

Guten Tag,

ich habe ein Problem im Qlikview Script.

Ich lade mir aus einer Datenquelle ein Feld Anzahl, in dem Feld befinden sich Zeiten.
Ich möchte prüfen ob die Zeiten gleich oder kleiner 8 Stunden sind, wenn ja soll der Wert als Arbeit_Normal ausgegeben werden. Wenn der Wert größer als 8 Stunden ist, soll die Zeit minus 8 Stunden als Arbeit_Zuschläge ausgegeben werden.

Anzahl                                                        AS Arbeit,
if(Anzahl >= '8', Anzahl - '8')              AS Arbeit_Zuschläge,
if(Anzahl <= '8', Anzahl)                       As Arbeit_Normal

Mit der oben gezeigten Lösung wird mir bei Arbeit und Arbeit_Normal der gleiche Wert ausgegeben. Bei Arbeit_Zuschläge bekomme ich nur eine Null ausgegeben.

Denke ich mache nur einen kleinen Fehler, hoffe ihr könnt mir helfen.

Gerd

1 Solution

Accepted Solutions
gf
Creator III
Creator III

Guten Morgen,
Entschuldige bitte die späte Rückmeldung.
Versuch es bei deinen Formel mit SUM(Arbeit), SUM(Arbeit_Normal) und SUM(Arbeit_Zuschläge).
Dann sollte es funktionieren.

lg

View solution in original post

19 Replies
Somasundaram
Creator III
Creator III


May be try this,.
Anzahl AS Arbeit,
if(Anzahl > '8', Anzahl - '8') AS Arbeit_Zuschläge,
if(Anzahl < '8', Anzahl) As Arbeit_Normal

-Somasundaram

If this resolves your Query please like and accept this as an answer.
jensmunnichs
Creator III
Creator III

I hope you can read English, because I can read German but if I tried to reply in German it'd probably be awful.

Assuming the times in 'Anzahl' are formatted like 'HH:MM:SS' or something similar, comparing to and subtracting '8' won't work like you want it to. The reason for this is that a time formatted like that is actually a much smaller number. For example, 17:00:00 is actually 0,7083. This explains why all your values are seen as less than 8, and you get no values for your field 'Arbeit_Zuschläge'.

One solution for this would be to put HOUR() around every 'Anzahl' to convert the times to hours only. Another option would be to compare to and subtract by '8:00:00' instead (make sure the time is formatted the same way as your 'Anzahl' values).

Hope this helps!
GK1
Contributor II
Contributor II
Author

Das hat leider nicht funktioniert. Es werden dann nur noch Zahlen angezeigt die kleiner 8 sind.

Ich habe auch schon probiert die Anzahl als num(Anzahl) zu definieren, um sicherzustellen das es sich um einen Numerischen Wert handelt.
GK1
Contributor II
Contributor II
Author

Bei dem Feld Anzahl handelt es sich nicht um einen Zeit Wert, es handelt sich um einen Numerischen Wert.
gf
Creator III
Creator III

Guten Morgen GK1,

Ich habe es wie folgt probiert und  es funktioniert wie erwartet.

 

LOAD ANZAHL AS ARBEIT,
if(ANZAHL > '8', ANZAHL - '8') AS Arbeit_Zuschläge,
if(ANZAHL < '9', ANZAHL) As Arbeit_Normal
INLINE [
ANZAHL
2
3
4
5
6
7
8
8
7
9
11
12
14
8
7
];

 

mfg

GK1
Contributor II
Contributor II
Author

Hallo ,

danke für das Feedback, ich habe meinen Fehler erkannt. Meine Datentabelle enthält pro Datum und Personalnummer mehrere Einträge, deshalb hat die Berechnung nicht funktioniert.
Wie kann ich es erreichen das ich eine Summe pro Personalnummer und Datum ermittelt bekomme und danach geprüft wird ob die Anzahl größer oder gleich 8 war und die Aufteilung in Arbeit _Normal oder Arbeit Zuschläge erfolgt?

Viele Grüße
gf
Creator III
Creator III

Da müsstest du ein Group by Personalnummer, Datum machen.
Kannst du die Abfrage mal posten dann kann ich dir besser weiterhelfen.

lg
GK1
Contributor II
Contributor II
Author

Hier die Abfrage:
LOAD num(Personalnummer) AS Personalnummer,
Datum AS Date,
Anzahl AS Arbeit,
if(Anzahl >= '8', Anzahl - '8') AS Arbeit_Zuschläge,
if(Anzahl <= '8', Anzahl) AS Arbeit_Normal
FROM
gf
Creator III
Creator III

LOAD num(Personalnummer) AS Personalnummer,
Datum AS Date,
Anzahl AS Arbeit,
f(ANZAHL > '8', ANZAHL - '8') AS Arbeit_Zuschläge,
if(ANZAHL < '9', ANZAHL) As Arbeit_Normal
FROM
[.. Lädst du hier per SQL-Anweisung?...]