Примеры выражений (построитель отчетов и службы SSRS)
Выражения часто используются в отчетах для управления содержимым и внешним видом отчета. Выражения написаны на Microsoft Visual Basic и могут использовать встроенные функции: пользовательский код, переменные отчетов и групп, а также определяемые пользователем переменные. Выражения начинаются со знака равенства (=). Дополнительные сведения о редакторе выражений и типах ссылок, которые могут быть включены, см. в разделах Использование выражений в отчетах (построитель отчетов и службы SSRS) и Добавление выражения (построитель отчетов и службы SSRS).
Важно!
При включении функции «песочницы» для языка определения отчетов только определенные типы и элементы смогут использовать в тексте выражения во время публикации отчета. Дополнительные сведения см. в статье Enable and Disable RDL Sandboxing.
В данном разделе приведены примеры выражений, которые можно использовать для решения типичных задач в отчете.
Функции языка Visual Basic — примеры функций дат, строковых функций, функций преобразования и условных функций Visual Basic.
Функции отчета Примеры статистических функций и других встроенных функций отчета.
Внешний вид данных отчета Примеры изменения внешнего вида отчета.
Свойства Примеры задания свойств элемента отчета, отвечающих за формат и видимость.
Параметры Примеры использования параметров в выражении.
Пользовательский код Примеры внедренного пользовательского кода.
Примеры выражений для специальных задач см. в следующих разделах.
Примеры уравнений фильтра (построитель отчетов и службы SSRS)
Часто используемые фильтры (построитель отчетов и службы SSRS)
Ссылки на коллекции переменных отчета и группы (построитель отчетов и службы SSRS)
Дополнительные сведения о простых и сложных выражениях, о местах, где можно использовать выражения, и о типах ссылок, которые можно включать в выражения, см. в подразделах в разделе Выражения (построитель отчетов и службы SSRS). Дополнительные сведения о контексте, в котором выражения оцениваются для вычисления статистических выражений, см. в разделе Область выражения для суммирования, агрегатных функций и встроенных коллекций (построитель отчетов и службы SSRS).
О написании выражений, в которых используются многие из функций и операторов, также используемых в примерах выражений в этом разделе, но в контексте создания отчета, см. в разделе Tutorial: Introducing Expressions.
Редактор выражений поддерживает иерархическое представление встроенных функций. Если выбрать функцию, на панели значений появится пример программного кода. Дополнительные сведения см. в разделе Диалоговое окно выражения или Диалоговое окно выражения (Report Builder).
Функции
Многие выражения в отчете содержат вызовы функций. Они позволяют форматировать данные, применять логические операции и производить доступ к метаданным отчета. В выражениях можно использовать функции из библиотеки времени выполнения 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:
= Round(1.3)
Можно также написать выражение, округляющее значение до указанного кратного, подобное функции MRound
в Excel. Умножьте значение на фактор, образующий целое число, округлите число, а затем разделите его на тот же фактор. Например, для округления числа 1,3 до ближайшего числа, кратного 2(1.4), воспользуйтесь следующим выражением:
= Round(1.3*5)/5
Функции для работы с датой
- Функция
Today
возвращает текущую дату. Следующее выражение можно указать в текстовом поле для вывода даты формирования отчета или в качестве параметра фильтрации данных на основе текущей даты.
=Today()
- Функция
DateAdd
может оказаться полезной для вычисления диапазона дат на основе одного параметра. Следующее выражение вычисляет дату, которая отстоит на 6 месяцев позже даты, указанной в параметре StartDate.
=DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
- Функция
Year
отображает год для конкретной даты. Это можно использовать для группирования по датам или для вывода года в качестве метки для набора дат. Выражение возвращает год для заданной группы дат заказов на продажу. Для работы с датами можно также пользоваться функциейMonth
и другими. Дополнительные сведения см. в документации по Visual Basic.
=Year(Fields!OrderDate.Value)
- Для настройки формата функции можно объединять в выражении. Следующее выражение меняет формат даты с формы «месяц-день-год» на форму «месяц-неделя-день недели». Например, 12/23/2009 на декабрь неделя 3:
=Format(Fields!MyDate.Value, "MMMM") & " Week " &
(Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value),
Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString
При использовании в качестве вычисляемого поля в наборе данных с помощью этого выражения можно выполнить агрегатную обработку значений в диаграмме по неделям каждого месяца.
- Следующее выражение форматирует значение SellStartDate как МММ-ГГ. Поле SellStartDate имеет тип datetime.
=FORMAT(Fields!SellStartDate.Value, "MMM-yy")
- Следующее выражение форматирует значение SellStartDate как дд/ММ/гггг. Поле SellStartDate имеет тип datetime.
=FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")
- Функция
CDate
преобразует это значение в дату. ФункцияNow
возвращает значение даты, которое содержит текущую дату и время по часам компьютера.DateDiff
возвращает значение типа Long, указывающее число интервалов времени между двумя значениями типа Date.
В следующем примере показана дата начала текущего года
=DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))
- В следующем примере показана дата начала прошлого месяца с учетом текущего месяца.
=DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))
- Следующее выражение создает годы интервала между SellStartDate и LastReceiptDate. Эти поля находятся в разных наборах данных — DataSet1 и DataSet2. Функция First (построитель отчетов и службы SSRS), являющаяся агрегатной функцией, возвращает первое значение SellStartDate в DataSet1 и первое значение LastReceiptDate в DataSet2.
=DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))
- Функция
DatePart
возвращает значение Integer с указанным компонентом заданного значения Date. Следующее выражение возвращает год первого значения SellStartDate в DataSet1. Область набора данных заданы из-за наличия нескольких наборов данных в отчете.
=Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))
- Функция
DateSerial
возвращает значение Date, представляющее указанные год, месяц и день, в котором время задано как полночь. В следующем примере показана дата окончания прошлого месяца с учетом текущего месяца.
=DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)
- Следующее выражение отображает разные даты на основе значения параметра даты, выбранного пользователем.
Описание примера | Пример |
---|---|
Вчера | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1) |
Два дня назад | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2) |
Месяц назад | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value)) |
Два месяца назад | =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value)) |
Год назад | =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
Два года назад | =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)) |
Строковые функции
- Объединяют несколько полей с помощью операторов объединения и констант Visual Basic. Следующее выражение возвращает два поля, каждое на отдельной строке в одном текстовом поле.
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value
- Функция
Format
позволяет отформатировать даты и числа в виде строки. Следующее выражение отображает значения параметров StartDate и EndDate в длинном формате даты.
=Format(Parameters!StartDate.Value, "D") & " through " & Format(Parameters!EndDate.Value, "D")
Если текстовое поле содержит только дату или число, следует использовать свойство Format текстового поля, чтобы применить форматирование вместо Format
функции в текстовом поле.
- Функции
Right
,Len
иInStr
полезны для возврата подстроки, например при обрезкеимени пользователяDOMAIN\ до имени пользователя. Следующее выражение возвращает часть строки параметраUser, расположенную справа от символа обратной косой черты (\):
=Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
Следующее выражение возвращает то же значение, что и предыдущее, только вместо функций Visual Basic используются члены класса String платформы .NET Framework:
=Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
- Отображает выбранные значения из многозначного параметра. В следующем примере функция используется
Join
для объединения выбранных значений параметра MySelection в одну строку, которую можно задать в качестве выражения для значения текстового поля в элементе отчета:
= Join(Parameters!MySelection.Value)
В следующем примере производится то же, что и в приведенном выше примере, а перед списком выбранных значений отображается строка текста.
="Report for " & JOIN(Parameters!MySelection.Value, " & ")
- Функции
Regex
из платформа .NET Framework System.Text.RegularExpressions полезны для изменения формата существующих строк, например для форматирования номера телефона. В следующем выражении функция используетсяReplace
для изменения формата десятизначного телефонного номера в поле с "nnn-nnn-nnnn" на "(nnn) nnn-nnnn":
=System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")
Примечание
Убедитесь, что значение Fields!Phone.Value не содержит лишних пробелов и имеет тип String.
Поиск
- При указании ключевого поля можно использовать функцию
Lookup
для извлечения значения из набора данных со связью «один к одному», например для пары «ключ-значение». Следующее выражение отображает из набора данных (Product) название продукта по его идентификатору:
=Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")
LookupSet
- Задавая ключевое поле, можно использовать функцию
LookupSet
для извлечения набора значений из набора данных со связью «один ко многим». Например, у одного человека может быть несколько телефонных номеров. В следующем примере предположим, что набор данных PhoneList содержит в каждой строке идентификатор пользователя и телефонный номер. ФункцияLookupSet
возвращает массив значений. В следующем выражении возвращаемые значения объединяются в одну строку. Для пользователя отображается список телефонных номеров по его ContactID:
=Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")
Функции преобразования
Функции Visual Basic можно использовать для преобразования поля из одного типа данных в другой. Функции преобразования могут использоваться, чтобы преобразовать тип данных по умолчанию для поля в тип данных, необходимый для вычислений или для объединения текста.
- Следующее выражение преобразует константу 500 в тип Decimal для сравнения с денежным типом данных Transact-SQL в поле Value для выражения фильтра.
=CDec(500)
- Следующее выражение отображает количество значений, выбранных для многозначного параметра MySelection.
=CStr(Parameters!MySelection.Count)
Функции выбора
- Функция
Iif
возвращает одно из двух значений в зависимости от того, истинно ли указанное выражение. В следующем выражении используется функцияIif
, которая возвращает логическое значениеTrue
, если значениеLineTotal
превышает 100. В противном случае возвращается значениеFalse
:
=IIF(Fields!LineTotal.Value > 100, True, False)
- Следующее выражение использует несколько функций
IIF
(так называемые вложенные IIF), возвращая одно из трех значений в зависимости от значения поляPctComplete
. Следующее выражение может быть помещено в свойство цвета заливки текстового поля, чтобы изменять цвета фона в зависимости от значения текстового поля.
=IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))
Значения, большие или равные 10, отображаются с зеленым фоном, от 1 до 9 — с синим фоном, и меньшие 1 — с красным фоном.
- Такого же эффекта можно добиться с помощью функции
Switch
. ФункцияSwitch
полезна при наличии трех и более проверяемых условий. ФункцияSwitch
возвращает значение, связанное с первым выражением ряда, которое оценивается как true:
=Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red",)
Значения, больше или равные 10, отображаются с зеленым фоном, от 1 до 9 — с синим фоном, равные 1 — с желтым фоном и меньшие или равные 0 — с красным фоном.
- Проверяет значение поля
ImportantDate
и возвращает строку «Red», если прошло больше недели, в ином случае — «Blue». Это выражение позволяет управлять свойством Color текстового поля в элементе отчета.
=IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
- Проверьте значение
PhoneNumber
поля и верните "Нет значения", если оно имеет значениеnull
(Nothing
в Visual Basic); в противном случае возвращается значение номера телефона. Это выражение позволяет управлять содержимым текстового поля в элементе отчета.
=IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
- Проверьте значение
Department
поля и верните имя вложенного отчета илиnull
(Nothing
в Visual Basic). Это выражение может использоваться для условной детализации вложенных отчетов.
=IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
- Проверяет, не является ли значением поля NULL. Это выражение можно использовать для управления свойством
Hidden
элемента-изображения отчета. В следующем примере изображение, задаваемое полем [LargePhoto], отображается, только если значение поле не равно NULL.
=IIF(IsNothing(Fields!LargePhoto.Value),True,False)
- Функция
MonthName
возвращает значение типа String, содержащее название указанного месяца. В следующем примере в поле «Месяц» указано Н/Д, если в поле содержится значение 0.
IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))
Функции отчета
В выражение можно добавить ссылку на дополнительные функции, которые позволяют управлять данными в отчете. В этом разделе приведены примеры использования двух из этих функций. Дополнительные сведения о функциях отчета и примеры см. в разделе Справочник по агрегатным функциям (построитель отчетов и службы SSRS).
SUM
- Функция
Sum
суммирует значения в группе или области данных. Она может быть полезна в колонтитулах группы. Следующее выражение отображает сумму данных в группе или области данных Order.
=Sum(Fields!LineTotal.Value, "Order")
- Функцию
Sum
можно также использоваться для вычислений условных статистических функций. Например, если набор данных содержит поле State с возможными значениями «Not Started», «Started», «Finished», следующее значение, помещенное в верхний колонтитул группы, вычисляет статистическую сумму только для значения «Finished».
=Sum(IIF(Fields!State.Value = "Finished", 1, 0))
RowNumber
- Если функция
RowNumber
используется в текстовом поле в области данных, то она отображает номер строки для каждого экземпляра текстового поля, в котором содержится это выражение. Эта функция может оказаться полезной для нумерации строк в таблице. Также она может быть полезна для более сложных задач, например для разбивки на страницы по определенному числу строк. Дополнительные сведения см. в подразделе Разрывы страниц далее в этом разделе.
Область, указанная для элементов управления RowNumber
, когда начинается перенумерация. Ключевое слово Nothing
указывает, что функция начнет нумерацию строк с первой строки самой внешней области данных. Чтобы начать подсчет внутри вложенной области данных, используйте имя области данных. Чтобы начать подсчет внутри группы, используйте имя группы.
=RowNumber(Nothing)
Внешний вид данных отчета
Выражения позволяют изменять внешний вид данных, отображаемых в отчете. Например, можно отобразить значения двух полей в одном текстовом поле, вывести сведения об отчете или изменить порядок разбиения на страницы.
Верхние и нижние колонтитулы страницы
При конструировании отчета может понадобиться вывести в области нижнего колонтитула имя отчета и номер страницы. Для этого воспользуйтесь следующими выражениями.
- Следующее выражение выдает имя отчета и время его запуска. Его можно указать в текстовом поле в нижнем колонтитуле или в теле отчета. Время форматируется с помощью строки форматирования .NET Framework для краткой даты:
=Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
- Следующее выражение, если его поместить в текстовое поле в нижнем колонтитуле отчета, выводит номер страницы и общее число страниц, содержащихся в отчете:
=Globals.PageNumber & " of " & Globals.TotalPages
В следующих примерах показано, как вывести в верхнем колонтитуле страницы первое и последнее значение на странице, получив результат, похожий на список каталогов. Подразумевается, что в области данных существует текстовое поле LastName
.
- Следующее выражение, помещенное в текстовое поле в левой части верхнего колонтитула, выводит первое значение текстового поля
LastName
на этой странице.
=First(ReportItems("LastName").Value)
- Следующее выражение, помещенное в текстовое поле в правой части верхнего колонтитула, выводит последнее значение текстового поля
LastName
на этой странице.
=Last(ReportItems("LastName").Value)
В следующем примере показано, как отобразить общее количество страниц. Подразумевается, что в области данных существует текстовое поле Cost
.
- Следующее выражение, помещенное в верхний или нижний колонтитул, выводит сумму значений в текстовом поле
Cost
для данной страницы.
=Sum(ReportItems("Cost").Value)
Примечание
При ссылке из колонтитула в выражении может быть указан только один элемент отчета. Кроме того, в выражениях верхнего и нижнего колонтитулов можно ссылаться на имя текстового поля, но не использовать выражение фактических данных в текстовом поле.
Разрывы страниц
В некоторых отчетах может понадобиться возможность вставлять разрывы страниц после вывода указанного количества строк вместо или в дополнение к разрывам, вставляемым по группам или элементам отчета. Для этого создайте группу, содержащую необходимые группы или записи сведений, добавьте к группе разрыв страницы, а затем добавьте выражение группы для группирования по указанному числу строк.
- Следующее выражение, будучи указанным в качестве выражения группы, назначает номер каждому набору из 25 строк. Если для этой группы определен разрыв страницы, данное выражение будет выводить его через каждые 25 строк.
=Ceiling(RowNumber(Nothing)/25)
Чтобы позволить пользователю устанавливать значение числа строк на странице, создайте параметр с именем RowsPerPage
и положите в основу выражения группы этот параметр, как показано в следующем выражении.
=Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)
Дополнительные сведения об установке разрывов страниц см. в разделе Добавление разрыва страницы (построитель отчетов и службы SSRS).
Свойства
Выражения используются не только для отображения данных в текстовых полях. С их помощью можно также менять свойства элементов отчета. Можно изменить стиль данных или видимость элемента отчета.
Форматирование
- Следующее выражение при использовании в свойстве Color текстового поля изменяет цвет текста в зависимости от значения поля
Profit
:
=Iif(Fields!Profit.Value < 0, "Red", "Black")
Можно также использовать объектную переменную Me
языка Visual Basic. Эта переменная является другим способом сослаться на значение текстового поля.
=Iif(Me.Value < 0, "Red", "Black")
- При указании следующего выражения в свойстве BackgroundColor элемента отчета в области данных цвет фона каждой строки изменяется с бледно-зеленого до белого.
=Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
Возможно, что при использовании выражения для конкретной области понадобится указать набор данных для агрегатной функции:
=Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
Примечание
Доступные цвета выбираются из перечисления KnownColor платформы .NET Framework.
Цвета диаграммы
Чтобы задать цвета в фигурной диаграмме, нужно с помощью пользовательского кода изменить порядок сопоставления цветов со значениями точек данных. Это дает возможность использовать согласованные цвета в нескольких диаграммах, использующих одни и те же группы категорий. Дополнительные сведения см. в разделе Указание согласованных цветов для нескольких фигурных диаграмм (построитель отчетов и службы SSRS).
Видимость
Изменяя значения свойства видимости, можно скрывать и отображать элементы отчета. В области данных (например, в таблице) можно в зависимости от значения выражения сделать некоторые из строк подробностей изначально невидимыми.
- Если указать следующее выражение для определения видимости строк сведений в группе, они отображаются только для продаж со значением более 90% в поле
PctQuota
.
=Iif(Fields!PctQuota.Value>.9, False, True)
- Если указать следующее выражение для свойства Hidden таблицы, то таблица будет показана, только если в ней больше 12 строк.
=IIF(CountRows()>12,false,true)
- Следующее выражение, заданное в свойстве
Hidden
столбца, показывает столбец только в том случае, если поле существует в наборе данных отчета после извлечения данных из источника данных:
=IIF(Fields!Column_1.IsMissing, true, false)
URL-адреса
Можно настраивать URL-адреса с помощью данных отчета, а также управлять добавлением URL-адресов в качестве действий для текстового поля в зависимости от некоторых условий.
- Следующее выражение, используемое как действие на текстовом поле, формирует настраиваемый URL-адрес, указывающий поле набора данных
EmployeeID
в качестве параметра URL-адреса.
="http://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value
Дополнительные сведения см. в разделе Добавление гиперссылки на URL-адрес (построитель отчетов и службы SSRS).
- Следующее выражение в зависимости от определенных условий управляет добавлением URL-адреса в текстовое поле. Это выражение зависит от параметра
IncludeURLs
, который позволяет пользователю решать, включать ли в отчет активные URL-адреса. Это выражение установлено в качестве действия для текстового поля. Установив параметр в значение False и просматривая затем отчет, можно экспортировать отчет Microsoft Excel без гиперссылок.
=IIF(Parameters!IncludeURLs.Value,"http://adventure-works.com/productcatalog",Nothing)
Данные отчета
С помощью выражений можно управлять данными отчета, например параметрами и другими данными отчета. Можно даже изменить запрос, используемый для получения данных при построении отчета.
Параметры
В параметрах выражения используются для изменения их значения по умолчанию. Например, можно использовать параметр для фильтрации данных для конкретного пользователя на основе идентификатора пользователя, запускающего отчет.
- Следующее выражение, при указании в качестве значения параметра по умолчанию, выбирает идентификатор пользователя, запустившего данный отчет:
=User!UserID
- С помощью глобальной коллекции
Parameters
можно ссылаться на параметр в параметре запроса, критерий фильтра, текстовое поле или другие области отчета. В следующем примере подразумевается, что параметр имеет имя Department:
=Parameters!Department.Value
- Параметр может быть создан в отчете, но установлен как скрытый. При выполнении отчета на сервере отчетов параметр не отображается на панели инструментов и читатель отчета не может изменить значение по умолчанию. Скрытый параметр можно использовать для установки значения по умолчанию в качестве пользовательской константы. Это значение можно использовать в любом выражении, включая выражение поля. Следующее выражение идентифицирует поле, задаваемое значением параметра по умолчанию для параметра с именем ParameterField.
=Fields(Parameters!ParameterField.Value).Value
Пользовательский код
В отчете можно использовать пользовательский код. Он либо внедряется в отчет, либо хранится в используемой отчетом пользовательской сборке. Дополнительные сведения о пользовательском коде см. в разделе Пользовательский код и ссылки на сборки в выражениях в конструкторе отчетов (службы SSRS).
Использование групповых переменных для нестандартного статистического выражения
Можно инициализировать значение групповой переменной, которая является локальной в области определенной группы, а затем включать в выражения ссылку на эту переменную. Одним из способов использования групповой переменной в пользовательском коде является реализация нестандартного статистического выражения. Дополнительные сведения см. в разделе Использование групповых переменных в службах Reporting Services 2008 для нестандартного статистического выражения.
Дополнительные сведения о переменных см. в разделе Ссылки на коллекции переменных отчета и группы (построитель отчетов и службы SSRS).
Подавление значения 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.
=IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))
- Используйте функцию пользовательского кода, чтобы вернуть значение выражения. В следующем примере возвращается процентная разница между текущим и предыдущим значениями. Его можно использовать для вычисления разницы между любыми двумя последовательными значениями и обработки ребра первого сравнения (если предыдущего значения нет) и вариантов, независимо от того, имеет ли предыдущее или текущее значение
null
(Nothing
в Visual Basic).
Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object
If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then
Return Nothing
Else if PreviousValue = 0 OR CurrentValue = 0 Then
Return Nothing
Else
Return (CurrentValue - PreviousValue) / CurrentValue
End If
End Function
Следующее выражение показывает, как вызвать этот пользовательский код из текстового поля для контейнера ColumnGroupByYear (области данных или группы).
=Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))
Это помогает избежать исключения во время выполнения. Для отображения в зависимости от определенных условий текста, основанного на значениях меньше или больше 0, можно использовать выражение, подобное =IIF(Me.Value < 0, "red", "black")
, в свойстве Color
текстового поля.
См. также:
- Примеры уравнений фильтра (построитель отчетов и службы SSRS)
- Примеры выражений групп (построитель отчетов и службы SSRS)
- Использование выражений в отчетах (построитель отчетов и службы SSRS)
- Выражения (построитель отчетов и службы SSRS)
- Часто используемые фильтры (построитель отчетов и службы SSRS)