SSRS expression based on visibility of a textbox or column - reporting-services

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

Related

How would you dynamically hide or display a SSRS header based on a parameter?

I need to hide or display the header of a SSRS report based on the value of a parameter. The parameter is called "Show Header?", and the values of this parameter are true and false. Is there a hide property for headers? If so, I'm not able to find it.
I'm not sure if you are talking about the table Headers or the report header (some people seem to use the term interchangeably).
I'm still self learning SSRS so there may be better options out there but a quick test i found the following.
For a Boolean Parameter type:
I used the logic below to hide the visibility based on parameter (you may want to play around with the true/false order depending on your parameter to get it to work how you want):
=IIF(Parameters!ShowHeader.Value, False,True)
Table Headers:
Just highlight the text boxes you want to show/hide and open up the properties, under Visibility select "Show or Hide Based on Expression"
(NB. i found highlighting the full row would only let you select the full tablix properties not the single row so I just shift clicked all the cells and pasted the IIF statement into the "Hidden" Property for the selection in the properties window)
Report Headers:
I am not sure you can hide the Header (couldn't see any immediate hiding properties or options), however you could hide the contents of the header using the same sort of process (right click properties and alter the Visibility setting or add the code into the Hidden property). In testing I found that the header would reduce to remove white space when items where hidden so may work out for you.
The sneaky way I've found to get around the limitation of SSRS on this is to put my "header" in the first row of the first tablix and just hiding the actual report header, which you probably know cannot be deleted. That way, I can show or hide the first row of the tablix by whatever criteria I desire. This method works well for me.

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.

How can i hide a Column group when I use pagebreak

I have made a matrix report in SSRS with two column groups. I have added one of the column group also in the Row groups to use page break so I can have each column group on a separate page.
And you see in the following pictures the preview of what has happened with the output.
Page One
Page Two
You see that the page break has worked but it doesn’t hide the other column that shouldn’t be present.
Does somebody has a clue how to fix this?
I don't think just adding a page break will hide the column group's visibility. In SSRS, you can set visibility of a column group based on a condition. Right click on the column group, select Group Properties, Select "Visibility", and "Show and Hide Based on Expression".
You could set an expression based on a field or parameter value. For example, if a parameter value is such, the visibility is true, else false. Example:
=IIF(Parameters!"PARAMNAME".Value.Equals(value),false,true)
I would think in your case, if some a field was null or blank, hide the column group. The page break will take care of itself.
I have solved it with the list object in the toolbox.
I have put the matrix in the list and used a page break on the list.

SSRS Need expression in tablix properties for each cell in the row. That will adjust the Size properties to reduce row to zero if there is no value

I am getting an error on this expression. help? Visual Studio SSDT. I am putting the expression in the properties for the size.
=IIF(SUM(Fields!BridgeBuilderApproach.Value) =0.2in,TRUE, 0.0in, FALSE)
For starters, the IIf expression should have 3 parameters:
=IIf([Condition], [True Result], [False Result])
Your example seems to have 4 parameters? The way you'd want to format it (without knowing exactly how your data looks) is likely the following:
=IIf(Sum(Fields!BridgeBuilderApproach.Value)=[Value that makes the row disappear], 0.0in, 0.2in)
click on Column Groups top, drop down to advanced then you see the Static 1:1 ratio over in the row groups, click on the static row you need and it will highlight it on the design tab of the report, then go over to properties, where you can then enter the expression into the properties hidden. this will apply for the entire row and hide the row if 0 is result
=IIf(Sum(Fields!BridgeBuilderApproach.Value)=0, True, False)
I would use the visible property of the textbox within the tablix.
Right click on the cell(textbox) of the table and choose TextBox Properties.
Select the Visibility Tab.
Select the radio button, "Show or hide based on an expression" and click the Fx.
Enter this or similar in the expression window based on your criteria.
=IIF(SUM(Fields!BridgeBuilderApproach.Value) = 0, TRUE, FALSE)
Brian

Conditional Visibility of rows in SSRS 2008

I'm very new to SSRS 2008.Here is my problem/question.
I have 15-20 check boxes in the web interface on which the report is based on.I gave ID values to all the check boxes and passing the values of the selected checkboxes into the table so that I can get them on the report side.
On the report side,if a check box is not selected I've to hide that row.For instance if the column name on the table(REPORTCRITERIA) is LOCATIONS and if it has values (1,2,3).This means that checkboxes 1,2 and 3 are selected.how do I query that so that I can accomplish what I want?
Please help.
Thanks,
Praveen.
In Report Designer, left-click the detail row, choose Row Visibility from the context menu, and use an IIF(Condition, True, False) for Hidden, meaning if the Condition holds the row will not be visible.
Example that shows a specific text box ONLY on the very last page of the report:
Visibility / Show Or Hide based on an expression:
=Globals!PageNumber < Globals!TotalPages
The expression HIDES the text box element only when this expression is true, and it will UNHIDE (show the element) when the expression turns FALSE.
Hope this helps,
If not, drop me a line or two.
Alejandro.-