Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Field with the Opposite of a Value

Hello!

I have a table with the following data:

ACCOUNT_IDSTATUS
001PLANNED
002INSPECTED
003SUSPENDED
004SELECTED
005PLANNED
006SELECTED
007PLANNED
008SUSPENDED
009SELECTED

What I want is to create a new field, OPPOSITE_STATUS with the following values:

  • NOT PLANNED: I see those ACCOUNT_IDs with another STATUS than PLANNED
  • NOT INSPECTED: I see those ACCOUNT_IDs with another STATUS than INSPECTED
  • NOT SUSPENDED: I see those ACCOUNT_IDs with another STATUS than SUSPENDED
  • NOT SELECTED: I see those ACCOUNT_IDs with another STATUS than SELECTED

For example:

If I have a listbox with: NOT PLANNED / NOT INSPECTED / NOT SUSPENDED / NOT SELECTED

And I selected NOT PLANNED, I should see the following ACCOUNT_IDs:

ACCOUNT_IDSTATUS
002INSPECTED
003SUSPENDED
004SELECTED
006SELECTED
008SUSPENDED
009SELECTED

(001, 005 & 007 have the STATUS = PLANNED)

So I thought in creating a field OPPOSITE_STATUS like this (I'd need it in Script):

TABLE:

LOAD

ACCOUNT_ID,

STATUS,

IF(STATUS<>'PLANNED','NOT PLANNED',
     IF(STATUS<>'SELECTED','NOT SELECTED',
          IF(STATUS<>'INSPECTED','NOT INSPECTED',
               IF(STATUS<>'SUSPENDED','NOT SUSPENDED'))))     AS OPPOSITE_STATUS

FROM $(vDATA)PLANIFICATION.qvd (qvd)

Do you think it should work?

Thank you!!!

-----

Oh, I have just tried this but it doesn't work, because I get the value that satisfies the first valid conditional, but only the first one...

I leave the QVW attached.

Thanks.

1 Solution

Accepted Solutions
SergeyMak
Partner Ambassador
Partner Ambassador

[data]:

LOAD ACCOUNT_ID,

    STATUS

FROM

[http://community.qlik.com/message/547927]

(html, codepage is 1252, embedded labels, table is @1);

NoConcatenate

[statuses]:

LOAD *

Resident data;

LEFT JOIN (statuses)

LOAD * INLINE

[STATUS, Opposit

INSPECTED, NOT PLANNED

INSPECTED, NOT SELECTED

INSPECTED, NOT SUSPENDED

SELECTED, NOT PLANNED

SELECTED, NOT SUSPENDED

SELECTED, NOT INSPECTED

PLANNED, NOT SUSPENDED

PLANNED, NOT INSPECTED

PLANNED, NOT SELECTED

SUSPENDED, NOT SELECTED

SUSPENDED, NOT INSPECTED

SUSPENDED, NOT PLANNED

];

DROP Field STATUS From statuses;

PFA

Regards,
Sergey

View solution in original post

13 Replies
SergeyMak
Partner Ambassador
Partner Ambassador

I think, in this case it's better to use pick and match functions

Regards,
Sergey
SergeyMak
Partner Ambassador
Partner Ambassador

or just create field  with 'not' like

'NOT ' & STATUS AS OPPOSITE_STATUS

Regards,
Sergey
Not applicable
Author

But if I do that I get:

ACCOUNT_ID STATUS OPPOSITE_STATUS
001PLANNEDNOT PLANNED
002INSPECTEDNOT INSPECTED
003SUSPENDEDNOT SUSPENDED
004SELECTEDNOT SELECTED
005PLANNEDNOT PLANNED
006SELECTEDNOT SELECTED
007PLANNEDNOT PLANNED
008SUSPENDEDNOT SUSPENDED
009SELECTEDNOT SELECTED

And for example, for the STATUS PLANNED I should have the OPPOSITE_STATUS NOT_INSPECTED, NOT_SUSPENDED & NOT SELECTED

SergeyMak
Partner Ambassador
Partner Ambassador

And for example, for the STATUS PLANNED I should have the OPPOSITE_STATUS NOT_INSPECTED, NOT_SUSPENDED & NOT SELECTED

but do you understand that you will have three lines in this case? like

ACCOUNT_ID STATUS OPPOSITE_STATUS
001PLANNEDNOT_INSPECTED
001PLANNEDNOT_SUSPENDED
001PLANNEDNOT SELECTED

it's probably better to do in a separate table

Regards,
Sergey
Not applicable
Author

Yes, I know I'd have a table with the different OPPOSITE_STATUS for every ACCOUNT_ID.

But how could I build that table?

Thanks.

SergeyMak
Partner Ambassador
Partner Ambassador

[data]:

LOAD ACCOUNT_ID,

    STATUS

FROM

[http://community.qlik.com/message/547927]

(html, codepage is 1252, embedded labels, table is @1);

NoConcatenate

[statuses]:

LOAD *

Resident data;

LEFT JOIN (statuses)

LOAD * INLINE

[STATUS, Opposit

INSPECTED, NOT PLANNED

INSPECTED, NOT SELECTED

INSPECTED, NOT SUSPENDED

SELECTED, NOT PLANNED

SELECTED, NOT SUSPENDED

SELECTED, NOT INSPECTED

PLANNED, NOT SUSPENDED

PLANNED, NOT INSPECTED

PLANNED, NOT SELECTED

SUSPENDED, NOT SELECTED

SUSPENDED, NOT INSPECTED

SUSPENDED, NOT PLANNED

];

DROP Field STATUS From statuses;

PFA

Regards,
Sergey
sujeetsingh
Master III
Master III

I think what you want to implement can be done in many ways.

A lot are suggested by these people and i think your nested if should also work.

Not applicable
Author

Thanks for your solution! It works

Although, I'm going to see if I get another solution maybe more performant because there are houndreds of accounts and maybe the application could get some slow.

Not applicable
Author

Could you recommend me something performant to use in this case when having many registries? Thanks.