Hi everyone,
I wanted to adjust the width of a tablix column dynamically. can some one please let me know how can this be done? when i searched some forums there was a suggestion that i try creating an instance of the report in the CODE of the report properties and access the tablix column using the instance but i wasn't able to do that. Can some one please help if indeed i can try creating an instance of the report and access the tablix and adjust the width dynamically ?
Thanks,
AJ
On the off-chance that anybody is still looking for a way to have dynamic column widths in SSRS (as I was), I've found way that works for most scenarios.
Basically you add another column header to your table/matrix/tablix and set your column to your minimum required width, then add a subreport to the new header. The subreport consists of a matrix with a static row group and a dynamic column group that generates a number of fixed-size columns based on the desired width, which is passed via a parameter from the main report to the subreport.
e.g. Your main report has a column where you want to set the width from data or a parameter, which is in a range from 5 to 10cm, with increments of 1cm. Let's say for a particular column you pass down 7cm to the subreport, which then does a basic SQL loop to produce some data with 7 rows. The matrix column grouping in the subreport points to that data, which produces 7 columns, each 1cm, for a total width of 7cm (plus the row grouping which is shrunk as much as possible). The main report's column then expands to the size of the subreport, which is 7cm.
Select the first column, in properties, find the width property (under size) add an expression that uses the same condition for hiding column 3 and increasing the width of the first column, e.g.
=iif(parameters!par.value=true,"1,5cm","2,5cm")
--EDITED --
I'm very sorry my previous solution was false, I hadn't checked it, I'm sorry to have wasted your time, but I have a solution that works.
create two first columns, i.e. two columns that show the same information, one that is the width that you like when column 3 is visible (lets call that one col1a) and one that is the width that is suitable to when column 3 is hidden (col1b) and then make those two alternate. then when you hide column 3 then you also hide col1a and make col1b visible and then the other way around
There is no property to auto size the column width. Length we can do it dynamically. That is the limitation Microsoft tools.
For now, one solution is to have a reasonable fixed column width (such, as 30) and set the textbox CanGrow to True so it wraps to next line if needed. Another solution is to have two columns and hide one of them conditionally.
Related
I'm creating a report that has 5 columns. However, one column can have no data and in that case I need to hide it. This works using the 'Hidden' property of column but when the column is hidden, I want to make the first column wider. Is there any way to do this in expression?
The only solution I found is to have multiple same tablixes with different column count and then show or hide each tablix appropriately if the specific column has no data. (by checking 'Max' value in column).
Unfortunately, it's not possible to enter an expression to the column width property but if you simply need to change the width of one other column when the first is hidden, I've come up with a workaround that works fairly well.
The idea is a little easier and requires less data to load than your current solution. Basically, you'll create an identical width column that is simply empty -- but set the borders to appear as if it is simply part of another column. So you'll simple reverse the expression used to hide the column with no data in the hidden property. To achieve this, depending on where you choose to add the extra space column, you'll have to adjust the borders of the adjoining cells where there is no right border on the cell to the left and a left border on the cell to the right. Depending on your layout, you would only need a top and bottom border on the extra space column cells.
I did something similar with a report that has 3 pages and 11 columns -- but 8 of the columns changed from page to page. I had to hide one column, show another, and used expressions in column headers and detail rows to simply change the data in each column based on a field that returns the type of the data.
Using SSRS 2013. I am able to hide columns with boolean values, but the report (body) width does not shrink when columns are hidden. Thus, there is excess blank/white space to the right of the report. Is it possible to eliminate this excess space? If yes, kindly will you please advise how?
The report body width - as with any column width and unlike heights - is a set value that cannot be changed on execution. You need to either put up with the white space, format your presentation layer to not be affected by the appearance of the white space or redesign your report so the objective of hiding the columns can be achieved in a different way.
I ran into this exact same limitation of SSRS. I was able to achieve what I believe you are trying to get (consistent report and report col width when certain columns are hidden due to parameter vals, etc.)- by simply having 2, separately formatted report tablix/tables in the report and hiding/showing based on a parameter (or some SSRS-expressible logic):
1 for the condition when all columns are present; 1 for the condition when some columns are omitted- both of them formatted to utilize all available screen real estate to minimize white space and make things look "clean".
Instead of hiding column(s) when my hidden condition is true- I simply show the 2nd tablix and hide the 1st. And when the filter changes to show all columns, I do the reverse (hide the 2nd tablix and make the 1st visible again).
Not sure if that helps, but I figured I should share if it might aid anybody else facing this issue.
PS: Your tablix Hidden expressions will look something like this:
[the full column tablix].Hidden
=iif(Parameters!parmOmitSomeCols.Value = true, false, true)
[the tablix with some columns omitted].Hidden
=iif(Parameters!parmOmitSomeCols.Value = false, true, false)
Main issue i am facing in most of the reports where i have multiple sub reports for each main report in most of the reports,Couldn't possibly align the sub report borders with the main report.
Sub report and main report both are dynamically increasing.
Thanks in advance.
Unfortunately, that's largely correct. Tablix column widths do not dynamically adjust, and subreports do not have direct visibility of their parent's properties regardless. That means that you can't set up fixed width reports with %-width columns, and you can't make subreports autosize to an element of their parent report.
That being said, there is a potential method for simple tables. However, it is moderately involved and a little limited:
You can create a number of "spacer" columns and set their visibility depending on the distinct count of your column groups. This causes each table to end up the same size. You would need to set up your row headers as an adjacent group so that you can toggle their column visibility. You'd also need to set up the columns to be uniform size across tables.
This would require you to know: The maximum number of columns that could be generated (so you know how many spacer columns to create). And the current number of columns to size to, unless you just size to the maximum every time. If that current column number could be determined in the parent report, it could be passed to the subreports as an internal parameter.
The setup would look like this:
I hope this is a simple question, but I have been beating my head against the wall for hours now. I would like to create a column chart in SSRS 2008 with columns that are always the same width and always the same width of space between columns. The catch is that the chart will not always have the same amount of columns.
Here is what I have in scenario 1 with 12 columns:
Here is what I have in scenario 2 with 4 columns:
I would like to see something more like scenario 3 instead:
As of now this is a very simple column chart. The only real modification I have done that I feel will be important to mention is that I have set the PixelPointWidth value to 20 in the Chart Series -> Custom Attributes section. This ensures that the columns all stay the same size. I notice that the PointWidth value in the same section is used to control spacing between columns, but it does so by making the columns larger/smaller to fit. The PointWidth value has no effect when the PixelPointWidth value is greater than zero.
Please help me find the way to keep the columns the same width and also maintain the same width between columns!
Manipulate your Dataset so that it always provides rows for Value 01 through to Value 12, with null values for the measure. Then in the Chart's Category Group properties, use an Iif function for the Label property to set it to an empty string "" if the measure is null (or use another column as a flag).
I have a report where I've specified the Columns property to 3.
I want the data I have from a single query to spread across these columns.
When I print the report however, I just get a single column that spans across multiple pages till the rows run out of data.
How do I tell rs that I want the data to wrap into the next two columns?
UPDATE: Ok, found a link on technet to give me a better explanation of multicolumns (e.g. newsletter style):
Multicolumn, newsletter-style reports
display report data down multiple
adjacent columns. A newsletter-style
layout applies to the entire report.
When you define more than one column
in a report, Report Designer
calculates the width of the columns in
the report, the width of the report,
and the width of the space between
columns based on the number of
columns. It then displays a reduced
design surface so that you can place
report items on the report that will
fit within the column. Note that the
layout of the entire report must be
placed on the reduced design surface.
Additional columns are displayed so
that you can verify that the number of
columns you defined will fit the page
size dimension. You can adjust page
size, padding, and margins to fit more
columns on the page.
Only PDF and Image renderers support
newsletter-style reports.
I still haven't quite figured out how to make the column wrap...but I'll look into it further on Monday.
I addressed my issue by:
Putting 3 Tablix in my SubReport
Adding a Count Aggregate in my SQL results
Doing % calculations in the Tablix filters
For example, Tablix one has a filter formula like this:
=IIF(Fields!MaxRowNumber.Value <= 10, 10, Fields!MaxRowNumber.Value * .4)
So, if only ten rows are returned, display those ten rows in column 1. If more than ten rows appear, then put 40% of the results in Tablix 1.
I do similar calculations for Tablix 2 and 3 to display the 30% in each Tablix respectively.
Feels like a bit of a hack...but it works.
So one approach is to use multiple tablix with a filter that checks RowNumber and accordingly displays particular records in each table.
The other way is called Newsletter-style report (link). This formatting is retained only when report is exported as PDF or Image. It can be previewed only when you select 'Print Layout' on the Preview tab in Visual Studio. Here is an example:
Create a new report with the foll. dataset: SELECT ID,NAME FROM TABLENAME
Add a new table to the report and select the ID and Name as columns
Click on the tablix and press F4 to edit the tablix properties. In the properties window, change the Size - set the width to 2in
Click on the report area outside the report page boundary and press F4 to edit the report properties. In the properties window, change the Column value to 3, and column spacing value to 0.1
On the report scroll to the right hand side, you will notice that there are 2 new columns (so totally 3 columns on the report - because you selected 3 in step 4 above). Now click on the margin at the start of the column 2 and pull it further to the left to bring it as close to the column 1. This is only to reduce the need for huge page size.
Right click on the report area outside the report page boundary and select Report Properties. Change the Page Size - Set the width to 10in
Preview the report. Now select the 'Print Layout' tab to see the result. This formatting is retained only when report is exported as PDF or Image.
As noted in points 5 and 6 - since the report body flows into multiple columns, you must ensure that the page size is at-least equal to -> ([Original report body size times the number of columns] + all the column spacing values). Otherwise it will look messy.