Benutzer mit den meisten Antworten
CAST in SSIS

Frage
-
Hallo Leute,
ich brauch mal wieder eure Hilfe...
ich habe in meinem DWH eine Zeit Dimension. Möchte nun einer anderen Dimension die, das Datum behinhaltet die Schlüssel der Zeittabelle zuordnen und möchte dieses gerne über den Datenfluss_Task des SSIS machen.
wie ich im normalen SQL Management Studio das Select SQL baue, damit ich die ID mit ausgegeben bekomme, das weiß ich, jedoch fehlt mir gerade die nötige erfahrung diese SQL Anweisung in SSIS umzusetzten um die Dimensionstabelle zu Updaten...
hier mal die SELECT Anweisung
select dwhkopf.*, zeit.PS_Datum from dbo.dwhkopf, dbo.Zeit where CONVERT(datetime,convert(char(10),ps_datum,104))= CONVERT(datetime,convert(char(10),dwhaktualisiertam,104))
Ich Möchte halt nun das die PS_Datum an die Dimension DWHKOPF angefügt wird über diesen Join...geht das überhaupt im SSIS uzmzusetzen?!Lösen durch anstarren funktioniert nicht immer LG Chrissy
Antworten
-
Hallo Chrissy,
dachte ich mir, ist eine durchaus gängige Methode, den Zeitanteil zu entfernen.
Wenn den Datumswert zugleich der PK der Zeitdimension ist, brauchst Du den "PK" doch gar nicht extra zu ermitteln. In den Fakten hast Du doch auch die Datumswerte mit Uhrzeit, also dort wieder die Uhrzeit entfernen und schon hast Du den FK Wert; ein Lookup ist nicht nötig.
Wenn Du die AdventureWorks DW 2008R2 mit älteren Version vergleichst, dann wirst Du eigentlich nur eine nennenswerte Änderung finden und das ist in der Zeittabelle; dort wurde der PK von datetime auf int geändert und das aus einfachem Grund: Ein datetime braucht 6 Byte Speicherplatz, Int aber nur 4 Bytes und kann trotzdem einen größeren Datumsbereich abdecken. 2 Bytes Unterschied hört sich nicht nach viel an, aber bei ein paar Datumswerte in den Fakten bei ein paar hundert Mio Fakten macht sich der Unterschied schon bemerkbar; insbesondere auch später im Cube.
Wenn Du die Zeittabelle über BIDS hast erstellen lassen, kannst/solltest Du diese nicht ändert, den sonst kannst Du sie nicht mehr per BIDS füllen lassen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 2. August 2012 13:03
-
Guten Morgen Olaf,
Das Problem ist, das meine Faktentabelle nicht die Tabelle ist, mit der ich die Zeit abgleichen will. Eine meine Diemensionstabellen enthät ein Datetime, das sich aktualisiert am nennt. Dort sind die Zeiten, die ich benötige. Diese sind jedoch auch mit Uhrzeit. Da die Zeitentabelle automatisch mit SSAS erstellt worden ist, enthält der PK (der ja auch Datetime ist) alle Uhrzeiten 00:00:00 deswegen schneide ich diese ab, damit ich sie mit der aktualiesiert am vergleichen kann, um herauszufinden, welche ID die einzelnen Datensätze haben.
War wahrscheinlich mein Fehler, dass ich nicht drauf geachtet habe, dass der PK zum Datetime gemacht worden ist und muss nun damit leben. Es funktioniert aber auch so. Sind nur "200.000" Datensätze und ein recht kleiner Cube mit 10 Dimensionen. Die Performance ist somit nicht wesentlich beeinträchtigt.
Aber danke trotzdem.
Achso. Habe um diesen FK in der nötigen Tabelle zu integrieren übrigens ein SQL-Task genommen und eine Update Anweisung eingefügt.
Danke
Lösen durch anstarren funktioniert nicht immer LG Chrissy
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 2. August 2012 13:03
Alle Antworten
-
Hallo Chrissy,
Werte aus einer anderen Tabelle kannst Du über eine Lookup Transformation (Transformation für Suche) ermitteln.
Dein SQL Statement wundert mich etwas, Du konvertierst den Datumswert (?) erst in Char und dann wieder zurück in DateTime; weshalb, um den Uhrzeit-Anteil zu entfernen?
Dein PK der Zeitdimension ist vom Type DateTime? Dann ist ein Lookup doch gar nicht nötig, den Wert hast Du doch schon in den Fakten.
Mit einem Int Wert im Format YYYYMMDD wäre es übrigens einfacher + performanter.Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo Olaf,
ich lasse die Zeit Dimension von SSAS automatisch erstellen, und da gibt er mir den PK als Datetime aus...
Ja ich Konvertiere den Datuimswert um die Uhrzeit abzuschneiden...ich wusste nicht, wie ich es sonst machen sollte...
Kann ich denn den PK der Zeiut tabelle iwie auf INT umsetzten?!
Lösen durch anstarren funktioniert nicht immer LG Chrissy
-
Hallo Chrissy,
dachte ich mir, ist eine durchaus gängige Methode, den Zeitanteil zu entfernen.
Wenn den Datumswert zugleich der PK der Zeitdimension ist, brauchst Du den "PK" doch gar nicht extra zu ermitteln. In den Fakten hast Du doch auch die Datumswerte mit Uhrzeit, also dort wieder die Uhrzeit entfernen und schon hast Du den FK Wert; ein Lookup ist nicht nötig.
Wenn Du die AdventureWorks DW 2008R2 mit älteren Version vergleichst, dann wirst Du eigentlich nur eine nennenswerte Änderung finden und das ist in der Zeittabelle; dort wurde der PK von datetime auf int geändert und das aus einfachem Grund: Ein datetime braucht 6 Byte Speicherplatz, Int aber nur 4 Bytes und kann trotzdem einen größeren Datumsbereich abdecken. 2 Bytes Unterschied hört sich nicht nach viel an, aber bei ein paar Datumswerte in den Fakten bei ein paar hundert Mio Fakten macht sich der Unterschied schon bemerkbar; insbesondere auch später im Cube.
Wenn Du die Zeittabelle über BIDS hast erstellen lassen, kannst/solltest Du diese nicht ändert, den sonst kannst Du sie nicht mehr per BIDS füllen lassen.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 2. August 2012 13:03
-
Guten Morgen Olaf,
Das Problem ist, das meine Faktentabelle nicht die Tabelle ist, mit der ich die Zeit abgleichen will. Eine meine Diemensionstabellen enthät ein Datetime, das sich aktualisiert am nennt. Dort sind die Zeiten, die ich benötige. Diese sind jedoch auch mit Uhrzeit. Da die Zeitentabelle automatisch mit SSAS erstellt worden ist, enthält der PK (der ja auch Datetime ist) alle Uhrzeiten 00:00:00 deswegen schneide ich diese ab, damit ich sie mit der aktualiesiert am vergleichen kann, um herauszufinden, welche ID die einzelnen Datensätze haben.
War wahrscheinlich mein Fehler, dass ich nicht drauf geachtet habe, dass der PK zum Datetime gemacht worden ist und muss nun damit leben. Es funktioniert aber auch so. Sind nur "200.000" Datensätze und ein recht kleiner Cube mit 10 Dimensionen. Die Performance ist somit nicht wesentlich beeinträchtigt.
Aber danke trotzdem.
Achso. Habe um diesen FK in der nötigen Tabelle zu integrieren übrigens ein SQL-Task genommen und eine Update Anweisung eingefügt.
Danke
Lösen durch anstarren funktioniert nicht immer LG Chrissy
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 2. August 2012 13:03