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

Percentage based on dates

Hi guys,  I hope it's all good.

I've been stuck in a simple thing, but it's complicated for me, because I'm very new at Qlikview and set analysis.

I know how to get the lowest and highest value and make this as increase or decrease percentage using the "Max" and "Min" functions.

But what I'm trying to do is to get the highest value in the HIGH column first and then for the first expression the lowest value in the LOW column, based on dates before the highest date. 
For the second expression the lowest value after highest date.

For example:

The highest value :  97,580  (23/01/2019 08:00)

The lowest value BEFORE (23/01/2019 08:00) :  43,800  (21/01/2019 04:00)
The lowest value AFTER (23/01/2019 08:00):  43,500  (23/01/2019 21:00)

Expression 1st:  an increase of 122.79%

Expression 2st:  a decrease of 55.42%

PRODUCTLOWHIGHDATE_TIME
A44.15044.77021/01/2019 00:00
A44.09044.39021/01/2019 01:00
A44.01044.44021/01/2019 02:00
A43.97044.47021/01/2019 03:00
A43.80044.36021/01/2019 04:00
A43.86044.90021/01/2019 05:00
A44.13044.49021/01/2019 06:00
A44.13044.71021/01/2019 07:00
A43.86044.49021/01/2019 08:00
A43.85044.26021/01/2019 09:00
A44.23045.31021/01/2019 10:00
A44.72045.70021/01/2019 11:00
A45.20045.72021/01/2019 12:00
A44.75045.38021/01/2019 13:00
A44.67046.40021/01/2019 14:00
A45.47050.50021/01/2019 15:00
A47.69052.90021/01/2019 16:00
A49.13056.32021/01/2019 17:00
A53.55059.53021/01/2019 18:00
A55.55058.06021/01/2019 19:00
A53.97057.00021/01/2019 20:00
A53.56055.40021/01/2019 21:00
A53.95055.75021/01/2019 22:00
A53.36055.68021/01/2019 23:00
A53.65055.28022/01/2019 00:00
A54.14058.14022/01/2019 01:00
A53.93056.19022/01/2019 02:00
A51.60054.67022/01/2019 03:00
A52.05052.79022/01/2019 04:00
A52.12053.02022/01/2019 05:00
A52.20053.50022/01/2019 06:00
A51.00052.72022/01/2019 07:00
A50.22056.34022/01/2019 08:00
A52.07055.31022/01/2019 09:00
A52.87055.00022/01/2019 10:00
A52.09054.05022/01/2019 11:00
A53.05055.10022/01/2019 12:00
A55.03058.50022/01/2019 13:00
A55.52062.50022/01/2019 14:00
A60.07064.37022/01/2019 15:00
A59.32062.23022/01/2019 16:00
A58.60061.19022/01/2019 17:00
A58.58059.97022/01/2019 18:00
A57.93061.58022/01/2019 19:00
A59.80063.71022/01/2019 20:00
A60.44063.66022/01/2019 21:00
A61.60064.50022/01/2019 22:00
A63.20064.50022/01/2019 23:00
A63.26069.69023/01/2019 00:00
A67.85074.99023/01/2019 01:00
A72.00078.80023/01/2019 02:00
A71.51076.47023/01/2019 03:00
A71.67073.76023/01/2019 04:00
A73.23079.98023/01/2019 05:00
A75.13085.78023/01/2019 06:00
A80.68089.20023/01/2019 07:00
A88.50097.58023/01/2019 08:00
A79.37093.44023/01/2019 09:00
A76.56081.60023/01/2019 10:00
A73.69080.39023/01/2019 11:00
A74.83077.60023/01/2019 12:00
A75.12078.99023/01/2019 13:00
A72.80075.88023/01/2019 14:00
A73.24075.27023/01/2019 15:00
A72.11074.40023/01/2019 16:00
A72.34074.80023/01/2019 17:00
A73.80078.74023/01/2019 18:00
A73.32077.65023/01/2019 19:00
A51.06053.14023/01/2019 20:00
A43.50052.98023/01/2019 21:00
A51.52052.57023/01/2019 22:00
A51.55052.74023/01/2019 23:00


Any help would be greatly appreciated,

Thanks in advance,

Regards,

V. Andrade

Labels (5)
6 Replies
Channa
Specialist III
Specialist III

FirstSortedValue(DATE_TIME, -HIGH)

 

i am not sure about second part

Channa
Channa
Specialist III
Specialist III

BRO IF DONT GET luck with qlik

try build query like below

 


SELECT
MIN_MAX.COUNTRY_OF_ORIGIN AS MIN_CON,MIN_MAX.MIN_DATE ,MIN_MAX.MIN_CUSTOMS_VALUE_QAR,
MIN_MAX.RELEASE_DATE,MIN_MAX.CUSTOMS_VALUE_QAR FROM
(
SELECT I.COUNTRY_OF_ORIGIN,F.RELEASE_DATE AS MIN_DATE,I.CUSTOMS_VALUE_QAR AS MIN_CUSTOMS_VALUE_QAR,
MAX_TABLE.RELEASE_DATE,MAX_TABLE.CUSTOMS_VALUE_QAR
from GDC_PRO.FACT_DECLARATION F
JOIN GDC_PRO.TCUST_DEC_DECLARATION D on (F.DECLARATION_ID = D.DECLARATION_ID AND D.DOCUMENT_STATUS='FIN' AND D.DECLARATION_TYPE='IMP')
JOIN "GDC_PRO"."TCUST_DEC_ITEM" I ON (D.DECLARATION_ID=I.DECLARATION_ID)
AND I.CUSTOMS_VALUE_QAR>100
JOIN

(SELECT I.COUNTRY_OF_ORIGIN,F.RELEASE_DATE,I.CUSTOMS_VALUE_QAR
from GDC_PRO.FACT_DECLARATION F
JOIN GDC_PRO.TCUST_DEC_DECLARATION D on (F.DECLARATION_ID = D.DECLARATION_ID AND D.DOCUMENT_STATUS='FIN' AND D.DECLARATION_TYPE='IMP')
JOIN "GDC_PRO"."TCUST_DEC_ITEM" I ON (D.DECLARATION_ID=I.DECLARATION_ID)
WHERE I.CUSTOMS_VALUE_QAR =(SELECT mAX(CUSTOMS_VALUE_QAR) FROM "GDC_PRO"."TCUST_DEC_ITEM"))MAX_TABLE


ON I.COUNTRY_OF_ORIGIN=MAX_TABLE.COUNTRY_OF_ORIGIN
AND F.RELEASE_DATE<MAX_TABLE.RELEASE_DATE) MIN_MAX
WHERE MIN_MAX.MIN_CUSTOMS_VALUE_QAR =(
SELECT MIN(I.CUSTOMS_VALUE_QAR )
from GDC_PRO.FACT_DECLARATION F
JOIN GDC_PRO.TCUST_DEC_DECLARATION D on (F.DECLARATION_ID = D.DECLARATION_ID AND D.DOCUMENT_STATUS='FIN' AND D.DECLARATION_TYPE='IMP')
JOIN "GDC_PRO"."TCUST_DEC_ITEM" I ON (D.DECLARATION_ID=I.DECLARATION_ID)
AND I.CUSTOMS_VALUE_QAR>100
JOIN

(SELECT I.COUNTRY_OF_ORIGIN,F.RELEASE_DATE,I.CUSTOMS_VALUE_QAR
from GDC_PRO.FACT_DECLARATION F
JOIN GDC_PRO.TCUST_DEC_DECLARATION D on (F.DECLARATION_ID = D.DECLARATION_ID AND D.DOCUMENT_STATUS='FIN' AND D.DECLARATION_TYPE='IMP')
JOIN "GDC_PRO"."TCUST_DEC_ITEM" I ON (D.DECLARATION_ID=I.DECLARATION_ID)
WHERE I.CUSTOMS_VALUE_QAR =(SELECT mAX(CUSTOMS_VALUE_QAR) FROM "GDC_PRO"."TCUST_DEC_ITEM"))MAX_TABLE


ON I.COUNTRY_OF_ORIGIN=MAX_TABLE.COUNTRY_OF_ORIGIN
AND F.RELEASE_DATE<MAX_TABLE.RELEASE_DATE)

 

this sql extract MIN value before max value date

try if positive i will include min after max value date

 

Channa
V_Andrade
Contributor
Contributor
Author

Hi bro, thanks for the answer,

I tried this:
if(firstsortedvalue (DISTINCT DATE_TIME, -HIGH) > firstsortedvalue (DISTINCT DATE_TIME, LOW), ((Max(HIGH)-Min(LOW)) / Min(LOW)),-( (Max(HIGH)-Min(LOW)) / Max(HIGH) ))

But this isn't what I'm looking for, because it gets the LOW value from any time/date. And I need one expression for the lowest value BEFORE the highest value date and another one for the lowest value AFTER the highest value date as my example above.
Channa
Specialist III
Specialist III

YOU TRY TO BUILD SQL

I WILL COME BACK

Channa
Channa
Specialist III
Specialist III

TRY TO REPLACE MY sql WITH UR db

 

Channa
Channa
Specialist III
Specialist III

IT IS SIMPLE REPLACE WITH YOUR TABLE IT SHOULD BRING MAX AND MIN VALUE BEFORE MAX VALUE DATE

 

SELECT MIN_MAX.DECLARATION_TYPE,MIN_DATE,MIN_AMOUNT_PAID,MAX_VAL_DATE,MAX_VAL FROM

(SELECT F.DECLARATION_TYPE,F.RELEASE_DATE AS MIN_DATE,F.AMOUNT_PAID AS MIN_AMOUNT_PAID,
MAX_TABLE.RELEASE_DATE AS MAX_VAL_DATE,MAX_TABLE.AMOUNT_PAID AS MAX_VAL
from GDC_PRO.FACT_DECLARATION F

JOIN

(SELECT F.DECLARATION_TYPE,F.RELEASE_DATE,F.AMOUNT_PAID
from GDC_PRO.FACT_DECLARATION F

WHERE F.AMOUNT_PAID =(SELECT mAX(AMOUNT_PAID) FROM "GDC_PRO"."FACT_DECLARATION"))MAX_TABLE
ON F.DECLARATION_TYPE=MAX_TABLE.DECLARATION_TYPE
AND F.RELEASE_DATE<MAX_TABLE.RELEASE_DATE) MIN_MAX
WHERE MIN_MAX.MIN_AMOUNT_PAID=

(SELECT MIN(F.AMOUNT_PAID)
from GDC_PRO.FACT_DECLARATION F

JOIN

(SELECT F.DECLARATION_TYPE,F.RELEASE_DATE,F.AMOUNT_PAID
from GDC_PRO.FACT_DECLARATION F

WHERE F.AMOUNT_PAID =(SELECT mAX(AMOUNT_PAID) FROM "GDC_PRO"."FACT_DECLARATION"))MAX_TABLE
ON F.DECLARATION_TYPE=MAX_TABLE.DECLARATION_TYPE
AND F.RELEASE_DATE<MAX_TABLE.RELEASE_DATE )

 

Channa