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


Пользовательский код в выражениях в отчете с разбивкой на страницы в Power BI построитель отчетов

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

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

Примечание.

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

Внимание

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

Включение ссылок на часто используемые функции

Для просмотра упорядоченного по категориям списка часто используемых функций, встроенных в построитель отчетов, используется диалоговое окно Выражение . При развертывании общих функций и выборе категории в области "Элемент" отображается список функций, которые вы включаете в выражение. Общие функции включают классы из пространств имен Math и Convert .NET Framework, а также функции из библиотек времени выполнения Visual Basic. Для удобства существует просмотр в диалоговом окне Выражение наиболее часто используемых функций, где они перечислены по категориям: текст, дата и время, математические, проверка, программный поток, статистическая обработка, финансовые, преобразование и прочие. Менее часто используемые функции не отображаются в списке, но тем не менее могут использоваться в выражении.

Для использования встроенной функции дважды щелкните имя функции на панели "Элемент". Описание функции появится на панели «Описание», а пример вызова функции отобразится в панели «Пример». При вводе имени функции с левой скобкой (в области кода справка IntelliSense отобразит все допустимые формы синтаксиса для вызова функции. Например, чтобы вычислить максимальное значение для поля с именем Quantity в таблице, добавьте простое выражение =Max( в панель кода и затем используйте смарт-теги для просмотра всех возможных действительных синтаксисов для вызова функции. Чтобы завершить этот пример, введите =Max(Fields!Quantity.Value).

Дополнительные сведения о каждой функции см. в описании Math, Convertи в статье Компоненты библиотеки Visual Basic времени выполнения на сайте MSDN.

Включение ссылок на менее часто используемые функции

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

Дополнительные сведения см. в разделе Компоненты библиотеки времени выполнения Visual Basic в MSDN.

Включение внедренного кода

Чтобы добавить внедренный код в отчет, используйте вкладку «Код» диалогового окна Свойства отчета . Этот созданный блок кода может содержать несколько методов. Методы в внедренном коде должны быть написаны в Microsoft Visual Basic и должны быть основаны на экземплярах. Обработчик отчетов автоматически добавляет ссылки на пространства имен System.Convert и System.Math.

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

=Code.ToUSD(Fields!StandardCost.Value)

Чтобы сослаться на встроенные коллекции в пользовательском коде, включите ссылку во встроенный объект Report :

=Report.Parameters!Param1.Value

В следующих примерах показано, как можно определить некоторые пользовательские константы и переменные:

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.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

Следующий пример содержит ссылку на код и код реализации функции FixSpelling, которая подставляет текст "Bicycle" вместо всех вхождений текста «Bike» в поле SubCategory .

=Code.FixSpelling(Fields!SubCategory.Value)

Следующий код показывает реализацию метода FixSpelling при его внедрении в блок кода определения отчета. Этот пример демонстрирует использование полной ссылки на класс StringBuilder Microsoft .NET Framework.

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")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

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

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

Вы можете ссылаться на коллекцию глобальных параметров с помощью пользовательского кода в блоке кода определения отчета. Коллекция параметров допускает только чтение, и у нее нет общих итераторов. Конструкцию For Each Visual Basic нельзя использовать для пошагового перебора коллекции. Прежде чем сослаться на параметр из своего кода, необходимо узнать его имя, заданное в определении отчета. Однако можно организовать итерацию по всем значениям многозначного параметра.

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

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

Эта функция возвращает значение конкретного параметра отчета MyParameter.

Ссылки в выражении =Code.DisplayAParameterValue(Parameters)

Определение пользовательского кода

Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object
Return parameters("MyParameter").Value
End Function

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

Ссылки в выражении =Code.ShowParametersValues(Parameters!DayOfTheWeek)

Этот пример возвращает значение переданного параметра. Если этот параметр является многозначным, возвращаемая строка представляет собой объединение всех значений.

Определение пользовательского кода

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String
   If parameter.IsMultiValue then
      s = "Multivalue: "
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " "
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

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