2 Replies Latest reply: Dec 20, 2013 6:55 AM by Friedrich Hofmann RSS

    Performance - COUNT(DISTINCT)_mit_zwei_Set_Ausdr. ersetzen

    Friedrich Hofmann


      Hi,

       

      in einem meiner Diagramme (die Anwesenheitsquote) muss ich relativ oft die Pers_Nrn zählen. Aktuell sieht das (sinngemäß) so aus

      - Die Tabelle hat einen Datensatz pro MA pro Tag

      - Ich zähle also die Pers_Nrn

           - da wo ein binäres Feld für Urlaub den Wert 0 hat

           - und ein zweites binäres Feld für Dienstfrei ebenfalls 0 ist

       

      Diese Zahl kommt wie gesagt ziemlich häufig vor und ich hab so im Kopf, daß die Set_Analyse rel. ressourcenhungrig ist?`

      => Jetzt bin ich auf die idee gekommen, einfach im Skript durchzuzählen und die beiden Set_Ausdrücke einfach durch
            WHErE-Bedingungen nachzustellen, dann hätt ich ein fixes Feld zum Darstellen, das ja auf alle User-Selektionen reagiert.

       

      <=> Damit komm ich nicht so ganz klar:

      - Meine aktuell finale Tabelle (auf der also die Darstellung basiert) hat die Felder (u.a.)

           - Pers_Nr

           - Datum

           - Urlaub

           - dienstfrei

           - Werk

           - Ber_Ober

           - Ber_Unter

      (das sind zum. die Felder, die für diese Sache relevant wären)

       

      => Kann mir da jemand mit der Syntax helfen? Ich bräuchte ja einen COUNT(DISTINCT) mit zwei WHERE-Klauseln - also brauch ich ein GROUP_BY. Das geht aber in dieser Tabelle nicht. Ich brauch also noch einen RESIDENT LOAD, oder? Die Pers_Nr muss ich da rauslassen, aber die drei Mapping-Felder (Werk, Ber_Ober, Ber_Unter) müssen rein, oder?

       

      Danke vielmals!

      Best regards,

       

      DataNibbler

        • Re: Performance - COUNT(DISTINCT)_mit_zwei_Set_Ausdr. ersetzen
          Stefan Wühl

          Vielleicht in etwa so:

           

          LOAD

                count(DISTINCT Pers_Nr) as CountFeld,

               Datum,

               Werk,

               Ber_Ober,

               Ber_Unter    

          RESIDENT YourTable WHERE Urlaub = 0 and dienstfrei = 0 GROUP BY Datum,Werk,Ber_Ober,Ber_Unter;

           

          Eventuell besser einen Surrogate-Key aus Datum, Werk, Ber_Ober und Ber_Unter erzeugen, um mit der Originaltabelle zu linken.

            • Re: Performance - COUNT(DISTINCT)_mit_zwei_Set_Ausdr. ersetzen
              Friedrich Hofmann

              Hi swuehl,

               

              genau, so hatte ich es auch schon probiert - aber das hat noch nicht funktioniert: Die Originaltabelle brauch ich doch dann gar nicht mehr, oder? Wenn ich durch diesen RESIDENT LOAD schon eine neue erzeugt hab - dann kann ich die alte DROPpen und die neue einfach umbenennen, um wieder den gleichen Namen zu haben.

               

              => Jetzt scheint das sogar zu funktionieren. Was so eine halbe Stunde Pause manchmal ausmacht ... vorher hatte ich wohl irgendeinen Wurm drin.

              Das wird das ganze schon etwas verschlanken, weil ich diesen COUNT_DISTINCT_mit_zwei_Setausdrücken vormals schon in der Quote je zweimal gebraucht hab, dann bei den historischen Werten 2x2mal und bei der Statusampel, die ich in jeder Darstellung drin hab, noch zweimal.

              Danke vielmals!

              Gruß,

               

              DataNibbler