Qlik Community

New to QlikView

Discussion board where members can get started with QlikView.

Announcements
Modernize Your QlikView Deployment webinar, Nov. 3rd. REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
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
Highlighted
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
Highlighted
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
Highlighted
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!
Highlighted
Contributor II
Contributor II

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.
Highlighted
Contributor II
Contributor II

Bei dem Feld Anzahl handelt es sich nicht um einen Zeit Wert, es handelt sich um einen Numerischen Wert.
Highlighted
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

Highlighted
Contributor II
Contributor II

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

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