Qlik Community

QlikView App Dev

Discussion Board for collaboration related to QlikView App Development.

Announcements
Read about the latest Qlik Community enhancements on the Community News blog!
cancel
Showing results for 
Search instead for 
Did you mean: 
merry2018
Creator III
Creator III

Zusammenfassen oder Group by einer Tabelle

Hallo Zusammen,

ich brauche mal wieder eure Hilfe, und zwar habe ich eine Tabelle, welche wie folgend aussieht:

IndexFarbeHausNrMaterial
2001rot--
2001-25-
2001--holz
2005blau--
2005-185-
2005--stein

 

Und ich möchte die Zeilen zusammen fassen also alle drei Infos zu dem Index 2001 in einer Zeile und die Infos zur 2005 in der nächsten Spalte, damit es dann wie folgend aussieht:

IndexFarbeHausNrMaterial
2001rot25holz
2005blau185stein

 

Ich habe es versucht mit Group by, aber dazu weiß ich dann nicht wie ich die 3 Felder aggregieren soll, da es ja Textfelder sind und keine Zahlen welchen Summiert werden können oder so.

 

Es muss doch sicher eine Lösung geben oder wer Tipps dazu weis und mir somit helfen kann, ich bitte euch drum.

Grüße
Merry

#Load, #group by, #Tabelle, #aggregieren

Labels (1)
2 Solutions

Accepted Solutions
eddie_wagt
Partner
Partner

Es gibt Alternativen. Hier ist eine andere Lösung

 

Source:
LOAD * INLINE[
Index	Farbe	HausNr	Material
2001	rot		
2001		25	
2001			holz
2005	blau		
2005		185	
2005			stei 
]  (delimiter is '	')
;

Source_new:
NoConcatenate
LOAD Index
,	 SubField(TMP,',',1) 				   as Farbe
,	 SubField(TMP,',',2) 				   as HausNr
,	 SubField(TMP,',',3) 				   as Material
;
LOAD distinct Index
,	 concat(Farbe&HausNr&Material,',') as TMP
Resident Source
Group By Index
;

drop table Source;

View solution in original post

merry2018
Creator III
Creator III
Author

Ok ich glaub es liegt dran, das meine Daten nicht immer für jede Gruppe einen Wert je Sparte hat, somit könnte der Ansatz denk doch passen.

Ich für meinen Fall werde es etwas abwandeln, bzw. etwa so machen:

Source_New:
Load Index, GRP_Farbe, GRP_Haus, GRP_Material ;
Load Index,
concat(Farbe,';') as GRP_Farbe,
concat(HausNr,';') as GRP_Haus,
concat(Material,';') as GRP_Material
resident Source
Group by Index;

View solution in original post

6 Replies
eddie_wagt
Partner
Partner

Hello @merry2018 ,

Use this script to get the result you want.

Source:
LOAD * INLINE[
Index	Farbe	HausNr	Material
2001	rot		
2001		25	
2001			holz
2005	blau		
2005		185	
2005			stei 
]  (delimiter is '	');

LET NoFields = NoOfFields('Source');

For i=2 to $(NoFields)
	LET FieldName = FieldName($(i),'Source');

	TMP:
	LOAD 	Index
	,		'$(FieldName)' 	as TMP_COLUMN1
	,		$(FieldName) 	as TMP_VALUE
	Resident Source
	Where len($(FieldName))>0;

next i
;

drop table Source;

TMP2:
Generic LOAD * Resident TMP;

drop fields TMP_COLUMN1
,			TMP_VALUE
;

OUTPUT:
NoConcatenate LOAD distinct Index Resident TMP;

drop table TMP;

FOR i = NoOfTables()-1 to 0 STEP -1 
  LET vTable=TableName($(i)); 
  IF WildMatch('$(vTable)', 'TMP2.*') THEN 
    LEFT JOIN (OUTPUT) LOAD * RESIDENT    [$(vTable)]; 
    DROP TABLE  [$(vTable)]; 
  ENDIF 
NEXT i
;

 

merry2018
Creator III
Creator III
Author

@eddie_wagt vielen Dank für deine schnelle Antwort.

Ist es indem Fall nicht möglich dies nur mit einem neuen Laden der Tabelle (Resident) zu lösen und einer if Bedingung und Group oder so, ohne diese Schleifen usw. ?

eddie_wagt
Partner
Partner

Es gibt Alternativen. Hier ist eine andere Lösung

 

Source:
LOAD * INLINE[
Index	Farbe	HausNr	Material
2001	rot		
2001		25	
2001			holz
2005	blau		
2005		185	
2005			stei 
]  (delimiter is '	')
;

Source_new:
NoConcatenate
LOAD Index
,	 SubField(TMP,',',1) 				   as Farbe
,	 SubField(TMP,',',2) 				   as HausNr
,	 SubField(TMP,',',3) 				   as Material
;
LOAD distinct Index
,	 concat(Farbe&HausNr&Material,',') as TMP
Resident Source
Group By Index
;

drop table Source;

View solution in original post

merry2018
Creator III
Creator III
Author

Diese Variante hat mir eigentlich gut gefallen und habe ich auch so eingebaut, aber leider baut es die einzelnen Informationen teilweise nicht richtig zusammen oder nimmt es in eine andere Spalte. 

Indem Fall scheint es doch nicht so einfach zu gehen, oder es gibt noch eine andere Variante, wo es geht mit Group und einer anderen Möglichkeit oder so.

Trotzdem Danke und mal sehen ob es noch eine richtig arbeitende Möglichkeit gibt es zu lösen, ich bin gespannt.

 

merry2018
Creator III
Creator III
Author

Ok ich glaub es liegt dran, das meine Daten nicht immer für jede Gruppe einen Wert je Sparte hat, somit könnte der Ansatz denk doch passen.

Ich für meinen Fall werde es etwas abwandeln, bzw. etwa so machen:

Source_New:
Load Index, GRP_Farbe, GRP_Haus, GRP_Material ;
Load Index,
concat(Farbe,';') as GRP_Farbe,
concat(HausNr,';') as GRP_Haus,
concat(Material,';') as GRP_Material
resident Source
Group by Index;

View solution in original post

eddie_wagt
Partner
Partner

Hello @merry2018 , Ich bin froh, dass Sie davon inspiriert waren und dass es jetzt funktioniert.