SSRS: When Multi-value Parameter = Select ALL remove filter in Script - sql

I have a report that has multiple multi-value parameter. What I wanted to do is if the parameter is = Select All I'll remove that parameter to my SQL Script.
Example is I have a Product group and Product Name parameter and what I want is if the user selects all the product group my script will be like:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (#ProductName)
While if the user did not select all Product Group, my script will be like:
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (#ProductName)
AND PRODUCT_GROUP IN (#ProductGroup)
I want to know how Can I detect when multi-value parameter is = Select All. I think it will really help the loading time of the tool if I just remove the filter on my script.

As far as I know, you cannot detect when "Select All" has been checked by the user.
To remove the filter completely when the user selects all the choices in a multi-valued parameter you would have to employ logic in your stored procedure that checks to see if all the choices were passed to it in the parameter, and if so, don't use the parameter at all in the main query.

You can add your own ALL value to the parameter. In the dataset query check if the user have selected 'ALL' if so don't use the parameter.
Something like this:
IF ('ALL' IN #ProductGroup)
BEGIN
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (#ProductName)
END
ELSE
SELECT * FROM TABLE WHERE PRODUCT_NAME IN (#ProductName)
AND PRODUCT_GROUP IN (#ProductGroup)
It is not tested but should work

If your parameter is based on a dataset, you can compare the numbers of elements selected in the parameter vs. the number of items in the dataset for the parameter.
=IIF(Parameters!AREA.Count = CountRows("Areas"), "ALL", "Some")

Related

Report Builder - 3 Parameters all in one Query. Forward dependencies are not valid

I have an issue with building my report, I have 3 params and all 3 are in a query, they are supposed to get their values from the "drop down menus" before running the reports and are used in a where cluase to get specific stuff from the database. However I can seem to get it to work.
Example Query
Select * from [Table]
Where ID = #ID and DateFrom = #DateFrom and DateTo = #DateTo
order by ID
This is the query, I tried changing the orders of the params but it doesnt work.
Error:
The report parameter 'ID' has a DefaultValue or a ValidValue that depends on the report parameter "ID". Forward dependencies are not valid.
Based on the error you reported...
"Error: The report parameter 'ID' has a DefaultValue or a ValidValue that depends on the report parameter "ID". Forward dependencies are not valid."
I suspect your ID parameter's valid values are taken from a dataset query. The dataset query uses a parameter called #ID . You cannot populate values for a parameter if the parameter you are trying to populate is required by the query.
If you are trying to get a list of available ID's to populate the ID parameter drop down then you need to create a separate dataset for this. The dataset query would be something simple like.
SELECT DISTINCT ID FROM [Table] ORDER BY ID
You can then change your ID parameter's "Available Values" dataset to point to this new dataset.
If this does not help, show you report design (the parameters at least), the parameters properties and the dataset queries for each one. Your issue should be clear once all that is visible.

How can I include multi-select parameters in my SSRS report?

I have an SSRS report with a multi-select parameter.
I want to include the parameter in my data-set. The data-set is made using a SQL query. Usually, I would do something like this:
SELECT * FROM table WHERE value = #parameter
How would I achieve the exact same outcome, using a multi select parameter?
E.G. the parameter could have the following options ticked:
Option 1
Option 2
Option 3
So my query should work like this:
SELECT * FROM table WHERE value in ('Option 1', 'Option 2' 'Option 3')
So, with a parameter, i'd imaging it would look like this:
SELECT * FROM table WHERE value in (#parameter)
But what would the correct syntax be to refer to the multi-select report parameter using my dataset built from an SQL query?
If you query is directly in the report's dataset (so NOT a stored procedure) then your final SELECT would work
SELECT * FROM table WHERE value in (#parameter)
SSRS will convert the values into a comma separated list and inject them into your script so you don't need to do anything.
on SSRS 2016 I can use
= any(string_to_array(#parameter, ','))
also make sure to allow for multiple values

How to create Selection and connecting output of deliveries and positions of delivery

How can I create a selection criteria and get the output fields?
Example:
I need the selection to be delivery number and the output field would be delivery number, material number, quantity etc.
How can I write the select statement to get the result from the fields ?
First of all, a PARAMETER is necessary (or SELECT-OPTIONS, depending on what you need):
PARAMETERS: p_delnr TYPE <delivery_number>.
Then make a select statement:
SELECT <delivery_number> <material_number> <quantity>
FROM <DATABASE TABLE>
INTO CORRESPONDING FIELDS OF <local_structure> "(or local table, with the TABLE addition)
WHERE <delivery_number> = p_delnr.
Then, after you have the data selected, you can output it with a WRITE statement or any way you want.
You should also check out following documentations, for more information:
SELECT STATEMENT
PARAMETERS
SELECT-OPTIONS

SSRS Dropdown for column items

I've built a SSRS report using a SQL query for the Dataset1. I'm trying to build a parameter that gives the users a dropdown list. I ended up creating a Dataset2 to get distinct values for the parameter Label and then use Dataset1 for the actual value (allowing for multiple values).
EDITING PER Request:
Dataset1 query:
SELECT vu_SOPWork_HistoryUnion.Type
,vu_SOPWork_HistoryUnion.SOPTYPE
,vu_SOPWork_HistoryUnion.SOPNUMBE
,vu_SOPWork_HistoryUnion.Date_Document
,vu_SOPWork_HistoryUnion.ExtendedPrice
,IV00101.ITEMNMBR
,IV00101.USCATVLS_2 AS Family
,IV00101.USCATVLS_3 AS Product
,vu_SOPWork_HistoryUnion.VoidStatus
,RM00101.CUSTCLAS
,GL00100.MNACSGMT
,vu_SOPWork_HistoryUnion.BillTo_CustNum
,vu_SOPWork_HistoryUnion.BillTo_CustName
,vu_SOPWork_HistoryUnion.sales_territory
,vu_SOPWork_HistoryUnion.ITEMDESC
FROM (
(
test.dbo.vu_SOPWork_HistoryUnion vu_SOPWork_HistoryUnion INNER JOIN test.dbo.IV00101 IV00101 ON vu_SOPWork_HistoryUnion.ITEMNMBR = IV00101.ITEMNMBR
) INNER JOIN test.dbo.RM00101 RM00101 ON vu_SOPWork_HistoryUnion.BillTo_CustNum = RM00101.CUSTNMBR
)
INNER JOIN test.dbo.GL00100 GL00100 ON IV00101.IVSLSIDX = GL00100.ACTINDX
Dataset2 Query:
SELECT DISTINCT IV00101.USCATVLS_2 AS FamilyNames
FROM test.dbo.IV00101
I would like to use the Dataset2 "FamilyNames" as the label options against Dataset1 "Family" values. Dataset2 gets the distinct values that I want to put in the drop down for the user to choose and then receive all rows that has that value in Dataset1 "Family". I'm an expert on not giving enough information. Hope this helps you help me. Thanks.
OK, do the following..
Create DataSet1 with the query as you have it now but append the following to the end of the query
WHERE USCATVLS_2 IN(#Family)
When you do this, the #Family parameter will be created automatically in your report, we'll get back to this later.
Create another dataset called Dataset2 (or a more sensible name like 'families' in this case) with the following simple query.
SELECT DISTINCT USCATVLS_2 FROM test.dbo.IV00101 ORDER BY USCATVLS_2
Edit the #Family parameter:
Set it to multi-value
Change the available values to be a query
Select your 2nd dataset as the datasource
Choose USCATVLS_2 as both the labels and values.
Create your report as normal with the tablix/matrix based on Dataset1.
Notes:
A few other things you might want to consider, but not required.
If a list of family names with some kind of ID is available in your database then I suggest you use that for your parameter list, you would also then have to edit the query in dataset1 to match. Remember that the parameter will contain whatever is in the column of the query that you chose as the value column in the dataset that populates the parameter list
Consider using aliases for table names in your queries rather than the full table names all the time, it makes the code more concise and easier to read.
Name your datasets according to what they contain or do, e.g. I would call Dataset2 'Families' or something similar as that is what it contains. When your reports get more complex it will make them easier to understand.

Pentaho get variables from table input to use it in sql script

I'm trying to get variables from table input, table input return this data:
ID, name
ID, name
.., ...
ID, name
I want to use this data to get other data in a other table input:
select id, name, date, nightmare from table where id = ${ID} and name = ${name}
or better:
select id, name, date, nightmare from table where id in ${ID} and name in ${name}
Note:
- ${..} -> variable
- I can't do subquery, each query are in different dbms
Thanks
What you're after aren't variables, which would need to be set before the transformation initialises and are always single values.
You're after parameters.
Your Table input1 returns several rows of data with fields id and name; you connect it to a new Table Input where you want to pass these values, for example, in the where clause:
select * from customers
where id = ? and name = ?
The question marks will be replaced by the values coming from the previous step.
You just need to fill in the name of the first step in the box "Insert data from Step" and check the "Execute for each row" box.
Now your query will run once for each row arriving at that step, and the values will be replaced.
Caveat:
each parameter is used only once;
and they will be passed in the order in which they arrive;
all incoming fields must be used in the query.
If you need to use the same parameter multiple times or use them in a different order you'll need to change the structure of your incoming data stream with a Select Values step.