Поделиться через


Функция LookupSet (построитель отчетов и службы SSRS)

Возвращает набор совпадающих значений для заданного имени из набора данных, содержащего пары «имя-значение».

Примечание

Создавать и изменять определения отчетов (RDL-файлы) в SQL Server Data Tools можно в построителе отчетов и конструкторе отчетов В каждой среде разработки существуют различные способы создания, открытия и сохранения отчетов и связанных элементов. Дополнительные сведения см. в статье Проектирование отчетов в конструктор отчетов и Report Builder (SSRS) в Интернете по адресу microsoft.com.

Синтаксис

  
LookupSet(source_expression, destination_expression, result_expression, dataset)  

Параметры

source_expression
(Variant) Выражение, вычисляемое в текущей области и указывающее имя или ключ для поиска. Например, =Fields!ID.Value.

destination_expression
(Variant) Выражение, вычисляемое для каждой строки в наборе данных и указывающее имя или ключ для сопоставления. Например, =Fields!CustomerID.Value.

result_expression
(Variant) Выражение, вычисляемое для строки в наборе данных, где source_expression = destination_expression, и указывает извлекаемое значение. Например, =Fields!PhoneNumber.Value.

набор данных
Константа, задающая имя набора данных в отчете. Например, «ContactInformation».

Возвращает

Возвращает значение VariantArray или Nothing, если совпадения нет.

Комментарии

Функция LookupSet служит для извлечения набора значений из указанного набора данных, состоящего из пар «имя-значение» со связью «один ко многим». Например, функция LookupSet позволяет извлечь по идентификатору пользователя в таблице все связанные с ним телефонные номера из набора данных, не привязанного к этой области данных.

Метод LookupSet выполняет следующие действия.

  • Вычисляет исходное выражение в текущей области.

  • Вычисляет целевое выражение для каждой строки указанного набора данных после применения фильтров с учетом заданных для него параметров сортировки.

  • При каждом совпадении исходного и целевого выражений вычисляет результирующее выражение для этой строки в наборе данных.

  • Возвращает набор результирующих значений выражения.

Для извлечения единственного значения для указанного имени из набора данных, состоящего из пар "имя/значение" со связью "один к одному", используйте функцию Lookup (построитель отчетов и службы SSRS). Чтобы вызвать Lookup набор значений, используйте функцию Multilookup (Report Builder и SSRS).

Применяются следующие ограничения:

  • Функция LookupSet вычисляется после применения всех выражений фильтров.

  • Поддерживается только один уровень уточняющего запроса. Исходное, целевое и результирующее выражения не могут включать в себя ссылки на функцию уточняющего запроса.

  • Исходное и результирующее выражения должны возвращать один и тот же тип данных.

  • Исходное, целевое и результирующее выражения не могут включать в себя ссылки на переменные отчета или группы.

  • Функцию LookupSet нельзя использовать в качестве выражения для следующих элементов отчета:

    • динамические строки соединения для источника данных;

    • вычисляемые поля в наборе данных;

    • параметры запроса в наборе данных;

    • фильтры в наборе данных;

    • параметры отчета;

    • Свойство Report.Language.

Дополнительные сведения см. в статьях Функции построителя отчетов — справочник по агрегатным функциям в отчетах с разбивкой на страницы (построитель отчетов) и Область выражения для суммирования, статистических выражений и встроенных коллекций в отчете с разбивкой на страницы (построитель отчетов).

Пример

В следующем примере предположим, что таблица привязана к набору данных, включающему идентификатор территории продаж TerritoryGroupID. Отдельный набор данных с именем Stores содержит список всех складов на данной территории и включает идентификатор ID и название склада StoreName.

В следующем выражении функция LookupSet сравнивает значение TerritoryGroupID со значением ID для каждой из строк набора данных Stores. Для каждого совпадения значение поля StoreName в этой строке добавляется в результирующий набор.

=LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores")  

Пример

Поскольку функция LookupSet возвращает коллекцию объектов, результирующее выражение невозможно непосредственно отобразить в текстовом поле. Значения объектов коллекции можно склеить в одну строку.

С помощью функции Join Visual Basic создайте строку с разделителями из набора объектов . Для объединения объектов в одну строку используйте в качестве разделителя запятую. В некоторых модулях подготовки можно использовать в качестве разделителя перевод строки в формате Visual Basic (vbCrLF).

Следующее выражение, если оно используется в качестве свойства Value для текстового поля, использует для Join создания списка.

=Join(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"),",")  

Пример

Для текстовых полей, подготовка которых к просмотру выполняется лишь несколько раз, можно добавить пользовательский код формирования HTML для отображения значений в текстовом поле. HTML в текстовом поле требует дополнительной обработки, поэтому плохо подходит для текстовых полей, подготовка которых выполняется тысячи раз.

Скопируйте следующие функции Visual Basic в блок кода в определении отчета. ФункцияMakeList принимает массив объектов, возвращаемый из result_expression , и строит неупорядоченный список с помощью тегов HTML. СвойствоLength возвращает число элементов в массиве объектов.

Function MakeList(ByVal items As Object()) As String  
   If items Is Nothing Then  
      Return Nothing  
   End If  
  
   Dim builder As System.Text.StringBuilder =   
      New System.Text.StringBuilder()  
   builder.Append("<ul>")  
  
   For Each item As Object In items  
      builder.Append("<li>")  
      builder.Append(item)  
   Next  
   builder.Append("</ul>")  
  
   Return builder.ToString()  
End Function  
  
Function Length(ByVal items as Object()) as Integer  
   If items is Nothing Then  
      Return 0  
   End If  
   Return items.Length  
End Function  

Пример

Для формирования HTML необходимо вызвать функцию. Вставьте следующее выражение в свойство Value текстового поля и задайте для типа разметки текста значение HTML. Дополнительные сведения см. в разделе Добавление HTML в отчет (построитель отчетов и службы SSRS).

=Code.MakeList(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"))  

См. также:

Использование выражений в отчетах (построитель отчетов и службы SSRS)
Примеры выражений (построитель отчетов и службы SSRS)
Типы данных в выражениях (построитель отчетов и службы SSRS)
Область выражения для итогов, агрегатных функций и встроенных коллекций (построитель отчетов и службы SSRS)