Nested if else Condition in Crystal report - crystal-reports

I have a .rpt file , with a view datasource . I have four parameter which i use in filtering the selection. I have written my selection formula like below.
if ({?actype} <> "All") OR ({?actype} <> "All") OR ({?collectorname} <> "All") OR ({?batchno}<> "All") Then
(
if {?actype} <> "All" Then
{CollectorPerformance.accountType} = {?actype};
if {?collectorname} <> "All" Then
{CollectorPerformance.realname} = {?collectorname};
if {?batchno} <> "All" Then
{CollectorPerformance.batchno} = {?batchno}
and
{CollectorPerformance.clientid} = {?clientid}
and
Date({CollectorPerformance.paymentdate}) >= Date({?from})
and
Date({CollectorPerformance.paymentdate}) <= Date({?to})
)
My issue with the formula, above is that it does not filter by realname and actType. I understand the reason is because the key word "and" is missing . however, it filters the batchno correctly> please how do i make it filter by the remaining two if's ? any help would appreciated.

A selection formula has to be one long valid boolean statement, which is, I think, what you were already suggesting when you say the "and is missing". So in order to fix the first half, you just need to translate those statements into one simplified boolean statement instead of individual statements (those that end in a ';').
({?actype}="All" or {?actype}={CollectorPerformance.accountType})
and
({?collectorname}="All" or {?collectorname}={CollectorPerformance.realname})
and
({?batchno}="All" or {?batchno}={CollectorPerformance.batchno})
...
For each parameter, a user can either select "All" or enter a specific value to filter by. If "All" is selected, that particular portion of the statement (The part that looks like {?Parameter}="All") will evaluate to True and no filtering will be done. Otherwise, only records matching the entered parameter value will return True.

Related

Count if "YES" in 1 field or another in Tablean

I am trying to create a calculated field in tableau that will count if one field OR another contains 'yes' - and then add the YES's together as a value.
I have tried CASE WHEN, IF, COUNTIF but I am having trouble as I have to have the OR in the calculated field.
Here is my last attempt that also failed:
COUNTIF([M-CROSSC (Cross Country)]) = 'YES' OR ([W-CROSSC (Cross Country)])= 'YES' THEN '1' END
Try this. Put the if statement inside the count().
COUNT(IF [M-CROSSC (Cross Country)] = 'YES' OR ([W-CROSSC (Cross Country)]= 'YES' THEN '1' END)
edited to remove extra ')' after each dimension.

CASE WHEN in Oracle SQL Developer in join statement

I wrote this snippet of code here in Oracle SQL Developer but I don't know how to use a CASE WHEN so that when k.QUARANTINED = 0, display 'No', else if k.QUARANTINED = 1 display 'Yes'. This column is always 0 or 1.
select
s.NAME as "Shipment ID"
,k.STATUS_ID as "Status"
,k.EXPIRATION
,k.DISDATE
,u.SCR_NO as "Patient No"
,k.QUARANTINED
,k.PREVIOUS_STATUS_ID
,k.SORT_KEY as "Sort Order"
from KIT k
left join SHIPMENT s on s.ID = k.SHIPMENT_ID
left join USR u on u.PAT_ID = k.PAT_ID;
I tried a couple of times but kept getting errors most likely since I don't know how write the syntax correctly or maybe I have to rewrite this completely differently? I'd like to keep the order of the columns the same. I just would like to see 'Yes' or 'No' for k.Quarantined instead of 0 or 1 returned in the result. :)
SELECT
S.name AS "shipment ID",
K.status_id AS "status",
K.expiration,
K.disdate,
U.scr_no AS "Patient No",
K.quarantined,
CASE k.quarantined
WHEN 0 THEN 'No'
WHEN 1 THEN 'Yes'
ELSE 'Missing or Null'
END AS "quarantine status case example 1",
CASE
WHEN k.quarantined = 0
THEN 'No'
WHEN k.quarantined = 1
THEN 'Yes'
ELSE 'Missing or Null'
END AS "quarantine status case example 2",
K.previous_status_id,
K.sort_key AS "sort order",
FROM Kit K
LEFT JOIN Shipment S
ON K.shipment_id = S.id
LEFT JOIN USR U
ON K.pat_id = U.pat_id
ORDER BY
K.sort_key ASC
;
Two examples of CASE above. The first example is used when you are evaluating a single column/variable.
The second example is used for testing multiple conditions.
When using the second example of CASE statements, it is important to understand that CASE will return the result for the first condition that evaluates TRUE. When using complex logic, sometimes a developer may (inadvertently) have overlapping logic where multiple conditions can be satisfied. When unexpected results from CASE occur, it is important to go back and reevaluate the statement from the top down.
If you are absolutely sure that K.quarantined cannot be NULL and it can only be 0 or one (research the table DDL for check constraints) then you can remove or comment out the ELSE clause on the CASE statements--but it is generally good practice to always have an ELSE clause for consistency. You can have it simply state "ELSE NULL" if you do not ever expect anything other than what's described in your CASE statement.
Lastly, be sure to make sure to identify whether K.quarantined is numeric or text (check table DDL). If it is actually storing text '0' or '1', then should change your literals accordingly--although I think current versions of Oracle are smart enough to do the implicit conversions for you.

Crystal reports selecting record that contain empty strings or "null"

I have a report that for a field called JobNo there are some records that have "null" as the the cell value and some that have an empty string "". there is another field called AccntNo that im also selecting by in the same selection formula.
This is what i have tried without success in the selection formula for crystal reports.
{accnt.accno} = "7015" and
{accnt.jobno} = "" or {accnt.jobno} isnull
any help is apreciated
Selection formula doesn't work as expected, sometimes.
I suppose that this will work
{accnt.accno} = "7015" and
( isnull({accnt.JobNo}) or {accnt.jobno} = "" )
First of all I put parenthesis on 'or' clause.
But, the strangest thing, is that isnull clause must be evaluated before other comparison clauses.

How to write custom function in crystal report to be used for record selection

I am confused in writing custom function in crystal report to fetch record using record selection.
When we create formula in record selection it will add where clause in the generated SQL-Query on the basis of parameters used. Now i want to write the custom formula, which will extract the record pro-grammatically :
Even i have written a function :
Function (stringVar st)(
stringVar selection;
if (st <> 'ALL') then (
selection = st;
)
else(
//In this case the user select only single value, it will fetch the result to that //particular column value in the table.. otherwise it leaves that particular row..
selection = "multiple selection";
)
)
Now the code to use the custom function in record selection using select expert would be :
if(myfunction({?parameter1}) <> "ALL") then
(
// what code should i write to select that particular record...
if(myfunction({?parameter2})) <> "ALL" ) then
(
//do selection from the previously selection of rows which have this parameter
if(myfunction({?parameter3}) <> "ALL") then
(
//do selection from the previously selection of rows which have this
//parameter
)
else (//do something else)
)
else (//do something else)
)
else (//do something else)
Thanks, in advance.
You don't need a custom function for this. Assuming that you have two string parameters, ry:
// assumes you have a parameter value of 'All Countries' w/ a value of '0'
( '0' IN {?CountryCodes} OR {table.CountryCode} IN {?CountryCodes} )
// assumes you have a parameter value of 'All Regions' w/ a value of '0'
AND ( '0' IN {?RegionCodes} OR {table.RegionCode} IN {?RegionCodes} )

How to filter rows with null values in any of its columns in SSRS

I want to filter out the output without rows containing null values or blank columns. I am using SQL Server 2012 there is no option named 'Blank' as in SS2005 where I can filter the rows. I also tried following expression but it gives me error or not showing correct output
=IsNothing(Fields!ABC.Value)!= True
=Fields!ABC.Value = ''
Please suggest the solution.
Pull up the tablix or group properties
Switch to "Filters"
Add a new filter
Set the expression to:
=IsNothing(Fields!YourFieldHere.Value)
Set the type to "Boolean" (see screenshot below) otherwise you'll get a "cannot compare data of types boolean and string" error.
Set the value to false
This works for filtering both rows and groups.
We should use the isNothing method in the Expression, change the Text to Boolean
and then Value will be "True"
for example:
Expression
=IsNothing(Fields!TestA.Value)<>True
(Expression type should be Boolean)
Operator
=
Value
=True
Edit the SQL query, so that it will not return NULL values in the column to group on, but let it return a dummy value; for example: ISNULL(columnA, 'dummy')
In the column group definition add a filter: ColumnA <> 'dummy'.