Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
cdseidel
Contributor II
Contributor II

Korrektureinträge berücksichtigen

Hallo,

in einer Tabelle werden Datensätze und Korrekturdatensätze erfasst. Die Korrekturdatensätze enthalten nur bei den geänderten Werten Inhalte größer null.

cdseidel_0-1592317784605.png

Daraus soll eine Tabelle entstehen, die nur einen Datensatz je Schlüssel enthält mit dem letzten gemeldeten Wert > 0.

Der Load für die erste Tabelle:

TEST:
Load * inline
[
KEY, Date, A, B, C, D, E
111, '01.01.2020', 15, 15, 15, 15, 15
111, '02.02.2020', 0, 0, 5, 10, 0
111, '03.03.2020', 25, 0, 0, 25, 5
112, '01.01.2020', 22, 22, 22, 22, 22
112, '02.02.2020', 0, 0, 2, 0, 11
112, '03.03.2020', 0, 25, 25, 11, 0
];

Schon mal vielen Dank

Claus

 

1 Solution

Accepted Solutions
marcus_sommer

Mit der gegebenen Datenstruktur wird es wohl eher nicht möglich sein oder es wird reichlich aufwändig, denn hier sollen ja Datensätze mit Bedingungen gemixt werden. Insofern würde ich die Datenstruktur erstmal transformieren, dann filtern, dann nochmal filtern und/oder flaggen und es vermutlich dann auch in dieser Struktur belassen, also nicht wieder eine Kreuztabelle daraus generieren. Also in etwa so:

t1: crosstable(K, V, 2)
Load * inline
[
KEY, Date, A, B, C, D, E
111, '01.01.2020', 15, 15, 15, 15, 15
111, '02.02.2020', 0, 0, 5, 10, 0
111, '03.03.2020', 25, 0, 0, 25, 5
112, '01.01.2020', 22, 22, 22, 22, 22
112, '02.02.2020', 0, 0, 2, 0, 11
112, '03.03.2020', 0, 25, 25, 11, 0
];

t2: noconcatenate load *, rowno() as RowNo resident t1 where V > 0;

inner join(t2) load KEY, K, date(max(Date)) as Date resident t2 group by KEY, K;

drop tables t1;
exit script;

In einer Pivot lässt sich das dann wie im Zielszenario gezeigt abbilden.

- Marcus

View solution in original post

4 Replies
Anonymous
Not applicable

Hallo,

wenn es im Script passieren soll, dann sollte dies durch die where klausel erledigt sein.  Die Originaltabelle TEST wird gelöscht. Werden beide Tabellen gebraucht, dann müssen, die Spaltennamen geändert werden.

Oder soll dies im Chart erfolgen?

Final:
NoConcatenate load *
Resident TEST
where A*B*C*D*E>0;    // wenn irgendwo eine 0 steht wird Datensatz NICHT genommen

drop table TEST;

cdseidel
Contributor II
Contributor II
Author

Hallo,

das ist genau das, was ich nicht wollte - es werden nur die beiden Ausgangszeilen berücksichtigt:

cdseidel_0-1592902783320.png

Es sollen aber die geänderten Werte aus den nachfolgenden Datensätzen berücksichtigt werden (siehe Zieltabelle in der Excel-Kopie, Zeilen 15 bis 17)

 

 

 

marcus_sommer

Mit der gegebenen Datenstruktur wird es wohl eher nicht möglich sein oder es wird reichlich aufwändig, denn hier sollen ja Datensätze mit Bedingungen gemixt werden. Insofern würde ich die Datenstruktur erstmal transformieren, dann filtern, dann nochmal filtern und/oder flaggen und es vermutlich dann auch in dieser Struktur belassen, also nicht wieder eine Kreuztabelle daraus generieren. Also in etwa so:

t1: crosstable(K, V, 2)
Load * inline
[
KEY, Date, A, B, C, D, E
111, '01.01.2020', 15, 15, 15, 15, 15
111, '02.02.2020', 0, 0, 5, 10, 0
111, '03.03.2020', 25, 0, 0, 25, 5
112, '01.01.2020', 22, 22, 22, 22, 22
112, '02.02.2020', 0, 0, 2, 0, 11
112, '03.03.2020', 0, 25, 25, 11, 0
];

t2: noconcatenate load *, rowno() as RowNo resident t1 where V > 0;

inner join(t2) load KEY, K, date(max(Date)) as Date resident t2 group by KEY, K;

drop tables t1;
exit script;

In einer Pivot lässt sich das dann wie im Zielszenario gezeigt abbilden.

- Marcus

cdseidel
Contributor II
Contributor II
Author

Hallo Markus,

vielen Dank für die Lösung.

Ich habe es mir leichter vorgestellt.....😀

cdseidel_0-1593441457727.png

-Lösung als Pivot und Generic Table

Danke nochmal

Claus