Использование ссылок на коллекцию полей набора данных (построитель отчетов версии 3.0 и службы SSRS)

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

Простая ссылка на поле в выражении отображается в области конструктора в виде простого выражения. Например, если перетащить поле Sales из области данных отчета в ячейку таблицы в области конструктора, то отображается значение [Sales]. Оно представляет базовое выражение =Fields!Sales.Value, установленное для свойства текстового поля Value. При запуске отчета обработчик отчетов вычисляет это выражение и отображает фактические данные из источника данных в текстовом поле ячейки таблицы. Дополнительные сведения см. в разделах Выражения (построитель отчетов версии 3.0 и службы SSRS) и Работа с полями набора данных отчета (построитель отчетов версии 3.0 и службы SSRS).

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

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

Отображение коллекции полей для набора данных

Чтобы отобразить отдельные значения коллекции полей, перетащите каждое поле в строку детализации таблицы и запустите отчет. Ссылки в строке детализации области данных таблицы или списка отображают значение для каждой строки набора данных.

Чтобы отобразить сводные значения поля, перетащите каждое числовое поле в область данных матрицы. Агрегатной функцией по умолчанию для совокупности строк является Sum, например, =Sum(Fields!Sales.Value). Функцию по умолчанию можно изменить, чтобы вычислять разные сводки. Дополнительные сведения см. в разделе Справочник по агрегатным функциям (построитель отчетов версии 3.0 и службы SSRS).

Чтобы отобразить сводные значения для коллекции полей в текстовом поле непосредственно в области конструктора (а не в области данных), необходимо указать имя набора данных в качестве области действия агрегатной функции. Например, для набора данных с именем SalesData следующее выражение задает сумму всех значений в поле Sales: =Sum(Fields!Sales,"SalesData").

Если диалоговое окно Выражение используется для определения простой ссылки на поле, можно выбрать коллекцию Fields в панели категорий и увидеть список доступных полей в панели Поле. Каждое поле имеет несколько свойств, в том числе Value и IsMissing. Остальные свойства представляют собой стандартные расширенные свойства поля, которые могут быть доступны для набора данных в зависимости от типа источника данных.

Обнаружение значений NULL в поле набора данных

Чтобы обнаружить значение NULL поля (Nothing в Visual Basic), используется функция IsNothing. При помещении в текстовое поле сведений о таблице следующее выражение проверяет поле MiddleName и заменяет значение NULL текстом «No Middle Name», либо возвращает значение поля, если оно отлично от значения NULL:

=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)

Обнаружение отсутствующих полей для динамических запросов во время выполнения

По умолчанию элементы в коллекции Fields имеют два свойства: Value и IsMissing. Свойство IsMissing указывает, содержится ли поле, определенное во время разработки, в полях, полученных во время выполнения. Например, запрос может вызывать хранимую процедуру, результирующий набор данных которой зависит от входного параметра, либо запрос может иметь вид SELECT * FROM <table>, в котором изменилось определение таблицы.

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

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

Свойство IsMissing можно проверить в пользовательском коде, чтобы определить, присутствует ли поле в результирующем наборе. Его нельзя проверить в выражении, вызывающем функцию Visual Basic, например, IIF или SWITCH, поскольку Visual Basic вычисляет все параметры при вызове функции, что приводит к ошибке, если вычисляется ссылка на отсутствующее поле.

Пример управления видимостью динамического столбца для отсутствующего поля

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

Public Function IsFieldMissing(field as Field) as Boolean
 If (field.IsMissing) Then
 Return True
  Else 
  Return False
 End If
End Function

Чтобы использовать эту функцию для управления видимостью столбца, присвойте свойству столбца Hidden следующее выражение:

=Code.IsFieldMissing(Fields!FieldName)

Столбец будет скрыт, если поле не существует.

Пример управления значением текстового поля для отсутствующего поля

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

Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String
 If (field.IsMissing) Then
  Return strMessage
 Else 
  Return field.Value
  End If
End Function

Чтобы использовать эту функцию в текстовом поле, добавьте следующее выражение к свойству Value:

=Code.IsFieldMissingThenString(Fields!FieldName,"Missing")

Текстовое поле отображает значение поля или указанный текст.

Использование расширенных свойств поля

Расширенные свойства поля представляют собой дополнительные свойства, которые определяются в поле модулем обработки данных, зависящим от типа источника данных для набора данных. Расширенные свойства поля могут быть стандартными или зависящими от конкретного источника данных. Дополнительные сведения см. в разделе Расширенные свойства поля для базы данных служб Analysis Services (SSRS).

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