SSRS Dynamic Tablix/Table using parameters - reporting-services

I have one scenario in my project SSRS reports, I want to create a tablix or table region based on the multiple parameter values selected from the drop down list. Based on the number of parameters selected from the drop down list, it should create separate table for each parameter vales. is it possible?

You can try creating different tables for each value in the parameters. then just hide the table(s) if it's not selected by the user.

Related

Create Multiple Tables according to a list input in SSRS Reports

I'm new to SSRS Reports.
I have an SSRS Report that takes a list of category Ids
And I stored procedure that called SP_GetProductsByCategory that takes categoryId
I want to create the tables dynamically according to the list.
If it takes 3 Ids , a 3 tables will be create with 3 procedure calls.
This is fairly simple to do using subreports.
First create a report (let's called it singleCategory) that accepts a single categoryId as a parameter (call the parameter pCategoryId for example). Setup the report so that it produces the table you require but just for this single category.
Once that is done, test it and make sure it's working as expected. Remember this should only accept a single categoryId.
Note:
I'm assuming your users will select categories from a database driven parameter list...
Next, create a new report (e.g. CategoryMasterReport) and add a dataset (dsCategories) to get a full list of available categories for the user to choose from. This might be something as simple as SELECT categoryId, categoryName FROM myCategoryTable.
Next, add a parameter (pCategories for example). Make this a multi-value parameter
Set the available values for the pCategories parameter to the dsCategories dataset and choose label and value columns as appropriate.
Now create another dataset, this one will list all the categories selected by the user. Call it dsSelectedCategories and set the query to something like...
SELECT categoryId
FROM myCategoryTable
WHERE categoryId IN(#pCategories)
Next, add a table to your report and set it's DataSetName property to the name of the dataset we just created (dsSelectedCategories). We only need one column in this table so you can remove the rest. You can also remove the header row.
In the table's remaining textbox, right-click and choose "Insert ==> Subreport". This will fill the textbox with a subreport placeholder. Right-Click the subreport placeholder and choose 'subreport properties'.
In the general tab set the subreport to be used as the one we created at the start of this (e.g. singleCategory).
In the parameters tab, click 'Add' then either choose the name of the parameter from the drop down list or type it in (following the example names from earlier this will be pCategoryId). For the value property, click the drop down and choose the categoryId field (if you followed closely this might be the only field listed.
That's it.
Now run the main report (CategoryMasterReport), select some categories from the list and you should see a table for each selected category.

SSRS Create As Many Tables As Needed (Using One Dataset) Based on a DataSet Field

I have a query that returns relevant data about inspectors and how long it takes them to respond to issues. The only parameters are a BeginDate and EndDate so for any given date range there could be anywhere from 0 to 100 inspectors.
I am using only one dataset and it contains an "Inspector" field that I'm hoping can be used as a filter to create as many tables as there are inspectors.
I know you can set filters on tables but from my (limited) SSRS knowledge, you must already have the tables created and the filters are typically hard-coded. What I need, is some way for the report to see how many Inspectors there are in the dataset and group those records into their own tables, repeating the same one created tablix over and over as needed.
This is being done strictly in SSRS 2012, not using a ReportViewer where back-end code could help me out unfortunately...
I don't have any code examples to provide, like I said I know you can do filtering but I am at a loss when it comes to doing something like this dynamically based on data... Sorry.
Depending on the report design you could either...
Single report with grouping
1. Create a single tablix.
2. Create a row group by Inspector and then add whatever fields you need to the details section.
3. You can optionally set page breaks between instances of your Inspector rowgroup from the rowgroup properties.
Sub report method
1. Create a subreport that accepts a parameter (InspectorID for example).
2. In the subreport filter the dataset using the parameter passed in so it only return data for a single inspector.
3. Add whatever controls you need to the report to handle a single Inspector
4. Create a main report
5. Add a dataset that gives you a simple distinct list of Inspectors, this will be used to pass parameters to the subreport.
Lets assume it just contains a list of InspectorIDs.
6. Add a list control to the report and set it's dataset property to the dataset that contains your list of InspectorIDs
7. Right-click in the list control's 'cell' and insert a subreport.
8. Set the subreport property to the subreport you created earlier and set that parmameter IsnpectorID to your InpsectorID field.
This will produce a subreport for each instance of inspector it finds.
Sorry about the format of this answer, in a rush!

Display selected values of multi-value parameter in tablix rows

I am designing a report for SSRS. I want the user requesting the report to be able to specify, when they generate the report, from a pre-defined selection some values which should be displayed in a tablix on the report.
I have therefore created a multi-value parameter and populated the Available Values with the options I want the user to be able to select from, and, as expected, when the report is generated the user is able to select one or more of these values.
However, what I now want to do is include a tablix in the report, and display a row for every value in the multi-value parameter that the user selected, with the value displayed in the first cell of the row.
If the values were coming from a data table this would obviously be easy. I've also found answers on how to show all of the selected parameter values in a single textbox using the JOIN function, but I don't want to do that.
The only solution I can think of is to replicate the list of available values in the multi-value parameter in a tablix manually, and link the visibility of each row of the tablix to the selected state of the corresponding value in the multi-value parameter, but that's not very elegant and increases the effort involved in maintaining the report definition.
Any ideas on how to do this? I know the selected values from the parameter simply form an array, but I can't see how to bind a tablix to any data that isn't in a dataset, or how to create a dataset from the parameter values.
Considering that a tablix sources from a dataset, I did some experiments to see how to create a low maintenance solution for you.
Option 1: Create a data set with hard-coded options to match your multi-value parameter and select those options WHERE they exist in the parameter.
Example:
SELECT val
FROM (
SELECT 'opt1' as val
UNION SELECT 'opt2'
UNION SELECT 'opt3'
UNION SELECT 'opt4') a
WHERE val IN (#Param)
Thoughts: easier to maintain than visibility on a table, but still two hard-coded places within the report.
Option 2: Create a dataset that selects the multi-value parameter and splits it by each value. This was my first idea, but I ran into some issues with determining how to actually select the multi-value without a syntax error. I came up with a method that creates a deliminated string in the report and than parsed that string back into rows in the dataset:
Step 1) Within the dataset properties, on the parameter tab, join the multiple values together with a JOIN expression
Step 2) Create a simple query which uses the new SQL Server 2016 function string_split. Note that your database compatibility level MUST be 130 or higher to use this function (SQL 2016+). If this isn't your scenario, there are many string split functions that you can find on Stack Overflow to achieve the same thing.
Fun problem!

SSRS pulling the parameter from multiple location

I need to know if there is a way for us to display a single parameter report by pulling the same parameter from multiple drop down controls.
Does SSRS allow us to have multiple controls(drop down ) to pull the same parameter from different set of data.
If you have a server that can access the locations of the first two sets of data, then the easiest way to be for those would be to combine them into one with a UNION and use a single parameter for them.
I'm guessing that may not be possible so you can create a separate dataset and parameter for it.
Then create another parameter for your entered value. Allow these parameters to have a NULL value so that they do not have to be selected.
Create WHERE clause logic in your SQL to deal with the parameters for the LOT_NUMBER:
WHERE LOT_NUMBER IN (#INCOMPLETE)
OR LOT_NUMBER IN (#COMPLETE)
OR LOT_NUMBER IN (#ENTERED)
This will allow uses to choose from the first or second drop downs or enter a third value. The downside is that the user can potentially use all three at the same time.

How to parameterize DataSet with group variable?

I have 'external' table.
Inside each row of this table I need to show several tables associated with different DataSets.
But I have no idea how I can constrain these 'internal' DataSets with parameters of the group.
Is it possible?
Update
The next step may be to show subreport.;) The problem is that when nested DataSets have empty results subreport is not shown... even static content.
Here is a nice post hot to force subreport to appear.
The idea is simple. You need to add fake DataSet to subreport with query like:
select ' ' as Dummy
and use the result in visible textbox like that:
=First(Fields!DUMMY.Value, "DataSetToForceSubreportVisibility")
It works like a charm.
Yes, this can be done with sub-reports.
1) Create a report, which contains all the "internal" tables you want for each row of the "external" table. Populate it with a dataset that has an ID parameter for which member of the outer group this is, so that all the internal tables will only be about a single group member.
2) Create a main report for your external table. This report contains a List control, and you populate it with a dataset that gets the members (IDs) of your outer group.
Inside each cell of the list is a subreport, which is the report you created in 1). You pass to the ID parameter of the subreport the field containing the IDs you selected for the List control.