6 Replies Latest reply: May 27, 2015 4:17 AM by Dimitri Obrant RSS

    How to compare best multiple data sets? (Wie vergleicht man am besten mehrere Datenstände?)

    Andreas Erfurt

      Hello Everybody,

       

      as you can see the title states, I would like to compare multiple data sets together.

      The background is that we have our data overnight (batch jobs) and partly in the morning from our live databases

      Reading (Produktivsystemem) and stays in a separate database (another machine, another database).

      From there, we read the data from QlikView and create from our QVD files with which we feed our applications.

       

      As you can imagine, there are some errors that you can not rule out 100%.

       

      My idea now is that I will make about the "main" tables checksums and this either in more or QVDs

      V memory. Ex. No. orders, total commitment, total order value, number of orders, number order items etc.

       

      I do this every day and always see the last 3-5 days. If there are then large deviations (Ex. 50%), then

      would be for me an indication that a batching went wrong.

       

      This generate and send an alert e-mail would be no problem.

       

      Has an idea as I-converting or maybe even a better idea to solve this problem best?

       

      Thanks in advance!

       

      Translated with Google Translate - Qlik Community Administrative Team

       

      Hallo Zusammen,

       

      wie man dem Titel bereits entnehmen kann, würde ich gern mehrere Datenstände miteinander vergleichen.

      Hintergrund ist, dass wir unsere Daten über Nacht (Batchjobs) und zum Teil morgens aus unseren Live-Datenbanken

      (Produktivsystemem) auslesen und in eine gesonderte Datenbank (andere Maschine, andere Datenbank) stagen.

      Von dort aus lesen wir die Daten mit QlikView aus und erstellen daraus unsere QVD-Dateien mit denen wir unsere Anwendungen füttern.

       

      Wie man sich sicher vorstellen kann, gibt es hier einige Fehlerquellen die man nicht zu 100% ausschließen kann.

       

      Meine Idee ist jetzt, dass ich über die "wichtigsten" Tabellen Prüfsummen bilde und diese entweder in weitere QVDs oder

      Variablen speicher.  Bsp. Anzahl Aufträge, Summe Obligo, Summe Auftragswerte, Anzahl Bestellungen, Anzahl Bestellpositionen etc.

       

      Das mache ich jeden Tag und vergleiche immer die letzten 3-5 Tage. Wenn es dann zu große Abweichungen gibt (Bsp. 50%), dann

      wäre das für mich ein Indiz, dass eine Batchverarbeitung schief gelaufen ist.

       

      Daraus eine Alert-Email erzeugen und versenden wäre dann kein Problem.

       

      Hat einer eine Idee wie ich das am Besten umsetze bzw. vielleicht sogar eine bessere Idee um dieses Problem zu lösen?

       

      Vielen Dank im voraus!

        • Re: Wie vergleicht man am besten mehrere Datenstände?
          Dimitri Obrant

          Hallo,

          erlich zu sagen, verstehe ich nicht ganz, wo das Problem liegt. Bei uns läuft es genau so. Die Daten werden täglich aus Warenwirtschaftssystem in die SQL Datenbank importiert. Danach läuft QlikView und die Daten wandern zuerst in QVD, danach in QVW Datamart und danach ins Frontend ímportiert. Läuft täglich völlig problemlos. Wenn irgendein Schritt ausfällt, dann bleibt halt QlikView mit Daten von gestern. Passiert auch manchmal. Was ist daran falsch?

            • Re: Wie vergleicht man am besten mehrere Datenstände?
              Andreas Erfurt

              Hallo Dimitri,

               

              du hast recht, wenn es irgendwo zu einem Fehler kommt, dann behalten die QlikView-Applikationen den Stand von gestern.

              Was ist aber, wenn es beim stagen zu Problemen kommt? Blockaden, Aufbereitung der Daten noch nicht abgeschlossen, eine View auf dem Server braucht zu lange, bis diese komplett aufgebaut ist und wird durch einen Timeout abgebrochen.

              Das kriegen wir dann nicht mit. Die Tabellen / Views kommen unvollständig oder mit Null-Datensätzen zurück. QlikView holt die Daten ohne Fehler und suggeriert, dass alles ok ist.

               

              P.S. Wir holen die Daten in den meisten Fällen immer komplett per Bulkcopy.

              Das heisst vorher "TRUNCATE" der Zieltabelle.

                • Re: Wie vergleicht man am besten mehrere Datenstände?
                  Dimitri Obrant

                  Hallo Andreas,

                   

                  ich sehe in dem Fall mehrere verschieden Ursachen, die zusammen gemischt worden sind:

                   

                  1. Fehler beim Import in die Datenbank - das muss auf der Datenbank Ebene abgefangen werden bzw. die Admins per E-Mail informieren. An der Stelle trennen wir zwischen Stagearea und Datawarehouse. Die Daten nach stagen werden ins Datawarehouse uebernommen. Gab es Fehler, bleibt es in einer kleinen Tabelle eine  "0" stehen und QlikView update wird gar nicht gestartet. Sonst wird eine 1 am Ende rein geschrieben.

                  2. Import der Daten dauert zu lange. Um den Fehler zu Vermeiden, dass QlikView zu früh startet, starten wir QlikView Tasks per EDX vom SQL Job aus (und nur, wenn es eine 1 ist)

                  3. QlikView Task bricht ab: in dem Fall versendet Publisher eine E-Mail

                  4. Datenintegrität: das fangen wir bereits auf SQL Ebene. Wir machen nur minimal was in QlikView Script selbst, nur wenn es nicht anders geht, oder wenn QlikView wesentlich performanter ist. Sonst werden die Daten in Views entsprechend aufbereitet. QlikView muss die Daten nur importieren.

                    • Re: Wie vergleicht man am besten mehrere Datenstände?
                      Andreas Erfurt

                      Hallo Dimitri,

                       

                       

                      ich sehe ein, dass es wohl mehr Sinn macht die Fehler vorher abzufangen, bevor QlikView mit dem

                      Holen der Daten beginnt.

                       

                      Vielleicht kannst du mir ja noch einen Tipp geben, wie Ihr bei Schritt 1 den Fehler abfängt?

                      Wie gesagt, wir holen die Daten aus MS-SQL per Bulkcopy und importieren diese

                      per SQL-Loader nach ORACLE (alles per Batch).

                      Den Status 0/1 per Datenbank-Trigger setzen verstehe ich.

                       

                      Nochmal vielen Dank!

                        • Re: Wie vergleicht man am besten mehrere Datenstände?
                          Dimitri Obrant

                          Hallo Andreas,

                           

                          wenn ich richtig verstehe, ist dein Problem, dass QlikView inkonsistente Daten hat, wenn der Prozess der Datenbankbefüllung abbricht oder zu lange dauert. Wir trenen das in zwei Ebenen: Stagearea und Datawarehouse. Import der Daten läuft in die Stagearea. Es sind mehrere Jobs und sind voneinander unabhängig. Die Daten werden zuerst in die Importtabellen importiert und dann in die produktive Tabellen kopiert. Wenn sich etwas aufhängt, bleiben die produktiven Tabellen unberührt.

                           

                          Irgendwann mal startet der Job, die bestimmten Daten ins Datawarehouse übernimmt. Am Anfang wird eine 0 gesetzt. Wenn der Prozess bis zu Ende läuft und nicht wegen Dateninkonsistenz abbricht, wird am Ende eine 1 gesetzt und QlikView Befüllung startet. Eine Prozedur prüft vorher ob eine 0 oder 1 ist, und bei Bedarf bricht den Job ab. QlikView zieht die Daten nur aus Datawarehouse.

                           

                          Dadurch wird sicher gestellt, dass QlikView immer richtigen Daten hat. Eure Batch Jobs hätte man auch aus SQL starten können. Dann wären alle Jobs aus einer Quelle und die hätte man besser kontrollieren können.

                  • Re: Wie vergleicht man am besten mehrere Datenstände?
                    Friedrich Hofmann

                    Hi,

                     

                    also, die einzige Fehlerquelle, die ich mir bei diesem Vorgehen vorstellen kann, ist eigentlich, dass irgendeine der zugrundeliegenden Basisdateien (oder greifst Du Datenbanken ab?) nicht aktuell abgelegt wurde. Ansonsten muss dieses Vorgehen ja eigtl funktionieren - wenn Du einen Batch-Job hast und getestet hast, dann funktioniert der und er liefert nicht plötzlich aus einer Laune raus mal falsche Daten ;-) Wenn die Verantwortlichen falsche Daten eingetragen haben, kannst Du nicht viel machen - natürlich könntest Du die Daten einzelner Tabellen aggregieren und irgendwelche Summen mit (wiederum fixen) Werten vergleichen, die so in etwa plausibel sind. Da kommst Du aber dann in Bereiche, wo Du Dich fragen solltest, inwieweit das noch Deine Aufgabe ist. Da kommst Du leicht vom Hundertsten ins Tausendste ...

                     

                    Die aktuelle Ablage zugrundeliegender Dateien kannst Du überprüfen, indem Du mit der Funktion FILETIME() die Änderungszeit von Dateien abfragst. Dazu kannst Du entweder direkt den Pfad zu der Datei angeben (wenn die immer überschrieben wird) oder Du gehst in einer FOR EACH Schleife alle Dateien eines Verzeichnisses durch. Dann vergleichst Du das halt mit TODAY() und Du weißt, ob die Datei aktuell abgelegt wurde.

                     

                    HDH