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: 
Not applicable

Chart Expression

Hi,

In a Bar Chart, I have first bar as Total PO NO (count(DISTINCT {<POStatus={'200'}>}  PO#) ,

in the second bar to compare against the first. my  logic is : 

count({<date(StatusDateF) - date(TransmDateF>='2',POStatus='200'>}),OMSPO#) , but failed.

I want to count the No. of PO where its POStatus is ='200' and where the StatusDateF - TransmDateF is equal or less than 2 days.

Can someone pls help.

Thank you.

19 Replies
Chanty4u
MVP
MVP

count({<date(StatusDateF) - date(TransmDateF>={'2'},POStatus={'200}'>}),OMSPO#)

Anonymous
Not applicable
Author

missing brackets in syntax..

may be like this:

=count({<date(StatusDateF) - date(TransmDateF)>='2',POStatus={'200'}>} OMSPO#)


or


IF((date(StatusDateF) - date(TransmDateF))>='2' and POStatus='200', count(OMSPO#))

tresesco
MVP
MVP

Your set analysis syntax is wrong. You can't use anything except for a field (calculated in the script) on the LHS of set expression. I.e. ,   exp={Value} is invalid, it would be like - field={value/exp}. Try to share your sample qvw for specific and contexual help.

settu_periasamy
Master III
Master III

May be try this..

=count(if((StatusDateF-TransmDateF)>=2 and POStatus=200,OMSPO#))

Not applicable
Author

Hi,

This reply seems to be correct. If use on the secondary bar.

=count(if((StatusDateF-TransmDateF)>=2 and POStatus=200,OMSPO#))

But I realized I made a mistake in the first bar : PO count =count({<POStatus={'200'}>}OMSPO#).

My PO count should count  only the Min date of the OMSPO# and not count the OMSPO# on the second date (the same date). In the table below, I should have only 6 and not 8.

Please help. Thank you.

  

OMSPO#POStatusTransmDateFStatusDateFStatusDateTransmDateDayDiffTarget
00062520004/12/201509/12/201509/12/201504/12/20155Y
00062520004/12/201509/12/201510/12/201504/12/20155Y
00062620001/12/201507/12/201507/12/201501/12/20156Y
00062620001/12/201507/12/201514/12/201501/12/20156Y
0000563820004/12/201508/12/201508/12/201504/12/20154Y
00001276120002/12/201504/12/201504/12/201502/12/20152Y
0001276220002/12/201507/12/201507/12/201502/12/20155Y
00001276320002/12/201507/12/201507/12/201502/12/20155Y
Not applicable
Author

Hi Settu,

The result is 1 which is wrong. Below is my full script and I hope you can help me. As I am new and struggling with it.

[Shipment]:
load
distinct SubField(primaryReference, '-', 1) as OMSPO#, //Remove record with '-',
//orderNumber,
fileNumber,
serviceLevel as TransportMode,
departmentCode as Department,
creationEmployeeName as LoginUser,
statusCode as POStatus
FROM [Shipments.qvd] (qvd)
WHERE departmentCode like 'sg*';

left join // [Bookconf]:
Load  
//Date#(trackDate&chr(32)&trackTime,'DD/MM/YYYY hh:mm:ss') as StatusDate,
Date(trackDate) as StatusDate,
fileNumber, trackCodeloggedBy  as POConfirmBy
FROM [TrackTrace.qvd] (qvd)
WHERE trackCode = 'BOOKCONF' and trackDate >= '2014-05-31';

left join //[EDIPO]:
load
fileNumber,
//Date#(trackDate&chr(32)&trackTime,'DD/MM/YYYY hh:mm:ss') as TransmDate,
   Date(trackDate) as TransmDate,
Date(trackDate) as Date,
Year(trackDate) as TransmYear,
Month(trackDate) as TransmMonth,
'Q' &
Ceil(Month(trackDate) /3) AS Quarter
FROM [TrackTrace.qvd] (qvd)
WHERE trackCode = 'EDIPO'and trackDate >= '2014-05-31';


[CustAdd]:
Load   fileNumber, relationSearchname as Customer 
FROM [FileAdd.qvd] (qvd)
WHERE addressRole = '4';
left join // [FileRefs]:
Load   fileNumber,referenceText  as LOS
FROM [FileRef.qvd](qvd)
WHERE referenceCode = '2003';


[Status2]:
load OMSPO#,
//FirstValue(TransmDate)as TransmDateF,
// FirstValue(StatusDate)as StatusDateF
MIN(date(TransmDate)) as TransmDateF ,
MIN(date(StatusDate)) as StatusDateF
resident [Shipment]
WHERE POStatus = '200'
Group by OMSPO#
Order by StatusDate,TransmDate;

[Target]:
load date(StatusDateF) - date(TransmDateF) as DayDiff,
if (date(StatusDateF) - date(TransmDateF) >= '2', 'Y','N') as Target
Resident [Status2]

The Expression for first bar :

count(DISTINCT{<POStatus={'200'}>}OMSPO#)  = 526 which is correct.

second bard : Aggr (count (Distinct {<POStatus={'200'},StatusDate={"$(=Date (Min (StatusDate)))"}>}OMSPO#),OMSPO#,StatusDate)The Result is 1 which is wrong. Appreciate your help. Thank you.

Not applicable
Author

Hi Tresesco,

the script as follow :


[Shipment]:
load
distinct SubField(primaryReference, '-', 1) as OMSPO#, //Remove record with '-',
//orderNumber,
fileNumber,
serviceLevel as TransportMode,
departmentCode as Department,
creationEmployeeName as LoginUser,
statusCode as POStatus
FROM [Shipments.qvd] (qvd)
WHERE departmentCode like 'sg*';

left join // [Bookconf]:
Load  
//Date#(trackDate&chr(32)&trackTime,'DD/MM/YYYY hh:mm:ss') as StatusDate,
Date(trackDate) as StatusDate,
fileNumber, trackCodeloggedBy  as POConfirmBy
FROM [TrackTrace.qvd] (qvd)
WHERE trackCode = 'BOOKCONF' and trackDate >= '2014-05-31';

left join //[EDIPO]:
load
fileNumber,
//Date#(trackDate&chr(32)&trackTime,'DD/MM/YYYY hh:mm:ss') as TransmDate,
   Date(trackDate) as TransmDate,
Date(trackDate) as Date,
Year(trackDate) as TransmYear,
Month(trackDate) as TransmMonth,
'Q' &
Ceil(Month(trackDate) /3) AS Quarter
FROM [TrackTrace.qvd] (qvd)
WHERE trackCode = 'EDIPO'and trackDate >= '2014-05-31';


[CustAdd]:
Load   fileNumber, relationSearchname as Customer 
FROM [FileAdd.qvd] (qvd)
WHERE addressRole = '4';
left join // [FileRefs]:
Load   fileNumber,referenceText  as LOS
FROM [FileRef.qvd](qvd)
WHERE referenceCode = '2003';


//[Status]:
//Load 
// OMSPO#,
// FirstValue(StatusDate)as StatusDateF,
// FirstValue(TransmDate)as TransmDateF
// resident [Shipment]
// WHERE POStatus = '200'
//Group by OMSPO#
//Order by StatusDate,Transmdate;


[Status2]:
load OMSPO#,
//FirstValue(TransmDate)as TransmDateF,
// FirstValue(StatusDate)as StatusDateF
MIN(date(TransmDate)) as TransmDateF ,
MIN(date(StatusDate)) as StatusDateF
resident [Shipment]
WHERE POStatus = '200'
Group by OMSPO#
Order by StatusDate,TransmDate;

[Target]:
load date(StatusDateF) - date(TransmDateF) as DayDiff,
if (date(StatusDateF) - date(TransmDateF) >= '2', 'Y','N') as Target
Resident [Status2]

the Expression for first bar :

count(DISTINCT{<POStatus={'200'}>}OMSPO#)

For the Second bar, I need to get the count of all OMSPO# where the StatusDate and Transmdate is the first (Min) date and where the POStatus = '200'. Thank you very much.

settu_periasamy
Master III
Master III

Hi,

May be try this..

=Count(If(Aggr(min({<POStatus={'200'}>}StatusDate), OMSPO#) = StatusDate, OMSPO#))


Or, this one

=Count(Aggr(Min({<POStatus={'200'}>}StatusDate),OMSPO#))

Not applicable
Author

Hi Sureh,

Error : somewhere in this statement : (TransmDateF>={'2'},)

count({<date(StatusDateF) - date(TransmDateF>={'2'},POStatus={'200}'>}),OMSPO#)