We have a report at work that displays staff payroll information. The report is viewed by managers and executives. Each person viewing the report only has access to certain departments (one or more) that we control through a table we built. The viewer is presented with a list of departments to choose from, and their choice of department is validated in our table using the Global report value UserID. They will see the information if authorized, or otherwise a message displays stating as such. As this report was written by someone else no longer working at the company, my question was why are we even offering a list of all departments if the viewer can only select specific ones? The solution was to list only those departments for which the viewer could access in the report parameter. To do this, I created an internal report parameter that got the network id of the current viewer using the Global UserId value, then used that parameter to query the authorization table for those departments that the viewer was assigned. Sounded fine, except when running the report I received an error stating that "Forward dependencies are not valid." A quick Google later (can I use that as a unit of time?) and I found a forum entry on one of my favorite SQL sites, SQL Server Central (registration required). The entry mentioned that the ordering of report parameters in the paramter dialog matters. It makes total sense, but not something you would commonly think about. I moved the user id parameter above the parameter that uses it to get the list of departments, and the report displayed as expected.
Hope this info helps. Happy Reporting!