Qlik Community

New to QlikView

Discussion board where members can get started with QlikView.

Announcements
QlikWorld 2020: Join us May 11 - 14, 2020 in Phoenix, AZ. Register early and save $400. Learn More
GK1
New 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
Contributor III

Re: IF THEN ELSE

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
19 Replies
Somasundaram
Contributor III

Re: IF THEN ELSE


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

-Somasundaram
jensmunnichs
Contributor III

Re: IF THEN ELSE

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
New Contributor II

Re: IF THEN ELSE

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
New Contributor II

Re: IF THEN ELSE

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

Re: IF THEN ELSE

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
New Contributor II

Re: IF THEN ELSE

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
Contributor III

Re: IF THEN ELSE

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

lg
GK1
New Contributor II

Re: IF THEN ELSE

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
Contributor III

Re: IF THEN ELSE

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?...]