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

Announcements
Qlik Open Lakehouse is Now Generally Available! Discover the key highlights and partner resources here.
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Second Max Value in Column Range (Straight Table)

Hi Guys,

Can you please advise me how can I get second or third max value in column range?

   

Col_1Col_2Col_3Col_4Col_5
1020304050

Currently I am using RangeMax & RangeMin to get Max or Min value. But I get to get 2 or 3 from the range.

Kind regards,

Farrukh

1 Solution

Accepted Solutions
settu_periasamy
Master III
Master III

Hi Farruukh,

Can you check the attachment? is that you needed?

due to large expression (may be there is a easy way), i have created variables like

v1H - 1st Higher

v2H - 2nd Higher

v3H - 3rd Higher

v1L - 1st Low

v2L - 2nd Low

v3H: (To find the 3rd maximum based on column label)

=rangemax(
IF(RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF1, 0, CDF1),
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5))=CDF1,

RangeMax(
If(RangeMax(CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5) ),

IF(RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF1, 0, CDF1),
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5))=CDF2,

RangeMax(
If(RangeMax(CDF1, CDF3, CDF4,CDF5) = CDF1, 0, CDF1), 
If(RangeMax(CDF1, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5)),

IF(RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF1, 0, CDF1),
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5))=CDF3,

RangeMax(
If(RangeMax(CDF1, CDF2, CDF4,CDF5) = CDF1, 0, CDF1), 
If(RangeMax(CDF1, CDF2, CDF4,CDF5) = CDF2, 0, CDF2),
IF(RangeMax(CDF1, CDF2, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF4,CDF5) = CDF5, 0 ,CDF5)),

IF(RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF1, 0, CDF1),
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5))=CDF4,

RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF5) = CDF1, 0, CDF1), 
If(RangeMax(CDF1, CDF2, CDF3, CDF5) = CDF2, 0, CDF2),
IF(RangeMax(CDF1, CDF2, CDF3, CDF5) = CDF3, 0 ,CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF5) = CDF5, 0 ,CDF5)),

IF(RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF1, 0, CDF1),
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF2, 0, CDF2), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF3, 0, CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF4, 0 ,CDF4),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4,CDF5) = CDF5, 0 ,CDF5))=CDF5,

RangeMax(
If(RangeMax(CDF1, CDF2, CDF3, CDF4) = CDF1, 0, CDF1), 
If(RangeMax(CDF1, CDF2, CDF3, CDF4) = CDF2, 0, CDF2),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4) = CDF3, 0 ,CDF3),
IF(RangeMax(CDF1, CDF2, CDF3, CDF4) = CDF4, 0 ,CDF4))

) ) ) ) ) )

Select_F1 Expression :

if("CDC1">0,
Pick(
Match(CDF1,$(v1H),$(v2H),$(v3H),$(v1L),$(v2L)),
'1H','2H','3H','1L','2L'))



Like wise other expression..



View solution in original post

32 Replies
settu_periasamy
Master III
Master III

Hi,

Col_1, Col_2.. etc  are Label of expressions, right? Then try like this..(for 3rd Max)

Pick(Match(

RangeMax(Col_1,Col_2,Col_3,Col_4,Col_5),

    Col_1,Col_2,Col_3,Col_4,Col_5)-2,

Col_1,Col_2,Col_3,Col_4,Col_5)

Anil_Babu_Samineni

I believe, Pick(Match(... Won't support expression like you said. I think we can create Key for all columns and we can use same?

Thread Owner - What is the output you want to get from given input?

Best Anil, When applicable please mark the correct/appropriate replies as "solution" (you can mark up to 3 "solutions". Please LIKE threads if the provided solution is helpful
Anonymous
Not applicable
Author

Hi Settu,

It did not work

Farrukh

Anonymous
Not applicable
Author

Hi Anil,

I have 5 columns where the numerical data exist.

Col_1Col_2Col_3Col_4Col_5
1020304050

I want to pick nth value as per result, it could be first value , second value, or any from above 5 columns.

Kind regards,

Farrukh

Anonymous
Not applicable
Author

Hi Anil,

I have written the formula in excel and its giving me correct result.

I am looking to write an expression in Qlikview.

Index Created: INDEX($BL3:$BP3

Max Value as per Input ((LARGE($BL3:$BP3,1)

And then Match

=IF(DN3>0,

IF(ISNUMBER(INDEX($BL3:$BP3,MATCH(IF(LARGE($BL3:$BP3,1)=BO3,BO3,0),$BL3:$BP3,0)))=TRUE,"1H",

IF(ISNUMBER(INDEX($BL3:$BP3,MATCH(IF(LARGE($BL3:$BP3,2)=BO3,BO3,0),$BL3:$BP3,0)))=TRUE,"2H",

IF(ISNUMBER(INDEX($BL3:$BP3,MATCH(IF(LARGE($BL3:$BP3,3)=BO3,BO3,0),$BL3:$BP3,0)))=TRUE,"3H",

IF(ISNUMBER(INDEX($BL3:$BP3,MATCH(IF(LARGE($BL3:$BP3,4)=BO3,BO3,0),$BL3:$BP3,0)))=TRUE,"2L",

IF(ISNUMBER(INDEX($BL3:$BP3,MATCH(IF(LARGE($BL3:$BP3,5)=BO3,BO3,0),$BL3:$BP3,0)))=TRUE,"1L"))))),"")

Can you please advise me related to this? How can I achieve in Qlikvew.

Kind regards,

Farrukh

Anil_Babu_Samineni

Please share Expected result set?

Best Anil, When applicable please mark the correct/appropriate replies as "solution" (you can mark up to 3 "solutions". Please LIKE threads if the provided solution is helpful
Anonymous
Not applicable
Author

Hi Anil

Please see the attached excel sheet where the excel formula built-in.

Regards,

Farrukh

Anonymous
Not applicable
Author

Hi Settu,

Please see the attached excel sheet where the excel formula built-in.

Can you please advise me how to get the similar result in excel.

Regards,

Farrukh

Anil_Babu_Samineni

What you got, When you use this?

If(Sum(Seq_Count_1)>0,

If(IsNum(Index(NoOfColumns(TOTAL), Match(If(RangeMax(RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5),1)=Sum(Seq_Cum_Count_1), Sum(Seq_Cum_Count_1), 0), RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5), 0)))=True(), '1H',

If(IsNum(Index(NoOfColumns(TOTAL), Match(If(RangeMax(RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5),2)=Sum(Seq_Cum_Count_1), Sum(Seq_Cum_Count_1), 0), RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5), 0)))=True(), '2H',

If(IsNum(Index(NoOfColumns(TOTAL), Match(If(RangeMax(RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5),3)=Sum(Seq_Cum_Count_1), Sum(Seq_Cum_Count_1), 0), RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5), 0)))=True(), '3H',

If(IsNum(Index(NoOfColumns(TOTAL), Match(If(RangeMax(RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5),4)=Sum(Seq_Cum_Count_1), Sum(Seq_Cum_Count_1), 0), RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5), 0)))=True(), '2L',

If(IsNum(Index(NoOfColumns(TOTAL), Match(If(RangeMax(RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5),5)=Sum(Seq_Cum_Count_1), Sum(Seq_Cum_Count_1), 0), RangeSum(Seq_Cum_Count_1, Seq_Cum_Count_2, Seq_Cum_Count_3, Seq_Cum_Count_4, Seq_Cum_Count_5), 0)))=True(), '1L'))))), '')

Best Anil, When applicable please mark the correct/appropriate replies as "solution" (you can mark up to 3 "solutions". Please LIKE threads if the provided solution is helpful