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


Примеры выражений в Power BI построитель отчетов

ОБЛАСТЬ ПРИМЕНЕНИЯ: Power BI построитель отчетов Power BI Desktop

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

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

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

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

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

  • Свойства. Примеры настройки свойств элемента отчета для управления форматом или видимостью.

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

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

Дополнительные сведения об простых и сложных выражениях, где можно использовать выражения и типы ссылок, которые можно включить в выражение, см. в разделе "Выражения" в построитель отчетов Power BI.

Функции

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

Функции Visual Basic

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

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

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

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

    =Round(1.3)  
    

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

    =Round(1.3*5)/5  
    

Функции данных

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

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

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

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

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

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

    =Year(Fields!OrderDate.Value)  
    
  • Для настройки формата функции можно объединять в выражении. Следующее выражение меняет формат даты с формы «месяц-день-год» на форму «месяц-неделя-день недели». Например, измените значение "12.18.2022" на "Декабрьская неделя 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 как MMM-yy. Поле SellStartDate имеет тип datetime.

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • Следующее выражение форматирует значение SellStartDate как dd/MM/гггг. Поле SellStartDate имеет тип datetime.

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • Функция CDate преобразует это значение в дату. Функция Now возвращает значение даты, которое содержит текущую дату и время по часам компьютера. DateDiff возвращает длинноезначение, указывающее количество интервалов времени между двумя значениями даты.

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

    =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.

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • Функция DatePart возвращает целочисленное значение, содержащее указанный компонент заданного значения 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 полезны для извлечения подстроки, например имени пользователя из строк вида ДОМЕН\имя пользователя . Следующее выражение возвращает часть строки параметраUser, расположенную справа от символа обратной косой черты (\):

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

    Следующее выражение приводит к тому же значению, что и предыдущий, используя элементы класса платформа .NET Framework xref:System.String вместо функций 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)  
    

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

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • Функции Regex из платформа .NET Framework xref: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")  
    

    Примечание.

    Убедитесь, что значение поля!Телефон. Значение не имеет дополнительных пробелов и имеет типxref:System.String.

Подстановка

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

    =Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields.ProductName.Value, "Product")  
    

LookupSet

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

    =Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")  
    

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

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

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

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

    =CStr(Parameters!MySelection.Count)  
    

Функции принятия решений

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

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • Используйте несколько функций IIF (также известных как вложенные IIFs), чтобы вернуть одно из трех значений в зависимости от значения 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 — с красным фоном.

  • Проверьте значение поля "ВажныйDate " и верните "Красный", если оно больше недели и "Синий" в противном случае. Это выражение позволяет управлять свойством Color текстового поля в элементе отчета.

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")  
    
  • Проверьте значение поля Телефон Number и верните значение "Нет значения", если значение равно null (Ничего в Visual Basic). В противном случае возвращается значение номера телефона. Это выражение позволяет управлять содержимым текстового поля в элементе отчета.

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)  
    
  • Проверьте значение поля "Отдел " и верните имя вложенного отчета или значение 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)))  
    
    

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

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

Sum

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

    =Sum(Fields!LineTotal.Value, "Order")  
    
  • Функцию Sum можно также использоваться для вычислений условных статистических функций. Например, если набор данных имеет поле с именем State с возможными значениями Not 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.

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

    =Sum(ReportItems("Cost").Value)  
    

Примечание.

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

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

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

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

    =Ceiling(RowNumber(Nothing)/25)  
    

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

    =Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)  
    

Свойства

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

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

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

    =Iif(Fields!Profit.Value < 0, "Red", "Black")  
    

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

    =Iif(Me.Value < 0, "Red", "Black")

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

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

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

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

Примечание.

Доступные цвета приходят из перечисления Платформа .NET Framework KnownColor.

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

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

Visibility

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

  • Следующее выражение, когда используется для начальной видимости строк детализации в группе, отображает строки сведений для всех продаж, превышающих 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-адрес, указывающий поле EmployeeID набора данных в качестве параметра URL-адреса.

    ="https://adventure-works/MyInfo?ID=" & Fields!EmployeeID.Value  
    
  • Следующее выражение в зависимости от определенных условий управляет добавлением URL-адреса в текстовое поле. Это выражение зависит от параметра с именем IncludeURLs , который позволяет пользователю решить, следует ли включать активные URL-адреса в отчет. Это выражение установлено в качестве действия для текстового поля. Установив для параметра значение False, а затем просмотрев отчет, вы можете экспортировать отчет в Microsoft Excel без гиперссылок.

    =IIF(Parameters!IncludeURLs.Value,"https://adventure-works.com/productcatalog",Nothing)  
    

Примечание.

Отчеты с разбивкой на страницы Power BI не поддерживают использование JavaScript в выражении URL-адреса go.

данных отчета

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

Параметры

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

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

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

    =Parameters!Department.Value  
    
  • Параметр может быть создан в отчете, но установлен как скрытый. Когда отчет выполняется на сервере отчетов, параметр не отображается на панели инструментов, а средство чтения отчетов не может изменить значение по умолчанию. Можно использовать скрытый параметр, заданный по умолчанию, настраиваемую константу. Это значение можно использовать в любом выражении, включая выражение поля. Следующее выражение идентифицирует поле, задаваемое значением параметра по умолчанию для параметра с именем ParameterField.

    =Fields(Parameters!ParameterField.Value).Value  
    

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

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

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

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

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

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

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

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

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))  
    
  • Используйте функцию пользовательского кода, чтобы вернуть значение выражения. В следующем примере возвращается процентная разница между текущим и предыдущим значениями. Это можно использовать для вычисления разницы между двумя последовательными значениями и обрабатывает пограничный случай первого сравнения (если предыдущего значения нет) и случаев, когда предыдущее значение или текущее значение равно NULL (Ничего в 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))  
    

    Этот код помогает избежать исключений во время выполнения. Теперь можно использовать выражение, например =IIF(Me.Value < 0, "red", "black") в свойстве Color текстового поля, для условного отображения текста на основе того, больше или меньше 0.

Следующие шаги