Benutzer mit den meisten Antworten
SSIS: Wenn ABC gelesen wird, ABC hinzufügen bis DEF gelesen wird - ab hier DEF eintragen bis GHI gelesen wird ...

Frage
-
Hallo,
von einem Flatfile lese ich folgende Information:
Benutzer abc
Word
Excel
PowerPoint
***
Benutzer def
Excel
***
Benutzer ghi
Word
ProjectNun möchte ich in meiner Datenbank folgende Informationen haben:
abc Benutzer abc
abc Word
abc Excel
abc PowerPoint
abc ***
def Benutzer def (Anmerkung: Kann auch "abc Benutzer def" sein)
def Excel
def ***
ghi Benutzer ghi (Anmerkung: Kann auch "def Benutzer ghi" sein)
ghi Word
ghi ProjectDie Anzahl der in meinem Beispiel genannten Benutzer ist sehr übersichtlich und ändert sich nur ein bis zwei Mal pro Jahr. Deswegen auch die Anmerkungen ;)
Mit einem Derived Column Task kann ich meine Lösung nicht abbilden. Ein Conditional Split ist hier auch fehl am Platz.
Kann mir jemand ein Schlagwort nennen, mit welchem ich meine Lösung abbilden kann?
Dankeschön
Antworten
-
Hallo Stephan,
eine eher ungewöhnliche Anforderung aber durchaus einfach zu lösen und zwar mit eine Script-Komponente vom Typ "Transformation".
Also, einmal ein SSIS Package mit einem Datenfluss-Task anlegen, dort dann eine Flatfile Quelle einfügen und eine "Script-Komponent", auf Nachfrage dann Type = Transformation auswählen, zum Schluß noch die gewünschte Quelle.
In den Eigenschaften der "Script Componente" musst Du die Eingabespalten festlegen (bei mir InputCol benannt) und eine neue Ausgabespalte anlegen, bei mir habe ich sie "LastUserNameCol" genannt. Dann noch das Script selbst bearbeiten, da muss Du nur den nachfolgenden Code in der bereits angelegten Methode "Input0_ProcessInputRow" einfügen sowie die eine Variablendeklaration von lastUserName.
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] public class ScriptMain : UserComponent { private static string lastUserName; public override void Input0_ProcessInputRow(Input0Buffer Row) { if (Row.InputCol.StartsWith("Benutzer")) { lastUserName = Row.InputCol.Substring(8).Trim(); } Row.LastUserNameCol = lastUserName; } }
Das Script prüft, ob der Text mit "Benutzer" beginnt und wenn ja, merkt es scih den Text danach in der statischen Variable lastUserName und dessen Wert wird immer als LastUserNameCol ausgegeben. Ergebnis sieht dann so aus:
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Stephan, W Freitag, 27. Dezember 2013 16:22
Alle Antworten
-
Das Schlagwort dürfte wohl "Normalisierung" sein.
Du solltest das Flat File zuerst mal in normalisierte Form bringen, also Users und Applications und dann die Verbindungsentität UserApplications füllen.
Dannach kannst Du einen Report, wie von Dir gewünscht erzeugen.
Gruss
Henry
-
Hallo Stephan,
eine eher ungewöhnliche Anforderung aber durchaus einfach zu lösen und zwar mit eine Script-Komponente vom Typ "Transformation".
Also, einmal ein SSIS Package mit einem Datenfluss-Task anlegen, dort dann eine Flatfile Quelle einfügen und eine "Script-Komponent", auf Nachfrage dann Type = Transformation auswählen, zum Schluß noch die gewünschte Quelle.
In den Eigenschaften der "Script Componente" musst Du die Eingabespalten festlegen (bei mir InputCol benannt) und eine neue Ausgabespalte anlegen, bei mir habe ich sie "LastUserNameCol" genannt. Dann noch das Script selbst bearbeiten, da muss Du nur den nachfolgenden Code in der bereits angelegten Methode "Input0_ProcessInputRow" einfügen sowie die eine Variablendeklaration von lastUserName.
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] public class ScriptMain : UserComponent { private static string lastUserName; public override void Input0_ProcessInputRow(Input0Buffer Row) { if (Row.InputCol.StartsWith("Benutzer")) { lastUserName = Row.InputCol.Substring(8).Trim(); } Row.LastUserNameCol = lastUserName; } }
Das Script prüft, ob der Text mit "Benutzer" beginnt und wenn ja, merkt es scih den Text danach in der statischen Variable lastUserName und dessen Wert wird immer als LastUserNameCol ausgegeben. Ergebnis sieht dann so aus:
Olaf Helper
[ Blog] [ Xing] [ MVP]- Als Antwort markiert Stephan, W Freitag, 27. Dezember 2013 16:22