Announcement

Collapse
No announcement yet.

Hilfe bei Umarbeitung von Daten aus Stage zu Datawarehouse.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe bei Umarbeitung von Daten aus Stage zu Datawarehouse.

    Hallo erstmal: Ich bin neu hier... und mein erster Post ist natürlich eine dumme Frage *g*

    Ich habe folgendes Problem (Hauptsächlich mit Effizienz und Form):
    Ich habe eine Tabelle, gefüllt mit unbestimmter Anzahl Datensätzen - wenige dutzend bis ca. 1 mio– die ich aus dem Zeiterfassungs-System ziehe.
    Jeder Datensatz ist eine Zeitbuchung eines Mitarbeiters oder des Zeitverwaltungsprogrammes. Es sind unbestimmte Anzahl pro Tag, und nicht eindeutig (Gleichartige Buchung, sogar mit gleichen Werten können vorkommen).

    Nun möchte ich alle Einträge in dieser Tabelle durchgehen und pro Person und Tag EINEN Datensatz in ein Data-Warehouse schreiben (nicht normalisiert).

    Die Stage hat dieses Format:
    Zwischenspeicher:
    BID numeric(12, 0)
    NR_X varchar(15)
    NACHNAME varchar(30)
    VORNAME varchar(20)
    TAG int
    BUCHUNGSKONTO int
    BEZEICHNER varchar(30)
    WERT numeric(10, 2)

    Die Tabelle mit den Zusammengefassten Werten sieht ca. so aus:
    Einträge
    Datum smalldatetime
    ID smallint
    Kostenstelle nvarchar(16)
    Vertrag nvarchar(16)
    Sollstunden numeric(4, 2)
    Arbeitszeit numeric(4, 2)
    Krankenzeit numeric(4, 2)
    Krankprozent numeric(5, 2)
    KindKrankenzeit numeric(4, 2)
    KindKrankprozent numeric(5, 0)

    Mein Problem ist nun, dass ich aufgrund von Werten (z.B. In BUCHUNGSKONTO) die Einträge anders verrechnen, bearbeiten und eintragen muss.

    Ich habe an in ets sowas gedacht:

    DECLARE @BID numeric (12,0),
    @NR_X varchar (15),
    @NACHNAME varchar(30),
    @VORNAME varchar(20),
    @TAG int,
    @BISKTO_AI int,
    @BEZEICHNER varchar (30),
    @WERT numeric (10, 2)

    Declare ALLCURSOR Cursor For Select * From Zwischenspeicher
    Open ALLCURSOR
    Fetch next From ALLCURSOR into @BID, @NR_X, @NACHNAME, @VORNAME, @TAG, @BISKTO_AI, @BEZEICHNER, @WERT

    While @@Fetch_Status=0 Begin
    IF NOT EXISTS (select * FROM Einträge where ID= @NR_X and Datum= DATEADD(day, '01.01.1990', @TAG)
    Begin
    INSERT into Einträge (Datum, ID) VALUES (DATEADD(day, '01.01.1990', @TAG), @NR_X)
    End

    IF EXISTS (select * FROM Einträge where ID= @NR_X and Datum= DATEADD(day, '01.01.1990', @TAG)
    Begin
    IF – Anweisungen für Einträge

    END
    Fetch next From ALLCURSOR into @BID, @NR_X, @NACHNAME, @VORNAME, @TAG, @BISKTO_AI, @BEZEICHNER, @WERT
    End
    Close ALLCURSOR
    Deallocate TAGCURSOR

    Danach würde ich über die Einträge gehen (Liste der veränderten Datensätze speichern?) Und die Prozente berechnen, und die aufeinander Aufbauenden Berechnungen machen. Ausserdem lösche ich den Zwischenspeicher.

    Allerdings glaube ich, dass das nicht besonder effektiv läuft. Hatte eine Idee von verschachtelten Cursorn. (Einer der Tage durchgeht, und einer der in den Tagen die einzelnen Buchungen pro Person durchgeht)

    Kann mich jemand grob in eine Richtung stoßen, oder hat einen Tipp?

    Läuft auf MS-SQL Server 2008
    Baue das Datawarehouse teilweise mit dem BIDS

  • #2
    äh.. ich weiss jetzt nicht, ob das zuviel oder zuwenig Info für mich war - aber da sich bisher niemand gemeldet hat, geb ich mal meinen Senf dazu, ohne zu wissen ob es was hilft - notfalls ignorieren ;

    Viel vermag ich wohl nicht beitragen ...habe auch nicht genau erkannt was da wie gruppiert sortiert und zusammengefasst werden muss vermute nur... denke aber das sollte, wenn in der Tabelle 1 viel mehr Datensätze sind... kann man da denn nicht summieren etc bevor aus dem integer Wert ein Datum umgewandelt wird und der cursor läuft? denke mal soherum sind die Kosten höher...

    aber notfalls ignorieren ... hab nicht 100% verstanden, was du wissen willst...

    Comment


    • #3
      Ah ja, habe oft das Problem nicht genau rüberzubringen was ich meine *g*.

      Also: Das Zusammenfassen ist nicht eine Funktion: einige Werte werden addiert, andere nicht. Einige ersetzen Werte. Viele sind gleichwertig. Ausserdem werden die Werte in anderen Spalten hinterlegt, je nachdem was in BISKTO_AI hinterlegt ist.

      Z.B. könnte ein Mitarbeiter an einem Tag eine Sollzeit haben (8.00 in Wert), sowie einen Krankheitsausfall nach einem halben Tag für 4 Stunden (4.00 in Wert) und einen halben Tag Kranktage (0.5 in Wert)
      Die Logik muss zum Beispiel nun wissen: Der Mitarbeiter braucht einen Eintrag in meiner Einträge-Tabelle. Dort Sollzeit=8.00 , Krankheitsausfall = 4.00, Krankheitsausfall = 0.5 * 8 = 4.00 (Die letzen beiden Buchungen ergeben das gleiche Ergebnis - aber die zweite setzt vorraus eine Sollzeit zu haben)

      Im WERT können Minuten, Stunden, Tage sein (Definiert sich aus dem Eintrag in BISKTO_AI) so muss ich hin-und her rechnen etc.

      Ausserdem habe ich, wie gesagt, unbestimmte Anzahl Buchungen. Pro Mitarbeiter mindestens 2 pro Tag, diese will ich nur "komprimieren" und lesbar ablegen: (Einträge Tabelle)

      Kurz-und knapp: Ganz viele Buchungen reduzieren auf eine einzelne Zeile: Datum, Mitarbeiter, Sollzeit, Arbeitszeit, etc. für bessere Auswertung/Übersicht. Mir ist nur wichtig, dass ich die ganze Sache effizient und "richtig" in die Maschine bringe, so das ich leicht erweitern kann, und keine Fehler passieren. (Ich lerne die ganze Sache mit Data Warehouse, Arbeiten mit dem BIDS - und möchte mir keine schlechte Form angewöhnen)

      Danke schonmal im Vorraus.

      Comment

      Working...
      X