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


Примеры выражений в службах Reporting Services

Некоторые выражения часто используются в отчетах. Эти выражения служат для изменения внешнего вида, свойств и элементов отчета, а также устанавливают порядок получения данных. В данном подразделе описаны некоторые выражения, которые могут быть использованы для решения типичных задач при создании отчетов. Дополнительные сведения см. в разделе Создание выражений в службах Reporting Services.

Функции

Многие выражения в отчете содержат вызовы функций. Они позволяют форматировать данные, применять логические операции и производить доступ к метаданным отчета. Можно писать выражения, использующие функции из библиотеки Visual Basic этапа исполнения, а также из пространств имен System.Convert и System.Math. Можно добавить ссылки на функции из других сборок или пользовательский код. Допустимо также использование классов платформы Microsoft .NET Framework, включая System.Text.RegularExpressions. Дополнительные сведения о функциях языка Visual Basic, поддерживаемых в выражениях, см. в документации «Visual Basic Run-Time Library» на веб-узле msdn.microsoft.com.

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

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

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

Функции языка Visual Basic позволяют включать в отчет значения даты.

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

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

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)
    
  • Следующее выражение содержит вызов функции Year, которая выводит год указанной даты. Его можно использовать для группирования по датам или для вывода года в качестве метки для набора дат. Приведенное выражение возвращает год заданной группы дат заказов. Для работы с датами можно также пользоваться функцией Month и другими. Дополнительные сведения см. в документации по Visual Basic .NET.

    =Year(Fields!OrderDate.Value)
    

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

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

  • С помощью операторов сцепления и констант языка 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 полезны для извлечения вложенных строк; например для усечения строки вида ДОМЕН\имя_пользователя до имени пользователя. Следующее выражение возвращает часть параметра User, расположенную справа от символа обратной косой черты (\):

    =Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "\"))
    

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

    =Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)
    
  • Выбранные значения из многозначного параметра можно отобразить. В следующем примере функция Join сцепляет выбранные значения параметра MySelection в одну строку, которая может использоваться в качестве выражения для значения текстового поля в элементе отчета.

    = Join(Parameters!MySelection.Value)
    

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

  • Функция 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")
    

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

Функции языка Visual Basic позволяют выполнять в отчете преобразования типов данных.

  • Функции языка Visual Basic позволяют выполнять преобразования типов данных в случае необходимости. Функции преобразования часто используются для исключения или форматирования в отчете сообщений об ошибках. Следующее выражение отображает количество значений, выбранных для многозначного параметра 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 >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
    
  • Следующее выражение также в зависимости от значения PctComplete возвращает одно из трех значений, но использует для этого функцию Switch, которая возвращает значение, связанное с первым выражением списка, результат которого равен True:

    =Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
    
  • Следующее выражение проверяет значение поля «ImportantDate» и возвращает «Red», если прошло больше недели, в ином случае — «Blue». Это выражение позволяет управлять свойством Color текстового поля в элементе отчета.

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
    
  • Следующее выражение проверяет значение поля PhoneNumber и, если оно содержит значение null (в Visual Basic Nothing), возвращает «No Value» вместо значения NULL. Это выражение позволяет управлять содержимым текстового поля в элементе отчета.

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
    
  • Следующее выражение проверяет значение поля Department и возвращает либо имя вложенного отчета, либо null (в Visual Basic Nothing). Это выражение может использоваться для условной детализации вложенных отчетов.

    =Iif(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
    
  • Следующее выражение проверяет, содержится ли в поле значение NULL. Это выражение может использоваться для управления свойством Hidden элемента отчета «изображение».

    =Iif(IsNothing(Fields!LargePhoto.Value),True,False)
    

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

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

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

    =Sum(Fields!LineTotal.Value, "Order")
    
  • Выражение, содержащее функцию 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)
    
    ms157328.note(ru-ru,SQL.90).gifПримечание.
    При ссылке из колонтитула в выражении может быть указан только один элемент отчета.

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

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

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

    =Int((RowNumber(Nothing)-1)/25)
    

Свойства

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

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

Выражения позволяют изменить внешний вид элементов отчета.

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

    =Iif(Fields!Profit.Value < 0, "Red", "Black")
    
  • При указании следующего выражения в свойстве BackgroundColor элемента отчета в области данных цвет фона каждой строки изменяется от бледно-зеленого до белого:

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")
    

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

    =Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
    

Видимость

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

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

    =Iif(Fields!PctQuota.Value>.9, False, True)
    
  • Следующее выражение при установленных свойствах таблицы Видимость и Скрытый показывает таблицу, только если в ней больше 12 строк:

    =IIF(CountRows()>12,true,false)
    

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

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

Параметры

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

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

    =User!UserID
    
  • С помощью следующего выражения можно ссылаться на параметр в запросе, критерий фильтра, текстовое поле и другие элементы отчета. В следующем примере подразумевается, что параметр имеет имя User:

    =Parameters!User.Value
    

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

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

  • В следующем примере вызывается метод внедренного пользовательского кода ToUSD, который конвертирует значение поля StandardCost в долларовый эквивалент:

    =Code.ToUSD(Fields!StandardCost.Value)
    
  • В следующем примере показано, как определить некоторые пользовательские константы и переменные.
    [Visual Basic]

    Public Const MyNote = "Authored by Bob"
    Public Const NCopies As Int32 = 2
    Public Dim  MyVersion As String = "123.456"
    Public Dim MyDoubleVersion As Double = 123.456
    

    Хотя пользовательские константы и переменные не отображаются в представлении «Константы редактора выражений» (отображаются только встроенные константы), на них можно сослаться из любого выражения, как показано в следующих примерах. Они рассматриваются как значения типа Variant.
    [Visual Basic]

    =Code.MyNote
    =Code.NCopies 
    =Code.MyVersion
    =Code.MyDoubleVersion
    
  • В следующем примере вызывается метод внедренного пользовательского кода FixSpelling, который заменяет в поле SubCategory.Value все встречающиеся слова Bicycle на Bike.

    =Code.FixSpelling(Fields!SubCategory.Value)
    

    Следующий код показывает реализацию метода FixSpelling при его внедрении в определение отчета. При первом запуске этого пользовательского кода в окне MessageBox отображается измененный текст. В этом примере показано, как обратиться к классам платформы .NET Framework StringBuilder и System.Windows.Forms.MessageBox. Нужно добавить ссылку на свойства отчета для класса System.Windows.Forms. Дополнительные сведения см. в разделах Как добавить код в отчет (конструктор отчетов) и Как добавить в отчет ссылки на сборку (конструктор отчетов).
    [Visual Basic]

    Dim firstTime As Boolean = True 
    Public Function FixSpelling(ByVal s As String) As String
       Dim strBuilder As New System.Text.StringBuilder(s)
       If s.Contains("Bike") Then
          strBuilder.Replace("Bike", "Bicycle")
          If firstTime Then
            System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
    '       or MsgBox(strBuilder.ToString())
            firstTime = False
          End If
          Return strBuilder.ToString()
          Else : Return s
       End If
    End Function
    

См. также

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

Использование функций отчетов в выражениях (службы Reporting Services)

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

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

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

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

14 апреля 2006 г.

Изменения
  • Добавлены примеры: регулярного выражения для телефонного номера; пользовательских констант и переменных; изменения цвета текстового поля; выбора нескольких параметров и их подсчета.
  • Проверка на значения NULL.

5 декабря 2005 г.

Изменения
  • Добавлен пример пользовательского кода.