Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
matancha
Creator
Creator

How to load 2 rows to 1 row according parameter

Hello All.

It's look like very simple question...

Please look at the script on the attached qvw.

In this script I has:

LOAD * INLINE [

    ACT, PARAM, COEF

    1, W, 3.66

    1, M, 1

    2, W, 2.5

    2, M, 1

    3, W, 3.4

    3, M, 1.5

];

Now, I want to get a table without duplicity. In this table - for every ACT it will be only 1 row.

So, if the PARAM = 'W' the COEF falue will be under Final.WorkerCoef

AND, if the PARAM = 'M' the COEF falue will be under Final.MachineCoef

Actualy I want to show a Table Box (NOT Chart) look like:

Final.Act Final.MachineCoef Final.WorkerCoef
1 1 3.66
2 1 2.5
3 1.5 3.4

Any suggestions?

Thank you!

1 Solution

Accepted Solutions
Not applicable

You could also do it with preceeding load, but it's a bit harder to understand.

Load

Final.Act
,
MAX(Final.WorkerCoef) As Final.WorkerCoef
,
MAX(Final.MachineCoef) As Final.MachineCoef
Group by Final.Act;
LOAD
ACT AS Final.Act
,
If (PARAM = 'W', COEF) AS Final.WorkerCoef
,
If (PARAM = 'M', COEF) AS Final.MachineCoef
RESIDENT Act;

The second part is your's and you get 6 rows. In preceeding load (first part) I just aggregated the max values.

You have to be careful - these versions only work when you have one W and one M transaction - otherwise you should use some other aggregation function.

Regards,Miha

View solution in original post

4 Replies
Not applicable

Hi,
I would do it with LEFT JOIN, like this:

FinalAct:

LOAD
ACT AS Final.Act
,
COEF AS Final.WorkerCoef
RESIDENT Act
Where PARAM = 'W';

Left Join(FinalAct)
LOAD
ACT AS Final.Act
,
COEF AS Final.MachineCoef
RESIDENT Act
Where PARAM = 'M';

Regards, Miha

matancha
Creator
Creator
Author

Thanks Miha - It's Works!

In your answer the script run twice on the Act table.

Maybe there a way to go over Act only once?

Thks again -

Matan.

Not applicable

You could also do it with preceeding load, but it's a bit harder to understand.

Load

Final.Act
,
MAX(Final.WorkerCoef) As Final.WorkerCoef
,
MAX(Final.MachineCoef) As Final.MachineCoef
Group by Final.Act;
LOAD
ACT AS Final.Act
,
If (PARAM = 'W', COEF) AS Final.WorkerCoef
,
If (PARAM = 'M', COEF) AS Final.MachineCoef
RESIDENT Act;

The second part is your's and you get 6 rows. In preceeding load (first part) I just aggregated the max values.

You have to be careful - these versions only work when you have one W and one M transaction - otherwise you should use some other aggregation function.

Regards,Miha

matancha
Creator
Creator
Author

Thank you Miha.

Thats exactly what I was looking for.

Regards
Matan.