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


Применение глобальных коллекций в выражениях (службы Reporting Services)

Изменения: 14 апреля 2006 г.

Службы Reporting Services предоставляют следующие глобальные коллекции, на которые можно ссылаться из выражений: DataSources, DataSets, Fields, Globals, Parameters, ReportItems и User. Чтобы обратиться к коллекции из выражения, можно использовать стандартный синтаксис языка Visual Basic для элемента в коллекции. Ниже приведены примеры этого синтаксиса:

  • Collection!ObjectName.Property или Collection!ObjectName("Property")
    =Fields!Sales.Value
    =Fields!Sales("Value")
  • Collection("ObjectName").Property
    =Fields("Sales").Value
  • Collection("Member")
    =User("Language")
  • Collection.Member
    =User.Language

Сводка по глобальным коллекциям

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

Глобальная коллекция Пример Описание

Fields

=Fields!Sales.Value

Представляет коллекцию полей набора данных, доступных для отчета. Доступна после получения данных из источника данных в набор данных.

ReportItems

=ReportItems("Textbox1").Value

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

Globals

=Globals.ReportName

Представляет глобальные переменные, полезные для отчетов, например для имени отчета или номера страницы. Доступна всегда.

Parameters

=Parameters("ReportMonth").Value

или

=Parameters!ReportYear.Value

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

User

=User.UserID

или

User.Language

Представляет коллекцию сведений о пользователе, выполняющем отчет, например языковые настройки или идентификатор пользователя. Доступна всегда. Параметр User!UserID часто используется для фильтрования результатов в отчетах.

DataSources

=DataSources("AdventureWorks").Type

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

DataSets

=DataSets("TopEmployees").CommandText

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

Элементы коллекций Globals и Users возвращают тип variant. Если нужно использовать глобальную переменную в выражении, требующем определенный тип данных, необходимо сначала привести переменную. Например, чтобы преобразовать тип данных времени выполнения variant в формат Date, используйте синтаксис CDate(Globals!ExecutionTime). Дополнительные примеры см. в разделе Примеры выражений в службах Reporting Services.

Fields

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

Некоторые модули обработки данных автоматически определяют коллекцию полей из запроса, указанного для набора данных. При нажатии кнопки Обновить поля на панели инструментов изменения сохраняются в определении отчета, окно «Наборы данных» обновляется и отображает эти изменения. Чтобы изменить определения полей, в конструкторе отчетов в представлении «Данные» выберите набор данных, чтобы открыть диалоговое окно Набор данных, и перейдите на вкладку Поля. Чтобы добавить вычисляемое поле, щелкните правой кнопкой мыши набор данных в окне «Наборы данных», чтобы открыть диалоговое окно Добавление нового поля, и введите имя. Затем щелкните Вычисляемое поле и введите выражение.

Во время обработки отчета, по мере обработки по очереди каждого элемента отчета, коллекция Fields, связанная с текущим элементом отчета, привязывается к базовым исходным данным. Данные, возвращаемые при обработке отчета, для конкретного поля могут иметь одно значение или значение для каждой строки в наборе данных. Тип полученных данных — с одним значением или с несколькими — определяется типом элемента отчета, который содержит ссылку на поле. Для ссылок из области данных (таблица, матрица, список или диаграмма) возвращается значение для каждой строки в наборе данных. Для ссылок, которые не являются частью области данных, возвращается одиночное значение.

Для обработки коллекции поля в наборе данных с помощью статистической функции отчета включите параметр scope, который определяет набор данных. Чтобы проверить взаимосвязи элементов отчета с набором данных, выберите элемент отчета и просмотрите его свойства. Дополнительные сведения о функциях отчетов и параметре «scope» см. в разделе Использование функций отчетов в выражениях (службы Reporting Services).

По умолчанию элементы в коллекции Fields имеют два свойства: Value и IsMissing. При перетаскивании поля из окна Наборы данных на элемент в макете отчета содержимому элемента отчета по умолчанию присваивается свойство поля Value. Для области данных значению каждой строки в наборе данных присваивается значение =Fields!FieldName.Value. Содержимому элемента отчета, который не является частью области данных, присваивается одиночное значение, например =First(Fields!FieldName.Value).

Свойство IsMissing указывает, содержится ли поле, определенное для набора данных, в полях, полученных из источника данных. Поле может быть проверено в выражении поля с помощью языка Visual Basic. Свойство Value для отсутствующих полей имеет значение NULL (в Visual Basic это Nothing). В элемент отчета помещается текстовое поле, в котором нужно отобразить данные поля, и в следующем примере показано, как выполнить проверку отсутствия поля:

=IIF(Fields!FieldName.IsMissing, "Field was not returned by query", Fields!FieldName.Value))

Поскольку функция IIF языка Visual Basic вычисляет все элементы инструкции перед возвратом результата, обращение к отсутствующему полю может вызвать ошибки обработки. В следующем примере показано, как можно выполнить вызов функции языка Visual Basic, обращающейся к полю, которое может отсутствовать:

=IIF(Sum(Fields!FieldName.Value) IS NOTHING, 0, Sum(Fields!FieldName.Value))

При использовании редактора выражений для создания выражения, ссылающегося на поле, в первой области можно выбрать коллекцию Fields и просмотреть список доступных полей в последней области. На следующем рисунке показано поле FirstName для набора данных с именем Employees.

Диалоговое окно «Изменить выражение» с поддержкой Intellisense

Обратите внимание на список свойств, доступных в окне «IntelliSense». В данном списке содержатся свойства по умолчанию Value и IsMissing. Остальные свойства предопределены расширенными свойствами поля, которые поддерживаются другими модулями обработки данных.

Расширенные свойства поля

Расширенные свойства поля являются дополнительными свойствами, которые определены в поле модулем обработки данных. Подмножество расширенных свойств поля предопределено. Предопределенные свойства обычно используют свойства поля. Поле Key и UniqueName являются типичными примерами. Данные предопределенные свойства появляются в списке «IntelliSense», на них можно ссылаться с помощью синтаксиса коллекции Fields!FieldName.Property. Для получения преимуществ от предопределенных свойств модуль обработки данных может перейти на оптимизацию запросов, включающих следующий синтаксис.

Также можно ссылаться на другие расширенные свойства поля, которые поддерживаются конкретным модулем обработки данных. Эти свойства не появятся в окне «Выражения», но могут быть определены путем анализа источника данных с помощью зарегистрированного модуля обработки данных и связанного с ним конструктора запросов. На любое расширенное свойство поля можно сослаться с помощью синтаксиса коллекции Fields!FieldName("Property").

Если расширенные свойства поля не поддерживаются поставщиком данных или поле не найдено при выполнении запроса, значением свойства будет null (в Visual Basic Nothing) для свойств типов String и Object, а свойствам типа Integer присваивается значение 0.

Если модуль обработки данных предоставляет собственные свойства поля, эти свойства будут отображены в раскрывающемся списке «Редактора выражений» для всех полей набора данных, независимо от того, поддерживает поле данное свойство или нет. Если добавлена ссылка на свойство, которое не поддерживается для этого поля, ссылка возвратит результат null (в Visual Basic Nothing). Примеры поставщиков, поддерживающих расширенные свойства поля, см. в разделах Определение наборов данных отчетов для многомерных данных и данных прогноза интеллектуального анализа служб Analysis Services и Определение наборов данных отчета для многомерных данных системы SAP NetWeaver BI.

Globals

Коллекция Globals содержит глобальные переменные отчета. Следующая таблица описывает элементы коллекции Globals.

Элемент Тип Описание

ExecutionTime

DateTime

Дата и время, когда началось выполнение отчета.

PageNumber

Integer

Номер текущей страницы. Может использоваться только в верхних и нижних колонтитулах страницы.

ReportFolder

String

Полный путь к папке, содержащей отчет. Не включает в себя URL-адрес сервера отчетов.

ReportName

String

Имя отчета в том виде, в каком оно хранится в базе данных сервера отчетов.

ReportServerUrl

String

URL-адрес сервера отчетов, на котором выполняется отчет.

TotalPages

Integer

Общее количество страниц в отчете. Может использоваться только в верхних и нижних колонтитулах страницы.

Далее приведены примеры глобальных переменных.

  • Это выражение, помещенное в текстовое поле нижнего колонтитула отчета, содержит номер страницы и общее количество страниц в отчете:
    =Globals.PageNumber & " of " & Globals.TotalPages
  • Это выражение сообщает имя отчета и время его выполнения. Время представляется в формате короткой даты платформы Microsoft .NET Framework:
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

Parameters

Коллекция Parameters содержит объекты параметров отчета. Параметры могут передаваться запросам, использоваться в фильтрах или в других функциях, изменяющих внешний вид и содержимое отчета в соответствии со значением параметра. При определении параметров запроса они автоматически добавляются к коллекции параметров отчета. В следующей таблице описываются свойства, которые определяет Parameter: Count, IsMultiValue, Value и Label.

Свойство Описание

Count

Целое число, отображающее количество параметров в коллекции.

IsMultiValue

Логическое значение, которое указывает, что параметр имеет набор значений.

Value

Значение параметра. Для параметров с несколькими значениями свойство Value возвращает массив объектов.

Label

Понятная пользователю метка параметра. Если метка не указана, значение свойства Label совпадает со свойством Value. Если с одним свойством Value связано более одного свойства Label , используется первое совпадающее свойство Label. Для параметров с несколькими значениями свойство Label возвращает массив объектов.

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

="IsMultiValue: " & Parameters!ProductSubCategory.IsMultiValue.ToString() 
& " Count:" & Parameters!ProductSubCategory.Count & " Values: " 
& Join(Parameters!ProductSubCategory.Value,", ") & " Labels: " 
& Join(Parameters!ProductSubCategory.Label,", ")

Дополнительные сведения см. в разделе Работа с параметрами в службах Reporting Services.

ReportItems

Коллекция ReportItems содержит текстовые поля в отчете. Элементы коллекции ReportItems имеют только одно свойство: Value. Значение элемента ReportItems может использоваться для отображения или вычисления данных из другого поля в отчете. Чтобы получить доступ к значению текущего текстового поля, можно использовать глобальную переменную Me.Value или просто Value, встроенную в язык Visual Basic. Однако в функциях отчета, таких как First и все статистические функции, используйте полный синтаксис.

Например:

  • это выражение, помещенное в текстовое поле, отображает значение текстового поля ReportItem с именем Textbox1:
    =ReportItems("Textbox1").Value
  • это выражение, помещенное в текстовое поле ReportItem свойства Color, отображает текст черным цветом, если значение > 0, в ином случае — красным:
    =iif(Me.Value > 0,"Black","Red")
  • это выражение, помещенное в текстовое поле верхнего или нижнего колонтитула, отображает первое значение на каждой странице текстового поля LastName подготовленного к просмотру отчета:
    =First(ReportItems("LastName").Value)

User

Коллекция User содержит данные о пользователе, выполняющем отчет. Эту коллекцию можно использовать для фильтрации данных, появляющихся в отчете, например отобразить только данные текущего пользователя или отобразить идентификатор пользователя, к примеру, в заголовке отчета. Следующее выражение, помещенное в текстовое поле, объединяет статический текст с изменяемыми данными пользователя:

=Globals!ReportName & " for " & User!UserID

Следующая таблица описывает элементы коллекции User.

Элемент Тип Описание

Language

String

Язык пользователя, выполняющего отчет. Например, en-US.

UserID

String

Идентификатор пользователя, выполняющего отчет. Если используется проверка подлинности Windows, это значение является учетной записью домена текущего пользователя. Значение определяется модулем безопасности служб Reporting Services, который может использовать проверку подлинности Windows или нестандартную проверку подлинности.

В некоторых случаях отчеты, содержащие переменную User!UserID, не смогут отобразить данные отчета, относящиеся к текущему пользователю, просматривающему отчет. Чтобы произошла данная ошибка, должны быть выполнены следующие условия:

  • отчет является снимком состояния выполнения отчета или моментальным снимком журнала отчета;
  • доступ к отчету должен быть получен программными способами через методы SOAP или URL-адрес отчета.

Когда происходит этот сбой, сведения о профиле пользователя в моментальном снимке отчета будут основаны на одном из следующих источников:

  • удостоверение пользователя, создавшего моментальный список отчета;
  • учетная запись, используемая сервером отчетов, если моментальный снимок создается сервером отчетов по расписанию.
ms157274.note(ru-ru,SQL.90).gifВажно!
Сбой при обновлении моментального снимка отчета по причине сведений профиля пользователя вызовет появление неправильных данных и создаст риск ослабления безопасности, если в моментальный снимок включены важные или конфиденциальные данные.

Сбой профиля пользователя произойдет только для моментальных снимков отчетов, которые открыты через вызовы SOAP или URL-адреса моментального снимка отчета. Переменная User!UserID имеет полные функциональные возможности для отчетов, выполняемых по требованию и для всех моментальных снимков отчетов, которые открываются из диспетчера отчетов. Дополнительные сведения о вызове моментальных снимков отчетов методами веб-служб и доступе через URL-адрес см. в разделах Using a URL to Access Report Server Items и Identifying Execution State.

Коллекция DataSources

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

Следующая таблица описывает переменные коллекции DataSources.

Переменная Тип Описание

DataSourceReference

String

Полный путь источника данных на сервере отчетов. Например, /DataSources/AdventureWorks.

Type

String

Тип поставщика данных для источника данных. Например, SQL.

Коллекция DataSets

Коллекция DataSets представляет наборы данных, на которые ссылается определение отчета. Эта глобальная коллекция редко используется непосредственно в отчетах, но она доступна разработчикам отчетов для получения доступа к команде запроса, используемой для получения данных из источника данных для каждого набора данных.

Следующая таблица описывает элементы коллекции DataSets.

Элемент Тип Описание

CommandText

String

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

RewrittenCommandText

String

Развернутое значение CommandText поставщика данных. Обычно используется для отчетов, в которых параметрам запроса сопоставлены параметры отчета. Поставщик данных устанавливает данное свойство при разворачивании текстовых параметров команды в значения констант, выбранные для сопоставленных параметров отчета.

См. также

Задачи

Как добавить выражение (конструктор отчетов)

Основные понятия

Основные сведения о макете и подготовке отчета
Основы конструирования отчетов

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Измененное содержимое
  • Содержимое раздела «Расширяемые поля».

5 декабря 2005 г.

Новое содержимое
  • Добавлены коллекции Datasets и DataSources.
Измененное содержимое
  • Изменены примеры глобального синтаксиса.