Show/Hide Column Header on Toggle in SSRS - reporting-services

I am working on a requirement that allow me to show columns when a user clicks on "+" (expand a row), and hides the column when a user clicks on "-" collapse a row.
So for example, when all rows are collapsed, report looks like:
When a user click on A to expand the a row in the report, then report should look like
Please note that COL4 only shows up when a row expands.
I have tried to set the visibility properties but the result I am getting like
If I am trying to set the header textbox properties getting an error like.
"toggle item must be the text boxes that share the same scope as hidden item or are in a scope that contains the hidden item, and cannot be contained within the report item unless current grouping scope has a parent"
I am Using Matrix Table

The problem is that clicking on a Col1 toggle will only be able to hide elements contained within your table grouping (which doesn't include the header of your col2) and you will see the error you mention above, "toggle item must be the text boxes that share the same scope...".
You can place a textbox outside of your table area and that will be able to toggle the column visibility, but that would expand the values for all col1 one grouped values and will not be what you are looking for. Unfortunately you cannot do exactly what you are looking for; the best option is the one you show above.

Related

SSRS expression based on visibility of a textbox or column

Is it possible to inspect the visibility (Collapsed/Expanded) of a textbox in SSRS and use this in an expression?
For example :
=iif(Fields!column1 Is Visible,"Use this label","Use this other label")
What I want to accomplish to have the initial value of a column header display some text, when user clicks a particular value the details row are displayed (this is a Tablix), and then the header would change to something else (E.g. initial report state is to hide detail rows and only show Tablix member totals so column displays "... total", when user expands to view details column header changes to "... number".
In MS Access through VBA I could inspect the visible property and create code based on this. Till now haven't found a similar way of doing this in SSRS 2016.
Tried setting expressions for visibility as well as setting expressions for changing value of a textbox.
=IIF(Fields!accountnum.Value IS NOTHING OR Fields!accountnum.Value = TRUE,"Station #", "Station Count")
No error messages. My results should be to change header (textbox) value based on whether detail rows are collapsed (hidden) or expanded (visible).
To answer your first question:
Well of course this is possible, just not they way you want to do it. Here is a smimple example. Lets say your visibilty criteria is the following expression:
'Visibility expression
=IIF(Fields!Category.Value = "Visible", False, True)
Now you dont check on the visibilty with the Is Visible criteria, you just use the same expression again. Like this:
=IIF(
IIF(Fields!Category.Value = "Visible",
Fale,
True) = True,
"This one is not visible",
"This one is visible")
To answer you problem:
They way you want to do it, it is not possible. But you can do this with a workaround.
Add a user defined parameter to your report with two options:
Display details
Hide details
Then add two tablixes to your report. One tablix without the details and one tablix with the details you want to show.
Then go to the first tablix Tablix Properties > Visibility and add the following expression:
=IIF(Parameters!VisibilityParameter.Value = "Display details", True, False)
And the expression for the other tablix visibility:
=IIF(Parameters!VisibilityParameter.Value = "Hide details", True, False)
Now based on the parameter result the talbix with or without the details will be displayed.
You can do this, maybe it won't look too elegant but I'll show you what I did and you can see if it's useful.
Note: Using this method, you can't change the actual column header directly as it's out of scope so this may not meet requirements but you may be able to adapt it. I just thought it was a nice challenge ! :)
First I got some sample data (WideWorldImports sample database) that just gave me a CountryID, CountryName and Continent.
Once you have your data, add a table, drag CountryName into the first column and remove the remaining two columns.
Then right-click the Details row group and do Add Group => Parent Group Choose Continent as the Group By field and check the Add Group Header option.
The table design should look like this, nice and simple.
Next we will set the toggle on the detail rows. Right-Click the "Details" row group and chose "Group Properties". On visibility, click 'Hide' and check the "Display Can be toggled by the report item" to Continent.
We should now have a report that expands and collapses as expected.
Next vertically expand the 'blank cell' just above the countryname as we'll need a bit of room to work with. Make it about 4 times the normal height, we'll change it back later so the size is not important.
In the blank cell, right-click and do Insert => Rectangle.
In this rectangle, right-click and do Insert => TextBox. Double click the text box and type your "collapsed state" column header caption. In my example I just used "Collapsed Header".
Repeat and add another textbox (It must be within the rectangle again). Set this text box to your "expanded state" caption. In this example I just used "Expanded Header".
Next, right click the "Collapsed header" textbox, then properties then set the visibility to Show and the toggle item to Continent.
Repeat for your "Expanded Header" but this time set visibilty to Hide, like this..
Finally, position both text boxes at location 0,0 so they overlap and shrink the cell back down to it's original size.
The final design will look something like this...
When we first run the report we see this.
If we expand a node, we get this.
I do not think this is possible in SSRS. You could change column header text depending on your condition, For Ex: IF (A) then Header A else Header B. But you wish to change Column Header based on some clicks (expand / collapse) on report and this is not possible. I mean we need some data to set condition not clicks.
But maybe someone with more Experience on SSRS would throw some more insight.
This is what InScope() is for. See here for more information

Get Value from table when page break

I put a table and a textbox in the body area.
There are three columns in the talble, ItemType, ItemId, ItemName
Page breaks when ItemType changed.
The expression of the textbox is "=First(Fields!ItemType.Value, "DataSet1")".
Set RepeatWith property to "Talix1".
When Report runs, in the 1st page, the value of the textbox is "Green" .
but 2nd page the value is still "Green". In fact I want to see "Red"
What should I do to change the value when page breaks?
thank you for your help.
Report Design Result
Because the text-box is currently outside of any data-set context, the value will not change. The expression is grabbing the first value in the data-set each time. Changing the page will not change the first value in the data-set.
You are going to have to put your text-box, and table, inside a List. Once that is done, set the group properties of the List to group, and page break, based on item type (ItemType). You can set these from the context menu you get when you right-click the Details for the List in the Row Groups pane, and choose Group Properties.
You can remove the grouping from the table since the List will handle that now.
By doing this, you now have your text-box in a data-set context. The expression for the value of the text-box can be changed to something like the following.
=First(Fields!ItemType.Value)
The scope is no longer needed since that too is set by the List.
Hope this helps you out.

SSRS grouping columns to toggle visibility

I have an SSRS report with several columns - 3 of the columns had visibility set such that it could be toggled by a particular cell. The report was a single tablix with headings at the top and row groups set up below those headings. My toggle item was in the headings - i.e. outside any row groups. There are no column groups - I just want to be able to hide a few columns on demand. It worked fine but...
When a new requirement arose to throw a page within one of the groups, I had to move the headings such that they were within the highest level group. Since then I continue to get the error message:
"Toggle items must be text boxes that share the same scope as the hidden item or are in a scope that contains the hidden item, and cannot be contained within the current report item unless current grouping scope has a parent"
I have tried removing the toggle and starting again from scratch but I continue to get the message. I have also tried viewing the XML in case there is any stray toggle logic hanging around but it appears not. Any suggestions as to how I might resolve this would be greatly appreciated.
The best I could come up with is to add a new row at the very top of the tablix outside any groups and immediately above the headings (themselves within a group) and put the toggle textbox in that row. That seemed to do the trick (for Excel output anyway).

Display a Tablix on click of Image in ssrs.

We have one requirement in SSRS where we need to display the tablix on click of the Image. By default tablix will be hidden, when user clicks on the Image then we need to show the hidden tablix. Kindly suggest some solution if any. Thanks.
You can toggle the visibility of an object. Initially have the visibility property set to hidden, then use the toggleitem property to accomplish what you are looking for. Instructions are below
To hide static rows in a table, matrix, or list:
In report design view, click the table, matrix, or list to display
the row and column handles.
Right-click the row handle, and then click Row Visibility. The Row Visibility dialog box opens.
To set the visibility, follow steps 3 and 4 in the first procedure.
To hide static columns in a table, matrix, or list
In Design view, select the table, matrix, or list to display the row and column handles.
Right-click the column handle, and then click Column Visibility.
In the Column Visibility dialog box, follow steps 3 and 4 in the first procedure.
Then use the ToggleItem property of the table. Select the table, locate the property in the Properties window and specify the name of the textbox. If you now render the report you'll notice a little + icon in front of the testingBox content.
To find out what your textbox is called first select that and look at the bold part in top of the Properties window. To change it you can use the Name property. It's advisable to give it a clear name so you can easily locate it.

How to hide one row in a rowgroup?

I have a report in SSRS 2008 that has the following structure:
List
Tablix
Row Group
Row1
Field
Row2
Subreport
Is it possible to completely hide the first row in the row group, based on some condition?
I can hide the row, but the empty row still takes up space, I want the empty row to take up no space at all.
Part of the answer is given in the discussion that this question links to:
Try to set the Hidden property of the Static Row Group under the Details Group, in this case the whole row will disappear instead of the content of the textboxes.If you are using Report Builder, you need to switch to Advanced Mode (make sure that the Properties and the Grouping windows are displayed, go to the upper right side of the Grouping window and press the black triangle), click on the second "Static" item under the "(Details)" group and you can set the Hidden property on the Properties window.
However, this causes an exception when trying to export the report as PDF.
you can write an expression for the visibility of row.