Условный список DropDown с SSRS - PullRequest
1 голос
/ 07 ноября 2011

Я создал отчет SSRS с раскрывающимся списком для параметризации сообщаемых данных. Это отлично работает. Теперь мне нужно добавить еще один параметр, чтобы немного отфильтровать отчет. Например, у меня есть раскрывающийся список местоположений, который показывает область, страну, регион и т. Д. Мне нужно добавить еще один раскрывающийся список, который зависит от первого раскрывающегося списка. Поэтому, если я выберу «страну» в первом раскрывающемся списке, я покажу список стран во втором раскрывающемся списке или, если я выберу «Регион», я покажу список регионов во втором раскрывающемся списке. Данные о стране, области, регионе хранятся в разных таблицах. Таким образом, мой запрос должен быть достаточно умным, чтобы запустить соответствующий sql на основе первого выпадающего списка.

Большое спасибо за любую помощь.

Ответы [ 3 ]

4 голосов
/ 08 ноября 2011

Одной из мощных функций служб Reporting Services является то, что все является выражением, включая оператор SQL набора данных.

Допустим, ваш первый параметр (тот, который описывает, что выбрать) называется Location, и он выбирает список местоположений, таких как страна, регион и т. Д. Возможно, вы получите его из таблицы, в которой есть LocationId а Description вот так:

SELECT LocationId, Description FROM Locations

Вы подключаете параметр Location к этому запросу, чтобы получить раскрывающийся список селекторов местоположения для параметра Location.

Теперь создайте второй параметр с именем Select, в котором мы хотим выбрать из списка стран или регионов. Проще говоря, я предполагаю, что есть только два местоположения: Страна с идентификатором местоположения 1 и Регион с идентификатором местоположения 2.

Создайте новый набор данных с именем Selections и вручную добавьте в него поля с именами Id и Description. Подключите ваш параметр Select к этому набору данных. Теперь для оператора SQL для набора данных Selections введите следующее выражение:

=IIF(Parameters!Location.Value = 1, 
    "SELECT CountryId AS Id, CountryName AS Description FROM Countries", 
    "SELECT RegionId AS Id, RegionName AS Description FROM Regions")

Таким образом, если для параметра Location установлено значение 1 (Страна), вы выбираете его из таблицы «Страны», в противном случае вы выбираете из таблицы «Регионы». Вы присваиваете псевдонимы полям, чтобы получить согласованно именованные поля для набора данных для использования в запросе параметра Select. Очевидно, вы можете расширить это до большего количества выборов по мере необходимости.

Вы понимаете, что это немного хрупко - всякий раз, когда вы хотите добавить новый тип местоположения, вы должны просмотреть все ваши отчеты и обновить оператор SQL для набора данных Selections. Это утомительно, и никто не хочет эту работу. Нам нужна автоматизированная система, в которой все отчеты получают новые выборки при их добавлении.

Итак, давайте добавим столбец в таблицу Locations, который называется SQLStatement. Для строки Страна это будет иметь значение:

SELECT CountryId AS Id, CountryName AS Description FROM Countries

Для строки Region поле SQLStatement имеет значение:

SELECT RegionId AS Id, RegionName AS Description FROM Regions

Теперь в таблице Locations есть значение SQLStatement для набора данных Selections. Вы не можете использовать это напрямую (ваш набор данных будет просто возвращать значение поля оператора SQL, а не выполнять его), но вы хотите иметь что-то, что возвращает эту строку в качестве выражения для использования в операторе SQL для набора данных Selections , Пользовательский код может быть использован для этого. Поэтому выражение для набора данных Selections будет выглядеть примерно так:

=Code.GetSQLStatement(Parameters!Location.Value)

И тогда у вас есть такая функция кода (значимые части пропущены):

Public Function GetSQLStatement(LocationId As Integer) As String
    Dim SQL As String
    SQL = "SELECT SQLStatement FROM Locations WHERE LocationId = " + CStr(LocationId)
    ' Connect to database, get SQLStatement field 
    GetSQLStatement = <Field Value>
End Function

Когда вы хотите добавить другой выбор местоположения, например, континенты, все, что вам нужно сделать, это добавить еще одну строку в таблицу Locations, скажем LocationId = 3, Description = Continent и SQLStatement = SELECT ContinentId AS Id, ContinentName AS Description FROM Continents, и теперь каждый ваш отчет который выбирает по местоположению, сможет использовать Континенты.

0 голосов
/ 09 ноября 2011

Это очень просто.Предположим, что данные таблицы «ONE» выглядят следующим образом:

**Location_Type**   **Location**
Country            India
Country            Sri Lanka
Country            China
Country            Japan
City               Bangalore
City               Hyderabad
City               Delhi

Пример: - запрос параметра отчета (@ Location_Type1):

Select Distinct Location_Type from One

запрос второго отчетаПараметр:

Select Location from ONE where Location_Type = @Location_Type1.

Пожалуйста, дайте мне знать, если это не ясно.

0 голосов
/ 07 ноября 2011

Первый набор данных добавить этот SQL

Select ContryName, CountryID From Country

Предполагая, что имя вышеуказанного параметра набора данных - @country, добавьте следующий SQL во второй набор данных

Select RegionName, RegionID From Region

Where CountryID IN( @country)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...