Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content
Announcements
Gartner® Magic Quadrant™: 15 YEARS A LEADER - GET THE REPORT
cancel
Showing results for 
Search instead for 
Did you mean: 
swatitomar
Creator
Creator

if Nested condition in Qlik

HI Team,

I'm trying to write if condition on the basis of 3 fields.Getting incorrect value after applying the logic , what change i should implement.

if (Is_Cust='Yes', 'All Customer',
if (Is_Vndr = 'Yes' , 'All Vendor',
if (Is_Ptnr = 'Yes', All Partner',
if (Is_Cust='No',  'No Customer',
if (Is_Vndr = 'No',  'No Vendor',
if (Is_Ptnr = 'No', 'No Partner',
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr = 'No',  'Only Customer',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='No', 'Only Vendor',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Only Partner',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='No',  'Customer & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Customer & Partner',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Vendor & Partner',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='No',  'None of Customer & Partner & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Customer & Partner & Vendor'))))))))))))))) as Type;

 

I Have use crosstable for this above condition or by if i can get correct result.?

Labels (1)
2 Solutions

Accepted Solutions
martinpohl
Partner - Master
Partner - Master

so, as I thought

if (Is_Cust='Yes', 'All Customer',
if (Is_Vndr = 'Yes' , 'All Vendor',
if (Is_Ptnr = 'Yes', All Partner',
if (Is_Cust='No',  'No Customer',
if (Is_Vndr = 'No',  'No Vendor',
if (Is_Ptnr = 'No', 'No Partner'  -> this is one category
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr = 'No',  'Only Customer',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='No', 'Only Vendor',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Only Partner',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='No',  'Customer & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Customer & Partner',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Vendor & Partner',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='No',  'None of Customer & Partner & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Customer & Partner & Vendor') -> this is a second category

theses two categories you can use in your chart (maybe in one chart with alternative dimension)

 

View solution in original post

Rohan
Partner - Specialist
Partner - Specialist

Hi,

You can always use ApplyMap() to write a complex nested if condition :

Type_map :

Mapping Load 

Is_Cust&'-'&Is_Vndr&'-'&Is_Ptnr as Type_Key,

Type; 

Load * Inline [

Is_Cust, Is_Vndr,  Is_Ptnr , Type

Yes,No,No,'Only Customer'

Yes,No,Yes,'Customer & Partner'

Yes,Yes,No,'Customer & Vendor'

Yes,Yes,Yes,'Customer & Vendor & Partner'

No,No,No,'None of Customer & Partner & Vendor'

No,No,Yes,'Only Partner'

No,Yes,No,'Only Vendor'

No,Yes,Yes,'Vendor & Partner'

];

& Then use Applymap('Type_map', Is_Cust&'-'&Is_Vndr&'-'&Is_Ptnr, null()) as Type,

Also The All Customer, All Vendor & All Partner field values can't be created in this same field as their conditions overlap with some other conditions & you will get only one of those according to the order of conditions you have placed. You can create those values as a separate field & use them as a hierarchical drop down like

for eg : Transaction-Type >> Transaction.

Let me know if it worked for you.

Regards,

Rohan.

View solution in original post

8 Replies
martinpohl
Partner - Master
Partner - Master

you have to change the logic in your if statement because if this is true

if (Is_Cust='Yes' , 'All Customer',

this 

if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='No',  'Customer & Vendor',

will not be reached

Regards

swatitomar
Creator
Creator
Author

Yes, This is the issue , how can i change my logic..Need help in the same

martinpohl
Partner - Master
Partner - Master

the easiest way is to reverse your if statement.

but I think in your statement, you want to identify more than one result.

customer: yes / no

vendor: yes / no

so, I need more information for the right statement

swatitomar
Creator
Creator
Author

I have to build few Metrics on the basis of Type field. In the below chart , you can check 

swatitomar_0-1595863211519.png

 

Kushal_Chawda

In this case it is better to create calculated dimension in your chart itself instead of create it in script

martinpohl
Partner - Master
Partner - Master

so, as I thought

if (Is_Cust='Yes', 'All Customer',
if (Is_Vndr = 'Yes' , 'All Vendor',
if (Is_Ptnr = 'Yes', All Partner',
if (Is_Cust='No',  'No Customer',
if (Is_Vndr = 'No',  'No Vendor',
if (Is_Ptnr = 'No', 'No Partner'  -> this is one category
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr = 'No',  'Only Customer',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='No', 'Only Vendor',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Only Partner',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='No',  'Customer & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'No' and Is_Ptnr='Yes',  'Customer & Partner',
if (Is_Cust='No' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Vendor & Partner',
if (Is_Cust='No' and Is_Vndr = 'No' and Is_Ptnr='No',  'None of Customer & Partner & Vendor',
if (Is_Cust='Yes' and Is_Vndr = 'Yes' and Is_Ptnr='Yes',  'Customer & Partner & Vendor') -> this is a second category

theses two categories you can use in your chart (maybe in one chart with alternative dimension)

 

martinpohl
Partner - Master
Partner - Master

if you can, and in this case you can identify the category in script, for performance reasons it is better to calculate dimension information i script than in calculated dimension.

it's not possible at all (maybe top 5 customers, depending on selection) so it coul be an alternative.

Rohan
Partner - Specialist
Partner - Specialist

Hi,

You can always use ApplyMap() to write a complex nested if condition :

Type_map :

Mapping Load 

Is_Cust&'-'&Is_Vndr&'-'&Is_Ptnr as Type_Key,

Type; 

Load * Inline [

Is_Cust, Is_Vndr,  Is_Ptnr , Type

Yes,No,No,'Only Customer'

Yes,No,Yes,'Customer & Partner'

Yes,Yes,No,'Customer & Vendor'

Yes,Yes,Yes,'Customer & Vendor & Partner'

No,No,No,'None of Customer & Partner & Vendor'

No,No,Yes,'Only Partner'

No,Yes,No,'Only Vendor'

No,Yes,Yes,'Vendor & Partner'

];

& Then use Applymap('Type_map', Is_Cust&'-'&Is_Vndr&'-'&Is_Ptnr, null()) as Type,

Also The All Customer, All Vendor & All Partner field values can't be created in this same field as their conditions overlap with some other conditions & you will get only one of those according to the order of conditions you have placed. You can create those values as a separate field & use them as a hierarchical drop down like

for eg : Transaction-Type >> Transaction.

Let me know if it worked for you.

Regards,

Rohan.