6 Replies Latest reply: Dec 3, 2012 5:45 AM by sebastian9 RSS

    Fehlende Datensätze und Werte automatisch generieren

    Michaela Feldhordt

      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

        • Re: Fehlende Datensätze und Werte automatisch generieren
          Stefan Wühl

          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