Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us to spark ideas for how to put the latest capabilities into action. Register here!
cancel
Showing results for 
Search instead for 
Did you mean: 
Marcushenriquesk

If field value within range show a category name on table

I have a table on a sheet I am developing and the columns of that table are 'ACC_ID' and associated with the 'ACC_ID' field are 'Panel_ids.' What I want as a second column is a expression that states something along the lines of:

If 'Panel_ids' are within a range for the ACC_ID then show a string/variable that consolidates those panel_ids into one name.

For Example, for ACC_ID '1234' if Panel_ids >= 1 and Panel_ids <=3 output: 'Group name 1' or if Panel_ids >= 4 and Panel_ids <=6 output: 'Group_name 2'

How do i got about doing this cant find a solution anywhere.

1 Solution

Accepted Solutions
MarcoWedel

Hi,

I think you can either calculate an additional Group field in the load script or use an expression in a straight table.

 

Either result would look like this:

QlikCommunity_Thread_t5_QlikView-App-Dev_If-field-value-within-range-show-a-category-name-on-table_m-p_1843656_Pic1.png

Given this data:

QlikCommunity_Thread_t5_QlikView-App-Dev_If-field-value-within-range-show-a-category-name-on-table_m-p_1843656_Pic2.png

 

A straight table expression using ACC_ID as dimension would be:

Only(If(Panel_ids <=  3, 'Group_name 1',
If(Panel_ids <=  6, 'Group_name 2',
If(Panel_ids <=  9, 'Group_name 3',
If(Panel_ids <= 12, 'Group_name 4',
If(Panel_ids <= 15, 'Group_name 5'
  ))))))



Whereas creating the Group field during load could be done like:

table1:
LOAD *,
     If(Panel_ids <=  3, 'Group_name 1',
     If(Panel_ids <=  6, 'Group_name 2',
     If(Panel_ids <=  9, 'Group_name 3',
     If(Panel_ids <= 12, 'Group_name 4',
     If(Panel_ids <= 15, 'Group_name 5'
       )))))			as Group;
LOAD ACC_ID,
     Panel_ids+IterNo()	as Panel_ids
While IterNo()<=3;
LOAD 1233+RecNo()		as ACC_ID,
     (RecNo()-1)*3		as Panel_ids
AutoGenerate 5;

 

hope this helps

Marco

View solution in original post

5 Replies
MarcoWedel

Hi,

I'm not quite sure about your requirements.
Can you please elaborate maybe with some lines of the table containing ACC_ID and Panel_ids?

What if there are Panel_ids from different groups associated with the same ACC_ID?

In you example, what result would you expect if ACC_ID 1234 had occurrences with Panel_ids 2 and 5 ?

thanks for clarifying
Marco

Marcushenriquesk
Author

so our system is pretty precise and if a ACC_ID has mutiple panel_id's all those panel ids would fall under a category. For example, lets say panel ids  1, 2 all fall under a category we call Group 1 and 3 ,4 are group 2. so if ACC_Id 1 has panel_ids 1 associated it would fall under a name called group 1 and if ACC_ID 2 has panels_ids 1, 2 it would also be in group 1 but if ACC_ID has panel_id 3 then it would fall under group 2. How i want this to work is i have a table that has a column for ACC_ID and a ACC_ID can have mutiple panel_ids meaning that duplicate ACC_IDs can be shown if i put Panel_id as another column. The go around is that if ACC_ID has panels_ids within this range then the column next to it labeled (panel Group) will show a string name for a range of those panel_ids. 

 

MarcoWedel

Hi,

I think you can either calculate an additional Group field in the load script or use an expression in a straight table.

 

Either result would look like this:

QlikCommunity_Thread_t5_QlikView-App-Dev_If-field-value-within-range-show-a-category-name-on-table_m-p_1843656_Pic1.png

Given this data:

QlikCommunity_Thread_t5_QlikView-App-Dev_If-field-value-within-range-show-a-category-name-on-table_m-p_1843656_Pic2.png

 

A straight table expression using ACC_ID as dimension would be:

Only(If(Panel_ids <=  3, 'Group_name 1',
If(Panel_ids <=  6, 'Group_name 2',
If(Panel_ids <=  9, 'Group_name 3',
If(Panel_ids <= 12, 'Group_name 4',
If(Panel_ids <= 15, 'Group_name 5'
  ))))))



Whereas creating the Group field during load could be done like:

table1:
LOAD *,
     If(Panel_ids <=  3, 'Group_name 1',
     If(Panel_ids <=  6, 'Group_name 2',
     If(Panel_ids <=  9, 'Group_name 3',
     If(Panel_ids <= 12, 'Group_name 4',
     If(Panel_ids <= 15, 'Group_name 5'
       )))))			as Group;
LOAD ACC_ID,
     Panel_ids+IterNo()	as Panel_ids
While IterNo()<=3;
LOAD 1233+RecNo()		as ACC_ID,
     (RecNo()-1)*3		as Panel_ids
AutoGenerate 5;

 

hope this helps

Marco

Marcushenriquesk
Author

thank you!

 

MarcoWedel

you're welcome