Código personalizado en las expresiones de un informe paginado en Power BI Report Builder

SE APLICA A: Power BI Report Builder Power BI Desktop

Puede usar código personalizado insertado en un informe. El código incrustado se utiliza en constantes, funciones complejas o funciones personalizadas que se usan varias veces en un único informe. El código personalizado puede incluir nuevas constantes, variables, funciones o subrutinas personalizadas. Puede incluir referencias de solo lectura en las colecciones integradas, como la colección Parameters. Sin embargo, no puede pasar conjuntos de valores de datos de informe a las funciones personalizadas; concretamente, no se admiten agregados personalizados.

Nota:

Los ensamblados personalizados no se admiten en informes paginados en Power BI. Considere la posibilidad de convertir la lógica del ensamblado personalizado al código incrustado. Para obtener ejemplos de alternativas a considerar, compruebe las alternativas de ensamblado.

Importante

Para cálculos dependientes del tiempo que se evalúan una sola vez en tiempo de ejecución y cuyo valor desea conservar a lo largo del procesamiento del informe, considere la posibilidad de usar una variable de informe o una variable de grupo. Para obtener más información, vea Referencias a colecciones de variables de informe y de grupo (Power BI Report Builder).

Inclusión de referencias a funciones de uso frecuente

Use el cuadro de diálogo Expresión para ver una lista organizada por categorías de las funciones más comunes integradas en el Generador de informes. Si expande Funciones comunes y selecciona una categoría, el panel Elemento muestra la lista de funciones que puede incluir en una expresión. En las funciones comunes se incluyen clases de los espacios de nombres Math y Convert de .NET Framework, así como funciones de biblioteca en tiempo de ejecución de Visual Basic. Para mayor comodidad, puede ver las funciones de uso más frecuente en el cuadro de diálogo Expresión , donde aparecen agrupadas por categorías: Texto, Fecha y hora, Matemáticas, Inspección, Flujo de programa, Agregado, Finanzas, Conversión y Varios. Las funciones de uso menos frecuente no aparecen en la lista, pero se pueden usar en una expresión.

Para usar una función integrada, haga doble clic en el nombre de la función en el panel Elemento. En el panel Descripción, aparece una descripción de la función; en el panel Ejemplo, aparece un ejemplo de la llamada a la función. En el panel de código, al escribir el nombre de la función seguido por un paréntesis izquierdo ( , la Ayuda de IntelliSense muestra la sintaxis válida para la llamada a la función. Por ejemplo, para calcular el valor máximo de un campo denominado Quantity en una tabla, agregue la expresión simple =Max( al panel de código y, a continuación, use las etiquetas inteligentes para ver todas las posibles sintaxis válidas para la llamada a la función. Para completar este ejemplo, escriba =Max(Fields!Quantity.Value).

Para más información sobre cada función, vea Math, Converty Miembros de la biblioteca en tiempo de ejecución de Visual Basic en MSDN.

Inclusión de referencias a funciones de uso menos frecuente

Para incluir una referencia a otros espacios de nombres de CLR de uso menos frecuente es necesario usar una referencia completa (por ejemplo, StringBuilder. IntelliSense no se admite en el panel de código del cuadro de diálogo Expresión para estas funciones menos frecuentes.

Para obtener más información, vea Miembros de la biblioteca en tiempo de ejecución de Visual Basic en MSDN.

Inclusión de código incrustado

Para agregar código incrustado a un informe, use la pestaña Código del cuadro de diálogo Propiedades del informe . El bloque de código que cree puede contener varios métodos. Es imprescindible que los métodos en el código incrustado estén escritos en Microsoft Visual Basic y se basen en instancias. El procesador de informes agrega automáticamente referencias para los espacios de nombres System.Convert y System.Math.

Los métodos del código incrustado están disponibles a través del miembro Code definido globalmente. Para poder acceder a ellos, se hace referencia al miembro Code y al nombre del método. En el siguiente ejemplo, se llama al método ToUSD, que convierte el valor del campo StandardCost en un valor en dólares:

=Code.ToUSD(Fields!StandardCost.Value)

Para hacer referencia a colecciones integradas en el código personalizado, incluya una referencia al objeto integrado Report :

=Report.Parameters!Param1.Value

En los ejemplos siguientes se muestra cómo definir algunas constantes y variables personalizadas.

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

Aunque las constantes personalizadas no aparecen en la categoría Constantes del cuadro de diálogo Expresión (que solo muestra las constantes integradas), se pueden agregar referencias a ellas desde cualquier expresión, como se muestra en los ejemplos siguientes. En una expresión, una constante personalizada se trata como Variant.

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

En el ejemplo siguiente se incluyen tanto la referencia a código como la implementación en el código de la función FixSpelling, que sustituye por el texto "Bicycle" todas las repeticiones del texto "Bike" en el campo SubCategory .

=Code.FixSpelling(Fields!SubCategory.Value)

Cuando el código siguiente se incrusta en un bloque de código de la definición de informe, muestra una implementación del método FixSpelling . En este ejemplo se muestra cómo usar una referencia completa a la clase StringBuilder de 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

Para obtener más información sobre las colecciones de objetos integradas, vea Referencias de usuarios y globales integradas (Power BI Report Builder).

Inclusión de referencias a parámetros desde el código

Puede hacer referencia a la colección de parámetros globales mediante código personalizado en un bloque de código de la definición del informe. La colección Parameters es de solo lectura y no tiene iteradores públicos. No se puede usar una construcción For Each de Visual Basic para recorrer la colección. Debe conocer el nombre del parámetro definido en la definición de informe para poder hacer referencia a él en el código. Pero puede recorrer en iteración todos los valores de un parámetro de varios valores.

En la tabla siguiente se incluyen ejemplos de referencias a la colección integrada Parameters desde código personalizado:

Pasa la totalidad de la colección global Parameters al código personalizado.

Esta función devuelve el valor de un parámetro de informe determinado, MyParameter.

Referencia en la expresión =Code.DisplayAParameterValue(Parameters)

Definición del código personalizado

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

Pasa un parámetro individual al código personalizado.

Referencia en la expresión =Code.ShowParametersValues(Parameters!DayOfTheWeek)

En este ejemplo se devuelve el valor del parámetro pasado. Si el parámetro es un parámetro de varios valores, la cadena devuelta es una concatenación de todos los valores.

Definición del código personalizado

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

Pasos siguientes