How do I format a row within subtotal on matrix? - reporting-services

I have a dataset that I need to report as a matrix. Within the dataset, I pull together the individual totals for CDNs within a week, along with the overall total for all CDNs within the week. I do this to make it easy to calculate the weekly percentages within the report.
I am using Visual Studio 2005 to build the report. You can see the matrix definition on Sheet2.
Everything works out fine until i get to the bottom Total. As you can see on Sheet3, the total Offered is correct, but the % to Total is not correct. In fact, i do not even need this row visible on the Total section. How can i hide this row?

Here are two possible ways to hide the rows or row values in sub-totals section of SSRS reports. The examples shown below use SSRS 2005.
A. First option is to set the Initial Visibility Expression on the cells to hide the rows. Totals label cell will span to two rows, which might not look good. Refer screenshot #1.
B. Second option is to display the data in the cells based on the scope. This will not hide the row but won't show any data. Refer screenshot #7.
Following sections explain how each of the above options can be achieved.
Using Option A:
Right-click on the cell that has Phonenumber and CDN source expression and select Edit Group... as shown in screenshot #2.
Make note of the Name. Here, this example uses the name PhoneNumber. Click OK or Cancel. Refer screemshot #3.
Right-click on the cell containing the text % to Total and select Properties as shown in screenshot #4.
On the Textbox Properties dialog, click on the Visibility tab and select Expression radio button. In the Expression, enter the value =Not(InScope("PhoneNumber")). Refer screenshot #5.
Right-click on the cell containing the expression to calculate the % to Totals value and select Properties as shown in screenshot #6. Repeat the step 6 for this cell as well.
Using Option B:
Perform steps 1 & 2 mentioned in previous option A.
Right-click on the cell containing the text % to Total and select Expression as shown in screenshot #8.
Change the expression to =IIf(InScope("PhoneNumber"), "% to Total", Nothing)
Right-click on the cell containing the expression to calculate the % to Totals value and select Expression as shown in screenshot #9.
Change the expression to =IIf(InScope("PhoneNumber"), Round((IIf(Sum(Fields!Offered.Value) = 0 Or Sum(Fields!WeekTotal.Value) = 0, 0, Sum(Fields!Offered.Value)/Sum(Fields!WeekTotal.Value))) * 100, 1).ToString() + " %", Nothing)
Make sure that you change the expressions according to your requirements.
Output of option A can be seen in screenshot #1 and output of option B can be seen in screenshot #7.
Hope that helps.
Screenshot #1:
Screenshot #2:
Screenshot #3:
Screenshot #4:
Screenshot #5:
Screenshot #6:
Screenshot #7:
Screenshot #8:
Screenshot #9:

I was able to figure out another way to do this. Because of how my data is set up, the WkTotOff.Value in the SubTotal section is always going to be a factor of the number of CDN_Values there are. Therefore, i could place
=iif(Sum(Fields!WkTotOff.Value)/CountDistinct(Fields!CDN_Val.Value) = Sum(Fields!Offered.Value), "Silver", "White") in the Background Color in the properties of the row i want to hide (in the detail section). Since the individual detail level will never meet this criteria, these will remain visible.
This seems a bit sloppy but was all i could figure out. I will try your methods as well.
PK

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

Combining Cells in Locally Rendered Microsoft Report

I have a basic Tablix in my report that currently renders as follows:
These are steps in a manufacturing process with the clock number of the person who performed them with date performed in the last two columns. However, sometimes steps are combined and performed together. In the example above, steps 10-20 are performed together, and 30-40 are performed together. So I would really like the report to be rendered like this:
I do have a column in my data called "StepRange" which in the above example would be "10-20" for the first two rows and "30-40" for the third and fourth rows. So when the value of StepRange is alike, I know those rows are performed together and henceforth the last two columns should be combined. My example shows only two rows being combined at a time, but it could be any number.
How can I make my report look like the second example above instead of the first?
Single Tablix Method
Rather than literal conditional merging, you can set the border style of a textbox using an expression to achieve a similar effect. There are a few steps, but none of them are particularly involved.
Create a parent group for StepRange. Do not add a header or footer, and delete the added column without removing the group.
Make sure that your properties panel is visible on the right of your screen. If not, check the "Properties" checkbox under the View ribbon.
Click on your first detail TextBox and expand the "BorderStyle" property. Set the "Top" property to the following expression:
=IIF(RunningValue(Field!Step.Value,CountDistinct,"StepRange")>1, "None", "Solid")
Set the Bottom property to "None".
Set the expression of the detail TextBox itself.
Replace FIELDNAME with the appropriate field:
=IIF(RunningValue(Field!Step.Value,CountDistinct,"StepRange")>1, "", Field!FIELDNAME.Value)
Repeat this process for each detail TextBox.
You may need to create a dummy row at the bottom with a black top border if you do not have a summation row. (optional)
The expression only evaluates to "Solid" for the first Step value within each StepRange group, so subsequent rows do not have a top border and appear undivided.
Nested Tablix Method
Using a nested Tablix is more straightforward. I have had some issues with them, including some rendering hiccups. But in a report this simple that may not be an issue at all.
Set up your main Tablix to group on StepRange.
Either clear or add a column to the left for the individual steps.
Select "Insert Table" from the toolbar and click on the empty cell.
Set the cells to your step and operation fields and delete the extra column.
The result should look roughly like this:
By default the inner Tablix will be detail grouped. If your detail rows are more granular than the "Step" field, go to the properties of the "(Detail)" group and add a Group Expression for Step.
You can also delete the inner header row if you don't want to see it repeated in the report.
This results in the employee fields actually being merged and spacing properly. If you don't use an aggregate function on those fields, their value will be that of the first row returned internally. Which is moot if their values are uniform across steps.

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

Hide Duplicate Legend Items in SSRS Report Chart

I have a stacked column chart in SSRS that displays data by hour. Included in this data is the meters reading, kVa, Average Temperature and Heat Index for that hour. For some reason, the legend items for the temperature values and the kVa are being repeated for each meter in the dataset. I would like for my legend to have the following values: kVa, Average, Heat Index and each meter number. I included a sample of the chart, the chart data configuration as well as some sample data below. Any idea how I can accomplish this? Please let me know if any other information is required.
Here is a good solution which covers all possible scenarios
go to "Report Properties" (right click in the blank area)
go to variables and add a new variable called myflag, set the value to "true" and deselect Read-Only
go to the "Series Properties" and then to "Legend" and click the expression button next to "Do not show this series in legend"
Type or paste this code:
=IIF( Variables!myflag.Value = true, false, true )
=Variables!myflag.SetValue( false )
and that's it.
hint
You can use the same variable in the same series' visibility expression without the setting part in the second line to avoid overlapping the drawing of the same series on the chart
I couldn't get either of these answers to work for me. Ended up using RowNumber and CountRows in the expression for Do not show this series in a legend property.
=IIF(RowNumber("Dataset")=CountRows(),false,true)
You're getting one set of legend values per series you've added. For each series besides the one whose legend you want to keep visible, right click the series (each top-level row in the "Values" box), choose Series Properties, go to the Legend tab, and check "Do not show this series in a Legend."
I was able to fix my issue using information from this question on stack overflow: https://stackoverflow.com/a/1867343/965213
Go to the Legend page of the series properties you want to include in the chart.
Edit the function for the "Do not show this series in a legend" property.
Use this formula: =IIF(Fields!SerialNumber.Value=Last(Fields!SerialNumber.Value,"MeterDetail"),false,true)
Now the series will only be repeated once instead of once per series group.
Hope this helps!

ssrs 2008 : Do not want group header to appear for every group

I need to generate SSRS report as shown in the above picture (the top portion of the image got cut off but it has the header as shown below which should appear on only at top of each page).
HEADER is as below
Bin ItemNr Description QtyOnHand
My data output is as below which I need to use to generate report format as shown above.
![enter image description here][2]
Issues I am facing
I used 2 tablix. The first tablix has groupby on ItemNr and I show only if the record has binPriority equal to 0. I then added another tablix within first tablix to findout if the itemNumber count is >1 (else I hide this tablix). Here I printed rows where binPriority is <> 0.
I get the data output somewhat similar to what I wanted but the header row appears for every item (where binPrority is 0). I want it to appear only per page. So what I did was I set the row header within first tablix as invisible and added the textboxes within the page header. I guess this is not the way to do it but this is where I am so far).
Also when I export to PDF, I see blank lines between each item (See image below). To me this lines looks like the 2nd tablix which is hidden. The report format/display is perfect when I view it on the screen.
The report is set to print in landscape and all the margins are 0.
Please suggest how to achieve the above report format.
Update 1 : I have modified the question by removing some of the images that had live data.
I am marking this question as answered.
I modified the report by removing the 2nd tablix and using Grouping.