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

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

ПримечаниеПримечание

В построителе отчетов и в конструкторе отчетов среды Business Intelligence Development Studio можно создавать и изменять определения отчета (RDL). В каждой среде разработки существуют различные способы создания, открытия и сохранения отчетов и связанных элементов. Дополнительные сведения см. в разделе Разработка отчетов в построителе отчетов и конструкторе отчетов 3.0 (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.

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

Возвращает

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

Замечания

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

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

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

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

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

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

Используйте Функция Lookup (построитель отчетов версии 3.0 и службы SSRS) для извлечения единственного значения для указанного имени в наборе данных, состоящем из пар имя-значение с отношением один к одному. Чтобы вызвать функцию Lookup для набора значений, используйте Функция Multilookup (построитель отчетов версии 3.0 и службы SSRS).

Существуют следующие ограничения.

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

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

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

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

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

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

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

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

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

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

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

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

Пример

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

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

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

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

Функция Visual BasicJoin позволяет создать из набора объектов строку с разделителями. Чтобы объединить объекты в одну строку, используйте в качестве разделителя запятую. В некоторых модулях подготовки можно использовать в качестве разделителя перевод строки Visual Basic (vbCrLF).

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

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

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

Скопируйте следующие функции Visual Basic в блок Code определения отчета. Функция 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 в отчет (построитель отчетов версии 3.0 и службы SSRS).

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