Примеры выражений в отчетах с разбивкой на страницы (построитель отчетов)

Примеры выражений в отчетах с разбивкой на страницы (построитель отчетов)

Выражения часто используются в отчетах с разбиением на страницы для управления содержимым и внешним видом отчета. Выражения записываются на языке Microsoft Visual Basic, и в них можно использовать встроенные функции, пользовательский код, переменные отчета, групповые переменные и определяемые пользователем переменные. Выражения начинаются со знака равенства (=). Дополнительные сведения о редакторе выражений и типах ссылок, которые могут быть включены, см. в разделах Использование выражений в отчетах (построитель отчетов и службы SSRS) и Добавление выражения (построитель отчетов и службы SSRS).

При включении функции «песочницы» для языка определения отчетов только определенные типы и элементы смогут использовать в тексте выражения во время публикации отчета. Дополнительные сведения см. в статье Enable and Disable RDL Sandboxing.

В данном разделе приведены примеры выражений, которые можно использовать для решения типичных задач в отчете.

Функции языка Visual Basic . Примеры функций дат, строковых функций, функций преобразования и условных функций Visual Basic .

Функции отчета Примеры статистических функций и других встроенных функций отчета.

Внешний вид данных отчета Примеры изменения внешнего вида отчета.

Свойства Примеры задания свойств элемента отчета, отвечающих за формат и видимость.

Параметры Примеры использования параметров в выражении.

Пользовательский код Примеры внедренного пользовательского кода.

Примеры выражений для специальных задач см. в следующих разделах.

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

О написании выражений, в которых используются многие из функций и операторов, также используемых в примерах выражений в этом разделе, но в контексте создания отчета, см. в разделе Tutorial: Introducing Expressions.

Функции

Многие выражения в отчете содержат вызовы функций. Они позволяют форматировать данные, применять логические операции и производить доступ к метаданным отчета. В выражениях можно использовать функции из библиотеки среды выполнения Microsoft Visual Basic, а также из пространств имен Convert и Math. Можно добавить ссылки на функции из других сборок или пользовательский код. Можно также использовать классы из Microsoft .NET Framework, в том числе System.Text.RegularExpressions.

Функции языка Visual Basic

Функции языка Visual Basic позволяют управлять данными, отображаемыми в текстовых полях, или используются в параметрах, свойствах и других областях отчета. В этом разделе приведены примеры, демонстрирующие применение некоторых из этих функций. Дополнительные сведения см. в разделе Компоненты библиотеки времени выполнения Visual Basic в MSDN.

Платформа .NET Framework предоставляет множество параметров пользовательских форматов, например для конкретных форматов даты. Дополнительные сведения см. в статье Типы форматирования на веб-сайте MSDN.

Математические функции

Функция Round полезна при округлении чисел до ближайшего целого числа. В следующем выражении значение 1.3 округляется до 1:

Можно также написать выражение, округляющее значение до указанного кратного, подобное функции MRound в Excel. Умножьте значение на фактор, образующий целое число, округлите число, а затем разделите его на тот же фактор. Например, для округления числа 1,3 до ближайшего числа, кратного 2(1.4), воспользуйтесь следующим выражением:

Функции для работы с датой

Функция Today возвращает текущую дату. Следующее выражение можно указать в текстовом поле для вывода даты формирования отчета или в качестве параметра фильтрации данных на основе текущей даты.

Для извлечения определенной части даты используйте функцию DateInterval. Вот некоторые допустимые параметры DateInterval:

  • DateInterval.Second
  • DateInterval.Minute
  • DateInterval.Hour
  • DateInterval.Weekday
  • DateInterval.Day
  • DateInterval.DayOfYear
  • DateInterval.WeekOfYear
  • DateInterval.Month
  • DateInterval.Quarter
  • DateInterval.Year

Например, это выражение выводит номер недели в текущем году для текущей даты:

Функция DateAdd может оказаться полезной для вычисления диапазона дат на основе одного параметра. Следующее выражение вычисляет дату, которая отстоит на 6 месяцев позже даты, указанной в параметре StartDate.

Функция Year отображает год для конкретной даты. Это можно использовать для группирования по датам или для вывода года в качестве метки для набора дат. Выражение возвращает год для заданной группы дат заказов на продажу. Для работы с датами можно также пользоваться функцией Month и другими. Дополнительные сведения см. в документации по Visual Basic.

Для настройки формата функции можно объединять в выражении. Следующее выражение меняет формат даты с формы «месяц-день-год» на форму «месяц-неделя-день недели». Например, 12/23/2009 на декабрь неделя 3:

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

Следующее выражение форматирует значение SellStartDate как МММ-ГГ. Поле SellStartDate имеет тип datetime.

Следующее выражение форматирует значение SellStartDate как дд/ММ/гггг. Поле SellStartDate имеет тип datetime.

Функция CDate преобразует это значение в дату. Функция Now возвращает значение даты, которое содержит текущую дату и время по часам компьютера. DateDiff возвращает значение типа Long, указывающее число интервалов времени между двумя значениями типа Date.

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

В следующем примере показана дата начала прошлого месяца с учетом текущего месяца.

Следующее выражение создает годы интервала между SellStartDate и LastReceiptDate. Эти поля находятся в разных наборах данных — DataSet1 и DataSet2. Функция First (построитель отчетов и службы SSRS), являющаяся агрегатной функцией, возвращает первое значение SellStartDate в DataSet1 и первое значение LastReceiptDate в DataSet2.

Функция DatePart возвращает значение Integer с указанным компонентом заданного значения Date. Следующее выражение возвращает год первого значения SellStartDate в DataSet1. Область набора данных заданы из-за наличия нескольких наборов данных в отчете.

Функция DateSerial возвращает значение Date, представляющее указанные год, месяц и день, в котором время задано как полночь. В следующем примере показана дата окончания прошлого месяца с учетом текущего месяца.

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

Строковые функции

Объединяют несколько полей с помощью операторов объединения и констант Visual Basic . Следующее выражение возвращает два поля, каждое на отдельной строке в одном текстовом поле.

Функция Format позволяет отформатировать даты и числа в виде строки. Следующее выражение отображает значения параметров StartDate и EndDate в длинном формате даты.

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

Функции Right, Len и InStr полезны для извлечения подстроки, например имени пользователя из строк вида ДОМЕН\имя пользователя . Следующее выражение возвращает часть строки параметра\User , расположенную справа от символа обратной косой черты ( ).

Следующее выражение возвращает то же значение, что и предыдущее, только вместо функций Visual Basic используются члены класса .NET Framework String:

Отображает выбранные значения из многозначного параметра. В следующем примере функция Join объединяет выбранные значения параметра MySelection в одну строку, которая может использоваться в качестве выражения для значения текстового поля в элементе отчета.

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

Функции Regex класса .NET Framework System.Text.RegularExpressions полезны при изменении формата существующих строк, например при форматировании телефонного номера. Следующее выражение использует функцию Replace для изменения формата десятизначного номера телефона в поле с "nnn-nnn-nnnn" на "(nnn) nnn-nnnn":

Убедитесь, что значение Fields!Phone.Value не содержит лишних пробелов и имеет тип String.

Поиск

При указании ключевого поля можно использовать функцию Lookup для извлечения значения из набора данных со связью "один к одному", например для пары "ключ-значение". Следующее выражение отображает из набора данных (Product) название продукта по его идентификатору:

LookupSet

Задавая ключевое поле, можно использовать функцию LookupSet для извлечения набора значений из набора данных со связью "один ко многим". Например, у одного человека может быть несколько телефонных номеров. В следующем примере предположим, что набор данных PhoneList содержит в каждой строке идентификатор пользователя и телефонный номер. Функция LookupSet возвращает массив значений. В следующем выражении возвращаемые значения объединяются в одну строку. Для пользователя отображается список телефонных номеров по его ContactID:

Функции преобразования

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

Следующее выражение преобразует константу 500 в тип Decimal для сравнения с денежным типом данных Transact-SQL в поле Value для выражения фильтра.

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

Функции выбора

Функция Iif возвращает одно из двух значений в зависимости от того, истинно ли указанное выражение. В следующем выражении используется функция Iif , которая возвращает логическое значение True , если значение LineTotal превышает 100. В противном случае возвращается значение False:

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

Значения, большие или равные 10, отображаются с зеленым фоном, от 1 до 9 — с синим фоном, и меньшие 1 — с красным фоном.

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

Значения, больше или равные 10, отображаются с зеленым фоном, от 1 до 9 — с синим фоном, равные 1 — с желтым фоном и меньшие или равные 0 — с красным фоном.

Проверяет значение поля ImportantDate и возвращает строку «Red», если прошло больше недели, в ином случае — «Blue». Это выражение позволяет управлять свойством Color текстового поля в элементе отчета.

Проверяет значение поля PhoneNumber и возвращает строку "No Value", если это значение NULL (Nothing в Visual Basic); в противном случае возвращает значение телефонного номера. Это выражение позволяет управлять содержимым текстового поля в элементе отчета.

Проверяет значение поля Department и возвращает либо имя вложенного отчета, либо значение NULL (Nothing в Visual Basic). Это выражение может использоваться для условной детализации вложенных отчетов.

Проверяет, не является ли значением поля NULL. Это выражение можно использовать для управления свойством Hidden элемента-изображения отчета. В следующем примере изображение, задаваемое полем [LargePhoto], отображается, только если значение поле не равно NULL.

Функция MonthName возвращает значение типа String, содержащее название указанного месяца. В следующем примере в поле «Месяц» указано Н/Д, если в поле содержится значение 0.

Функции отчета

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

Функция Sum суммирует значения в группе или области данных. Она может быть полезна в колонтитулах группы. Следующее выражение отображает сумму данных в группе или области данных Order.

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

RowNumber

Если функция RowNumber используется в текстовом поле в области данных, то она отображает номер строки для каждого экземпляра текстового поля, в котором содержится это выражение. Эта функция может оказаться полезной для нумерации строк в таблице. Также она может быть полезна для более сложных задач, например для разбивки на страницы по определенному числу строк. Дополнительные сведения см. в подразделе Разрывы страниц далее в этом разделе.

Область, указанная для элементов управления RowNumber , когда начинается перенумерация. Ключевое слово Nothing указывает, что функция начнет нумерацию строк с первой строки самой внешней области данных. Чтобы начать подсчет внутри вложенной области данных, используйте имя области данных. Чтобы начать подсчет внутри группы, используйте имя группы.

Внешний вид данных отчета

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

Верхние и нижние колонтитулы страницы

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

Следующее выражение выдает имя отчета и время его запуска. Его можно указать в текстовом поле в нижнем колонтитуле или в теле отчета. Время форматируется с помощью строки форматирования .NET Framework для короткой даты:

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

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

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

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

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

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

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

Разрывы страниц

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

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

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

Дополнительные сведения об установке разрывов страниц см. в разделе Добавление разрыва страницы (построитель отчетов и службы SSRS).

Свойства

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

Форматирование

Следующее выражение при использовании в свойстве Color текстового поля изменяет цвет текста в зависимости от значения поля Profit :

Можно также использовать объектную переменную Visual Basic языка Me . Эта переменная является другим способом сослаться на значение текстового поля.

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

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

Доступные цвета выбираются из перечисления KnownColor .NET Framework .

Цвета диаграммы

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

Видимость

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

Если указать следующее выражение для определения видимости строк сведений в группе, они отображаются только для продаж со значением более 90% в поле PctQuota .

Если указать следующее выражение для свойства Hidden таблицы, то таблица будет показана, только если в ней больше 12 строк.

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

URL-адреса

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

Следующее выражение, используемое как действие на текстовом поле, формирует настраиваемый URL-адрес, указывающий поле набора данных EmployeeID в качестве параметра URL-адреса.

Следующее выражение в зависимости от определенных условий управляет добавлением URL-адреса в текстовое поле. Это выражение зависит от параметра IncludeURLs , который позволяет пользователю решать, включать ли в отчет активные URL-адреса. Это выражение установлено в качестве действия для текстового поля. Установив параметр в значение False и просматривая затем отчет, можно экспортировать отчет Microsoft Excel без гиперссылок.

Данные отчета

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

Параметры

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

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

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

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

Пользовательский код

В отчете можно использовать пользовательский код. Он либо внедряется в отчет, либо хранится в используемой отчетом пользовательской сборке. Дополнительные сведения о пользовательском коде см. в разделе Пользовательский код и ссылки на сборки в выражениях в конструкторе отчетов (службы SSRS).

Использование групповых переменных для нестандартного статистического выражения

Можно инициализировать значение групповой переменной, которая является локальной в области определенной группы, а затем включать в выражения ссылку на эту переменную. Одним из способов использования групповой переменной в пользовательском коде является реализация нестандартного статистического выражения. Дополнительные сведения см. в разделе Использование групповых переменных в службах Reporting Services 2008 для нестандартного статистического выражения.

Подавление значения NULL или нулевых значений во время выполнения

Во время обработки отчета результатом вычисления некоторых значений в выражении может быть NULL или значения могут быть неопределенными. Это может вызывать ошибки времени выполнения, которые приводят к отображению в текстовом поле значения #Error вместо вычисленного выражения. Функция IIF особенно чувствительна к такому поведению, так как, в отличие от инструкции If-Then-Else, каждая часть инструкции IIF оценивается (включая вызовы функций) перед передачей в подпрограмму, которая проверяет значения на равенство true или false. Инструкция =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) формирует значение #Error в отчете, готовом для просмотра, если поле Fields!Sales.Value имеет значение NOTHING.

Чтобы избежать этого состояния, используйте одну из следующих стратегий.

Установите числитель в 0, а знаменатель в 1, если значение поля B равно 0 или не определено; в противном случае установите в качестве числителя значение поля А, а в качестве знаменателя — значение поля B.

Используйте функцию пользовательского кода, чтобы вернуть значение выражения. В следующем примере возвращается процентная разница между текущим и предыдущим значениями. Этот пример может использоваться для вычисления разницы между двумя последовательными значениями. В нем обрабатывается крайний случай первого сравнения (когда нет предыдущего значения) и случаи, когда либо предыдущее значение, либо текущее значение содержит NULL (Nothing в Visual Basic).

Следующее выражение показывает, как вызвать этот пользовательский код из текстового поля для контейнера ColumnGroupByYear (области данных или группы).

📎📎📎📎📎📎📎📎📎📎