I'm creating a debtor invoicing report which has two parameters.
Parameter 1: This is a single value parameter called #booking_date. I filter the results(main dataset) by adding this into the query as a query parameter.
Eg. WHERE BookingDate = #booking_Date
Parameter 2: This parameter has two specified values - Yes or No. The parameter is called #live_run and the default value is 'No'. Basically, when this parameter has the default value of 'No', it does not limit/effect the results in any way. On the other hand, when this parameter has a value of 'Yes', it should limit the results by only displaying the bookings where the invoice has been paid off. There is a field I can use for this called Booking_Paid_off as follows - WHERE Booking_Paid_Off = 1.
I have parameter 1 in place, but I am unsure how to bring in Parameter 2 because it will be based on two conditions, do I need to use an If statement or a case statement? Do I need to create a new dataset for the second Parameter? I only want to limit the results with Parameter 2 ONLY if Parameter 2 has a value of Yes, otherwise I want the results to stay the same.
You have many options. You can switch out the Dataset entirely based on the parameter or use an IF inside the dataset to determine which query to run or simply check the parameter in your WHERE clause.
I recommend the latter.
SELECT
Field1,
Field2
FROM
Table1
WHERE
(
(#live_run = 'Yes' and Booking_Paid_Off = 1)
or (#live_run <> 'Yes')
)
Related
I received this error when I am trying to run a select statement in a text box in SSRS. So, basically, I am trying to return a field which is not in the given dataset. So I have run a subquery which returns the value using the existing dataset as a container.
But I don't know how to represent that return value in the Expression field. Because the expression field returns a value which is within the dataset provided.
I have provided the SQL that I have written.
Any suggestions would be much appreciated.
My intention is to return the "CommentText" value. However, the dataset does not contain any commenttext field, but an EmpID field. So I have created the subquery below that brings up the CommentText from LaborDtlComment table and when it matches with the EmpID in the report dataset it returns the CommentText Value.
select [CommentReturnQuery].[LaborDtlComment_CommentText] as [LaborDtlComment_CommentText],
[EmpBasic].[EmpID] as [EmpBasic_EmpID]
from Erp.EmpBasic as EmpBasic
inner join (select [LaborDtlComment].[CommentText] as [LaborDtlComment_CommentText],
[LaborDtl].[EmployeeNum] as [LaborDtl_EmployeeNum]
from Erp.LaborDtlComment as LaborDtlComment
inner join Erp.LaborDtl as LaborDtl on LaborDtlComment.Company = LaborDtl.Company
and LaborDtlComment.LaborHedSeq = LaborDtl.LaborHedSeq
and LaborDtlComment.LaborDtlSeq = LaborDtl.LaborDtlSeq) as CommentReturnQuery
on EmpBasic.EmpID = CommentReturnQuery.LaborDtl_EmployeeNum
My aim is to show the CommentText value in a text field. So I will create the
text field and it will contain the SQL that I have written. Can anyone help
me in this case?
It maybe simpler to use the SSRS function lookup (single paired 1 to 1) or lookupset (multiple 1 to many).microsoft lookup reference
You will have to create the query/dataset to return CommentText from LaborDtlComment table with the EmpID
I created a report on VS Report Builder from a query I wrote on SQL Server 2014.
The Report has two parameters:
The date the report should run for.
The agent to exclude from the report.
The query has conditions for the date and where agent NOT IN (agents selected from the drop-down)
Sometimes, there are no agents to exclude. Hence, the report should run even when there are no agents selected.
The report runs fine when there is at least 1 agent selected. But doesn't run at all when no agents are selected. Gives me an error message, "Please select value for the parameter 'Select Agent' ".
In Parameter properties, I have selected 'Text' as Data type. I have also checked 'Allow blank value("")' and 'Allow Multiple values'.
In the Available Values tab, I have selected 'Get values from a query' because I have a separate dataset that pulls records of the agent names from a separate table.
In Default Values tab, I have selected No Default Value. Maybe, I should select 'Specify Values' instead. But what should I specify the value as? Because, when I selected 'Specify values' and added a (Null) value, I got an error message that says 'A null default value was specified for the parameter but the parameter does not allow null values.' I even tried specifying an obscure '1111111' as the default value. Still got the error message to select an agent.
A good way to handle this is to add an option to your Available Values that can be used to skip that parameter. You would add it by using a Union All in the query that the parameter is being populated from. For the label you could use something like "N/A" and the value can be NULL. This way, you will be able to specify it as a Default Value and users will be able to select it when there are no appropriate real values. Finally, it sounds like you may have already done this, but make sure your query will handle the parameter being NULL and still give you the correct results.
EDIT:
SELECT AgentID, AgentName
FROM (
SELECT DISTINCT AgentID, AgentFirstName + ' ' + AgentLastName [AgentName]
FROM AgentStats
WHERE MidnightStartDate >= dateadd(day, -60, getdate()) AND MidnightStartDate < getdate()
UNION ALL
SELECT 'N/A', NULL
) A
ORDER BY AgentName
The union adds the NULL value to the results. This is all wrapped in a subquery so that you can still use the ORDER BY clause.
I have an SSRS report. It has a Marks dropdown, and a resultset "Classresult". When I select any value from Marks dropdown, it filters my result for selected value and displays the result.
Say when I select "100" from marks dropdown, it filters my Classresult dataset and shows all results with 100 value.
But it doesnot show values which have NULL in marks field.(the resultset ClassResult contains NULL values.
Is there any way i can include NULL values ??
Currently my condition is:
Marks == Parameters!Marks.Value
Do you have the ability to wrap an IsNull() around the Class result field in your datasource?
Like IsNull(ClassResult,0) AS Classresult
This will replace nulls with a zero. Alternately you could replace the 0 with a different value of your choice.
Use the IsNothing() function to check for a NULL value in an SSRS expression. It returns TRUE if the value is NULL.
You can include NULL in the query that populates the Marks drop down. (If you put the available values in statically, then add it there...) but here is how you can do it in the query.
SELECT ValueField, LabelField
FROM MarksTable
UNION
SELECT '(NULL)', '--NULL--'
Then in the query whose results you are filtering add
ISNULL([Marks], '(NULL)') as Marks
We have a series of reports which return a set of values for a parameter based on the userID. This works and we're happy with the way it works.
Now we need to implement a default parameter setting. The logic being
If there is only one value in the parameters available dataset, then set that as the default.
If there is more than one value in the parameters available dataset, then leave the parameter blank.
This is what I have so far - I know I have the following issues:
-Parameters cannot read fields, therefore I need the expression to look at the dataset as a whole.
-I'm unsure what my then statement should be to allow the user to review all available values without them being selected.
=IIf(CountDistinct(Fields!storekey.Value, "UserStoreVerification")) = 1, First(Fields!storekey.Value, "UserStoreVerification")," ")
You can create a separate dataset to populate the "default values" for the parameter. In this dataset you can add logic to count the number of rows that would be returned by the other dataset that provides the parameter values. If there are greater than 1 values returned by the first query then the second dataset just returns NULL (i.e. no default values are selected).
Example
If your original dataset for parameter values (e.g. "dsParamProduct") used a query like this:
SELECT ProductNumber
FROM dbo.Product
WHERE Available = 'Yes'
Then the dataset query for the default values (e.g. "dsParamProductDefault") could be something like this:
DECLARE #ValueCount INT
SELECT #ValueCount = COUNT(*)
FROM
(
SELECT ProductNumber
FROM dbo.Product
WHERE Available = 'Yes'
) vals
IF #ValueCount = 1
SELECT ProductNumber
FROM dbo.Product
WHERE Available = 'Yes'
ELSE
SELECT NULL
Supplying "NULL" as the default value when there is more than one value will mean none of the available values are selected and therefore the user will have to manually select them (assuming that NULL isn't a valid value for your parameter - if it is then make sure the default query will return something else that is definitely not valid). If there is only one possible value then the default value query just returns the same result as the parameter values dataset, which means that the parameter value will be selected.
Set up another parameter that is dependent on the first, same type but slightly different name, and do your code at bottom with one suggested change:. Change " " at the end before the parenthese end to be 'NOTHING' instead. I believe this is interpreted by SQL as NULL which is what you want.
Now you should be getting population of the parameter so I would debug and check it by just dragging and dropping it to the design surface and it should be black if you have more than one default value. You can optionally make this parameter 'hidden' once you can confirm it works.
Now you trick your main dataset with a nifty predicate (or else use some other logic if it suits you better)
Where value = isnull(#DependentParam, value)
Basically this is stating "if the parameter is not null use it, else equate the clause to be everything as it will assume value = value".
I've set up a report with a multi-valued parameter. The dataset is essentially
select 'Abc' as field1
Union all
select 'lmnop'
union all
select 'xyz'
order by Field1
Available values - Label and Value are both set to Field1
Default values - Value is set to Field1
I would expect only the 'Abc' to be selected by default and the rest unselected. But instead, I'm seeing all of them selected. This works as expected with single valued parameters.
SSRS 2008 R2
Based on this answer and some quick testing, it seems that when a parameter is defined as multi-value and there is no NULL in the dataset, the default behaviour is to select all of them. Otherwise, it selects None. Select All as default value for Multivalue parameter
Which makes sense, I suppose, from a behaviour perspective. You're allowing multi-select so why not assume someone will start with everything selected? Seems as arbitrary as expecting the first thing to be selected.
Got it, whatever is returned from the default values dataset will become selected when the report is run.
So if I have as Dataset for Available option
select 'a' as field1
union all
select 'b'
union all
select 'c'
and I have as Dataset2 for Default option
Select 'b' as selectedField
Then, only 'B' will be selected by default when the report is run. Makes sense.