Функции построителя отчетов — функция LookupSet в отчете с разбивкой на страницы (построитель отчетов)
Область применения: Построитель отчетов (SSRS) Power BI конструктор отчетов построитель отчетов в SQL Server Data Tools
В отчете с разбивкой на страницы возвращает набор совпадающих значений для заданного имени из набора данных, содержащего пары "имя-значение".
Примечание.
Создать и изменить определение для отчета на страницу (RDL-файл) можно с помощью построителя отчетов (Майкрософт), построителя отчетов Power BI и конструктора отчетов в SQL Server Data Tools.
Синтаксис
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 (построитель отчетов и службы SSRS).
Применяются следующие ограничения:
ФункцияLookupSet вычисляется после применения всех выражений фильтров.
Поддерживается только один уровень уточняющего запроса. Исходное, целевое и результирующее выражения не могут включать в себя ссылки на функцию уточняющего запроса.
Исходное и результирующее выражения должны возвращать один и тот же тип данных.
Исходное, целевое и результирующее выражения не могут включать в себя ссылки на переменные отчета или группы.
ФункциюLookupSet нельзя использовать в качестве выражения для следующих элементов отчета:
динамические строки соединения для источника данных;
вычисляемые поля в наборе данных;
параметры запроса в наборе данных;
фильтры в наборе данных;
параметры отчета;
Свойство Report.Language.
Дополнительные сведения см. в разделах Справочник по агрегатным функциям (построитель отчетов и SSRS) и Область выражения для суммирования, агрегатных функций и встроенных коллекций (построитель отчетов и SSRS).
Примеры
В следующих примерах предположим, что таблица привязана к набору данных, включающему идентификатор территории продаж TerritoryGroupID. Отдельный набор данных с именем Stores содержит список всех складов на данной территории и включает идентификатор ID и название склада StoreName.
А. Используйте LookupSet
В следующем выражении функция LookupSet сравнивает значение TerritoryGroupID со значением ID для каждой из строк набора данных Stores. Для каждого совпадения значение поля StoreName в этой строке добавляется в результирующий набор.
=LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores")
B. Используйте Join для создания списка результатов
Поскольку функция LookupSet возвращает коллекцию объектов, результирующее выражение невозможно непосредственно отобразить в текстовом поле. Значения объектов коллекции можно склеить в одну строку.
Функция Join в Visual Basic позволяет создать из набора объектов строку с разделителями. Для объединения объектов в одну строку используйте в качестве разделителя запятую. В некоторых модулях подготовки можно использовать в качестве разделителя перевод строки в формате Visual Basic (vbCrLF
).
Следующее выражение при использовании в качестве свойства Value текстового поля использует для создания списка функцию Join .
=Join(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"),",")
В. Добавьте код для создания HTML
Для текстовых полей, подготовка которых к просмотру выполняется лишь несколько раз, можно добавить пользовательский код формирования 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
D. Вызов функции
Для формирования HTML необходимо вызвать функцию. Вставьте следующее выражение в свойство Value текстового поля и задайте для типа разметки текста значение HTML. Дополнительные сведения см. в разделе Добавление HTML в отчет (построитель отчетов и службы SSRS).
=Code.MakeList(LookupSet(Fields!TerritoryGroupID.Value, Fields!ID.Value, Fields!StoreName.Value, "Stores"))