Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo,
da mir leider noch einige "richtige" Begriffe fehlen - finde ich bisher die Lösung für mein Problem nicht und wende mich daher an die Community - vielleicht kann mich jemand unterstützen?
Iststand
Vorhanden ist eine Tabelle (Excel) mit u.a. folgenden 5 Feldern (Spalten):
ID - Startdatum - Enddatum - Messwertdatum - Messwertergebnis (String/Text)
Die ID ist eindeutig - Startdatum und Enddatum jeweils ebenfalls dazugehörend ....
Bedingt durch die Möglichkeit mehrerer Messwertdaten und -ergebnisse kommen die Datensätze entsprechend zum Teil häufiger vor.
Optimum = Soll/Wunsch
Für JEDEN Tag - angefangen vom Startdatum bis einschliesslich Enddatum - liegt ein Datensatz vor ... (Beispiel IST)
An den Tagen, wo ein reales Messwertergebnis vorliegt, soll dieses eingetragen sein,
bei allen Werten die fehlen, jeweils das Ergebnis fortgeschrieben werden, was am direkt vorhergehenden realen Messwertdatum hängt, ist das erste Messwertdatum später, als das Startdatum, dann soll dieses auch seit Start gelten .... (SOLL/Wunsch - rote Zeilen)
Beispiel IST
ID Startdatum Enddatum Messwertdatum Messwertergebnis
111 05.01.2012 10.01.2012 06.01.2012 abc
111 05.01.2012 10.01.2012 07.01.2012 abf
111 05.01.2012 10.01.2012 09.01.2012 abc
SOLL/Wunsch
ID Startdatum Enddatum Messwertdatum Messwertergebnis
111 05.01.2012 10.01.2012 05.01.2012 abc
111 05.01.2012 10.01.2012 06.01.2012 abc
111 05.01.2012 10.01.2012 07.01.2012 abf
111 05.01.2012 10.01.2012 08.01.2012 abf
111 05.01.2012 10.01.2012 09.01.2012 abc
111 05.01.2012 10.01.2012 10.01.2012 abc
Die Erklärungen für Loop/while o.ä. habe ich versucht nachzuvollziehen - und bin gescheitert.
Vielleicht gibt es irgendwo ein direktes Beispiel, was ich verstehen kann oder jemand kennt die notwendigen Zeilen für das Skript !??!
Das wäre prima.
Bis bald!
Michaela
Michaela,
du bist hier im Forum mit deiner Frage genau richtig. Nur ein kleiner Tip: In den Communities wie 'New to QlikView' wird bevorzugt Englisch gesprochen, macht aber auch nichts, mal auf deutsch zu posten. Es gibt allerdings auch eine deutschsprachige Gruppe:
http://community.qlik.com/groups/german-user-group
So, nun zu deiner Frage, ich denke du kannst das Problem lösen, indem du in drei Schritten vorgehst:
1) Erzeuge die fehlenden Records, die einzelnen IDs mit Startdatum und Enddatum lädst und dann in einer while Schleife alle Messwertdatum Redcords für die ID-Periode erzeugst und mit deiner IST Tabelle joinst
2)+3) Dann lädst du die Tabelle nochmal sortiert nach ID und Messwertdatum (einmal aufsteigend, einmal absteigend) und füllst die fehlenden Messwerte mit den vorangehenden Messwerten auf.
Also so:
IST:
LOAD * INLINE [
ID, Startdatum, Enddatum, Messwertdatum, Messwertergebnis
111, 05.01.2012, 10.01.2012, 06.01.2012, abc
111, 05.01.2012, 10.01.2012, 07.01.2012, abf
111, 05.01.2012, 10.01.2012, 09.01.2012, abc
222, 11.01.2012, 14.01.2012, 12.01.2012, efg
222, 11.01.2012, 14.01.2012, 13.01.2012, hij
];
// Create all needed Messwertdatum records per ID
TMP:
LOAD distinct
ID,
Startdatum,
Enddatum
resident IST;
join (IST) LOAD *,
Date(Startdatum+iterno()-1) as Messwertdatum
resident TMP while Startdatum+iterno()-1 <= Enddatum;
drop table TMP;
// Fill missing records, based on previous date
SOLL1:
Noconcatenate LOAD ID, Startdatum, Enddatum, Messwertdatum,
if(peek(ID) = ID and isnull(Messwertergebnis), peek(Messwertergebnis), Messwertergebnis) as Messwertergebnis
resident IST order by ID, Messwertdatum asc;
drop table IST;
// Fill missing records, based on next date (needed if first Messwertdatum records are not filled)
SOLL:
Noconcatenate LOAD ID, Startdatum, Enddatum, Messwertdatum,
if(peek(ID) = ID and isnull(Messwertergebnis), peek(Messwertergebnis), Messwertergebnis) as Messwertergebnis
resident SOLL1 order by ID, Messwertdatum desc;
drop table SOLL1;
Gruß,
Stefan
Michaela,
du bist hier im Forum mit deiner Frage genau richtig. Nur ein kleiner Tip: In den Communities wie 'New to QlikView' wird bevorzugt Englisch gesprochen, macht aber auch nichts, mal auf deutsch zu posten. Es gibt allerdings auch eine deutschsprachige Gruppe:
http://community.qlik.com/groups/german-user-group
So, nun zu deiner Frage, ich denke du kannst das Problem lösen, indem du in drei Schritten vorgehst:
1) Erzeuge die fehlenden Records, die einzelnen IDs mit Startdatum und Enddatum lädst und dann in einer while Schleife alle Messwertdatum Redcords für die ID-Periode erzeugst und mit deiner IST Tabelle joinst
2)+3) Dann lädst du die Tabelle nochmal sortiert nach ID und Messwertdatum (einmal aufsteigend, einmal absteigend) und füllst die fehlenden Messwerte mit den vorangehenden Messwerten auf.
Also so:
IST:
LOAD * INLINE [
ID, Startdatum, Enddatum, Messwertdatum, Messwertergebnis
111, 05.01.2012, 10.01.2012, 06.01.2012, abc
111, 05.01.2012, 10.01.2012, 07.01.2012, abf
111, 05.01.2012, 10.01.2012, 09.01.2012, abc
222, 11.01.2012, 14.01.2012, 12.01.2012, efg
222, 11.01.2012, 14.01.2012, 13.01.2012, hij
];
// Create all needed Messwertdatum records per ID
TMP:
LOAD distinct
ID,
Startdatum,
Enddatum
resident IST;
join (IST) LOAD *,
Date(Startdatum+iterno()-1) as Messwertdatum
resident TMP while Startdatum+iterno()-1 <= Enddatum;
drop table TMP;
// Fill missing records, based on previous date
SOLL1:
Noconcatenate LOAD ID, Startdatum, Enddatum, Messwertdatum,
if(peek(ID) = ID and isnull(Messwertergebnis), peek(Messwertergebnis), Messwertergebnis) as Messwertergebnis
resident IST order by ID, Messwertdatum asc;
drop table IST;
// Fill missing records, based on next date (needed if first Messwertdatum records are not filled)
SOLL:
Noconcatenate LOAD ID, Startdatum, Enddatum, Messwertdatum,
if(peek(ID) = ID and isnull(Messwertergebnis), peek(Messwertergebnis), Messwertergebnis) as Messwertergebnis
resident SOLL1 order by ID, Messwertdatum desc;
drop table SOLL1;
Gruß,
Stefan
DANKE !
Bin ganz begeistert – es funktioniert einfach!
Und sorry - meinen Englischkenntnissen hatte ich an dieser Stelle nicht getraut, da ich noch nicht einmal die deutschen Begriffe „sauber“ kenne …
Ich werde mich bessern! ☺
LG Michaela
Gesendet: Sonntag, 11. März 2012 12:46
An: Feldhordt, Michaela
Betreff: - Re: Fehlende Datensätze und Werte automatisch generieren
QlikCommunity<http://community.qlik.com/index.jspa>
Re: Fehlende Datensätze und Werte automatisch generieren
erstellt von swuehl<http://community.qlik.com/people/swuehl> in New to QlikView - vollen Thread anzeigen<http://community.qlik.com/message/199773#199773
Gern geschehen.
Wollte auch nur sagen, dass die communities international sind und die inoffizielle Sprache hier englisch ist. Du findest halt schneller Hilfe, je mehr Personen deine Frage auch verstehen können. Natürlich hilft es auch, die "richtigen" Begriffe zu verwenden, aber ich finde, deine Anfrage war da schon sehr gut verständlich.
Wenn du mit einer Antwort hier im Forum zufrieden bist, kannst du auch diese Antwort als 'hilfreich' oder 'richtige Antwort' kennzeichnen, das hilft dann später anderen, schneller einen Überblick über die Diskussion zu gewinnen.
Gruß,
Stefan
Hi Stephan,
thank you for your submission of a solution for Michaela's problem.
I currently have a similar problem: I prepared a document with the price development of materials and the table looks like this:
IST:
LOAD * INLINE [
Material, PriceChanceDate, Price
Bananas, 05.01.2012, 99
Bananas, 05.05.2012, 110
Bananas, 05.09.2012, 104
Apples, 05.01.2012, 22
Oranges, 05.01.2012, 78
Peaches, 11.01.2012, 89
Strawberries, 11.01.2012, 66
Bananas, 05.10.2012, 96
Apples, 05.02.2012, 25
Apples, 05.03.2012, 22
];
What I need is a table that shows the actual price for a Material on a certain date until today.
Can you or anyone help me? I guess it's a basic problem but I would appreciate any help with this.
Thank you, regards,
Sebastian
This is indeed a quite common problem, and you should find some possible approaches here in the community when searching for price book or exchange rate. One approach involves using intervalmatch load prefix in its extended syntax.
Please check these links for some samples:
http://community.qlik.com/message/218622
Hi Stephan,
thanks for the links! This is what I tried:
http://community.qlik.com/thread/10641
Best regards,
Sebastian