While working on a client issue today, I ran into an issue when I was trying to display a report label parameter in a Microsoft Visual Studio report.
For this client, we use Microsoft SQL Server Reporting Services to deliver real-time reports. We leverage the Report Definition Language Client-Side (RDLC ) in Visual Studio to do the client-side reporting.
This client has a number of different facilities. For their reports, they like to filter by facility. In Visual Studio RDLC terms , this means that each report will have a report parameter entitled facid for FacilityID.
This facid will be defined by a DataSet entitled Facilities with the value field set to FacilityID and the label field set to FacilityName.
At the top of the report, we have a label, where we’d like to display the name of the facility selected in the report. For example, for the below report, we’d like to see the number of teams that a certain player has been captain for in 2019 at the facility of Ogden. At the top of the report, I’d like to specify the Facility selected, Ogden, and the Year, 2019.
When I use the Microsoft RDLC syntax to specify the @facid and @year, I get the numeric values, which is fine for the year, but whose going to remember that FacilityID 8 is Ogden.
I’d really like the label to display Ogden. Well, it turns out this more complicated than you’d expect. To display the parameter label field for the @facid parameter, we have to use the Lookup function.
First, we need to turn the @facid into a custom expression. By double clicking on the @facid in the label, you should be able to pull up the Placeholder Properties dialog.
By clicking on the fx button, you’ll be taken to the Expression dialog. In the Category view, click on the Common Functions, and select Miscellaneous. On the Item view, click on Lookup.
We need to use the Lookup function to retrieve the FacilityName from the Facilities DataSet using the selected parameter facid’s value. How’s that for complicated!
The syntax for the Lookup function is
=Lookup(Fields!SaleProdId.Value, Fields!ProductID.Value, Fields!Name.Value, "Product")
In plain old english, this syntax states that we’re going to use the SalesProdId as the value to look up the Product Name by matching the ProductID value in the Product DataSet.
Unfortunately, our expression is a little trickier because the report parameter type @facid does not match with the DataSet field datatype for Facilities. We actually have to convert the @facid into a CInt.
Our expression ends up being
=Lookup(CInt(Parameters!facid.Value), Fields!FacilityID.Value, Fields!FacilityName.Value, "Facilities")
When we run the report with this custom expression, we get Ogden in the label. Hey now!
Now, the only issue remaining is I have to remember to insert this customer expression into every report where I need to specify the Facility Name. I’ll just refer to this blog post!