SSRS hide a row where a expression field value is blank - sql

I have a field in my SSRS report that derives a value based on an expression. The expressions is a simple Lookup between 2 datasets and is working fine. It does return some NULL values and what I would like to do is not display the rows where the expression produces a NULL value. I know how to do this on a field that is not based on an expression but not on a field that is. Anyone know how this can be done? Thanks

Chances are, it will be something like the expression below on the Hidden property of whatever it is you are trying to hide/show.
=IIf(IsNothing(<your Lookup expression>), True, False)
Add any other checking in there too, if need be.
UPDATE:
To make this work on the entire row. Right-click on a row header in design mode, and choose Row Visibility... Click Show or hide based on an expression. Add the expression you now have in there.

Related

SSRS Colour Fomatting across multiple columns

I've created a SSRS report to examine whether certain fields contain a specific value using a simple case, when statement with the values returned being 'Yes' or 'No'. I'd like the cells to be coloured yellow with the value is a 'Yes'. (See Sample Table).
I know I can do this using the function IIF(Fields!Result1.Value="Yes","Yellow","Transparent") but for a table with multiple columns (>60), is there a way to copy the background colour formatting without having to write the function for each column?
If you want to compare the value of each text box/cell with "YES" then you can use the ME.Value reference.
There is little documentation on ME (https://msdn.microsoft.com/en-us/library/dd255285.aspx?f=255&MSPPError=-2147217396)
=IIF(ME.Value = "Yes", "Yellow", "Transparent")
To access the value of the current text box, you can use the Visual
Basic built-in global Me.Value or simply Value. In report functions
such as First and aggregate functions, use the fully qualified syntax.
Unfortunately, ME does not seem to be fully implemented - it causes errors when used in places that were not created to use ME correctly. An ACTION (i.e. Go To URL) that uses ME will fail with an error of an unknown reference.

MS Access: Conditional formatting - highlight duplicates

Is there an expression that I can use in MS Access ,to highlight Duplicate entries in Reports?
I tried something like Expression is : Count(*)>1 but it doesn't work.
Br,
I suspect that the original query will need to be bulked up with a sub-query that has an ID column and count of ID. The outermost query will then need to also return the ID count.
Within the report you'd then need add another field that would show the linked ID count if it was > 1.
Access reporting (and forms) allows conditional formatting to be used in a similar way to excel.
See Ribbon: Report Design Tools>Formt>ControlFormatting...
It will let you change the format of a control depending on the value it, or another control, contains.
It's a very nice feature and will also let you add bar charts to you list forms to graphically represent the values sorted in a control.
However, the data set will need to have a column that indicates whether the current row has duplicate records. The snippet from you current query that you provided (that I repeat below) will not do this:
...OR (((Object.Key) In (SELECT [Key] FROM [Object] As Tmp GROUP BY [Key] HAVING Count(*)>1 )));
Without seeing the whole query I can't really help much, but you will need to remove the use of IN and make the SELECT statement a subquery of the main SQL Statement. The main query resultset will need to be LEFT JOINED to the sub query using the Key field. Because of the LEFT JOIN you can use "isnull(Key)" in the SELECT clause and isnull(Key) will be true for non-duplicate rows.
You can then refer to thiscolumn in your conditional formatting
I hope this makes some sense.
You
For a quick and dirty way to highlight duplicate data:
Select the object you want to highlight if it's duplicated, and make
the background white (or whatever the colour of your background is).
Create a copy of the object that you want highlighted if it's
a duplicate.
Format the copy so it has a highlight, and/or add extra text
(eg: DUPLICATE)
Put the copy behind the original (so it can't be seen).
On the original object, select "Hide duplicates" in properties.
Ensure "Hide duplicates" is NOT selected on the copy.
So when the duplicate appears, Access will hide it, but then the object you've created that was originally hidden beneath now becomes visible - effectively highlighting the field.
(Unfortunately it will only highlight the field itself, not the entire section.)

Criteria to return all records if selection from form is both

I'm trying to pass multiple query criteria from form controls. I'm using
the following type of syntax for the criteria.
IIf([Forms]![ReportsForm]![cmbLvl]="ALL", "*", [Forms]![ReportsForm]![cmbLvl])
It works for the else clause. But it does not work for the ALL Scenario. Is there an easy way to make this work.
What I am trying to do is to return all records and not just one type. For example. On a table I want to be able to search for both Male and Female. Not just Male or vice versa. Not just female only too. But both.
I also tried Like Nz([Forms]![ReportsForm]![cmbLvl],"*") . That did not work also.
Use a parameter to return all records if Null shows how you can use a Null field value to lift that field's filter.
To adapt this, you could use:
[Forms]![ReportsForm]![cmbLvl]="All" OR [Forms]![ReportsForm]![cmbLvl]
If you need to show "ALL" as a combobox choice rather than just leaving it blank, consult Adding "All" to a listbox or combobox's part about creating a union query including a null value listed as "All".

dynamically adding columns into SQL Reporting services

The stored procedure mapped to a report query builder returns values dynamically mean to say once 8 columns and sometimes 6 columns. My question is how to name the header for the extra added columns?
For each dynamic column, right-click the column header and choose properties. In the properties pane, under the Visibility section, click the down arrow beside Hidden and choose <Expression...>. Paste in the following and change the the field name to match your database.
=IIf(Fields!name.Value Is Nothing, True, False)
When you run the report, if the values in the dynamic columns are NULL, the column will be hidden. If it contains non-null values, the columns will be displayed.
One Important thing to remember: When we are binding a dynamic dataset, SSRS dont have capability to detect the Fields present in the dataset. For this we need to specify the all possible fields in the Dataset, To do this follow the steps:
Goto Data tab in the report and open the dataset which returns
dynamic columns
Click on the … button besides the dataset to edit the dataset
A pop-up window for dataset will appear, in that window go to Fields
tab
There we have to write all possible fields in the Dataset
Click OK and Preview your report
Have you tried doing a COALESCE in your sp, where you always get back those 2 "dynamic" columns? Something like COALESCE(sp.YourColumn, NULL). Then you would be able to create an expression in the report and have it hide that column when NULL or a blank is returned. Maybe something like for the Visbility = IIF(Fields!DynamicField1.Value is Nothing, False, True).
Tweak your stored procedure so that you always return 8 columns. Simply return NULL in the two dynamic columns if you don't want them in the report.
For each dynamic column, right-click the column header and choose properties. In the properties pane, under the Visibility section, click the down arrow beside Hidden and choose <Expression...>. Paste in the following and change the the field name to match your database.
=IIf(Fields!name.Value Is Nothing, True, False)
When you run the report, if the values in the dynamic columns are NULL, the column will be hidden. If it contains non-null values, the columns will be displayed.
Good luck, and welcome to the site!

Reporting Services - hide table column based upon report parameter

I have a report in Reporting Services 2005, and I want to hide or show a single table column based upon a report parameter. Does anyone have any idea how to do that?
Thanks!
Use the visibility property of the column. This worked for me.
=iif(Parameters!ParameterName.Value = "TextValueOfTheParameter",False,True)
Set the Visibility for the column to an expression which will return true or false. This property can be found on in the Visibility tab on a TextBox for example.
Click the radio option for Expression and then your expression might look like
=Parameters!ShowColumn.Value
Tip: If the expression returns "False" then the column or row will be visible. If the expression returns "True", the expression will be hidden. This tricked me at first.
Let’s say my report(SSRS 2005) have 5 columns. And I want to show/ hide columns based on a parameter(multi select with all 5 column names) selected by user. do as following
1)Create a parameter of type string (ColumnVisibility is name of my parameter) with desired column names in labels for the 5 columns and INT number(01,02,03,04,05) respectively in the values in “Available Values” section of the parameter wizard.
2) Then Go to column Properties on design . Go to “visibility” and paste following
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"01")>0,false,true)
3) repeat same for all the columns, by increasing the int value by 1..see following for example
2nd column
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"**02**")>0,false,true)
3rd column
=iif(instr(Join(Parameters!ColumnVisibility.Value,","),"**03**")>0,false,true)
And so on. For SSRS 2008, when you right click on the column you can see "Column Visibility" option. paste the code in "show or hide based on an expression" section for each column.
For some of my reports I've set the Visibility (Specifically the Hidden property) for the column to:
=IsNothing(Fields!Site.Value)
Note that this only works if the relevant field can be null in the underlying dataset, otherwise you will see the blank column.
If you want to hide whole column, when there are no data at all for that specific column in the report, you can use following code in the column visibility/expression:
=IIF(IsNothing (Sum(Fields!columnA.Value, "ReportA")),False,True)
when I do as above, I can make the column disappear but it leaves a gap in my table. Is this the expected result. I was hoping the columns would also shift over. I'm trying to hind a column for one group and then display it for the next group.
To make a null column disappear,
Right-Click column to select Column Visibility, then Set expression for Hidden:
IIF(IsNothing(Fields!FieldName.Value),True,False)