Compartir vía


Ejemplos de expresiones en informes paginados del Generador de informes

Se aplica a: Generador de informes de Microsoft (SSRS) Power BI Report Builder Diseñador de informes en SQL Server Data Tools

Las expresiones se usan con frecuencia en los informes paginados para controlar el contenido y su apariencia. Las expresiones se escriben en Microsoft Visual Basic y pueden usar funciones integradas, código personalizado, variables de informe y grupo, y variables definidas por el usuario. Las expresiones comienzan con un signo igual (=). Para más información sobre el editor de expresiones y los tipos de referencias que se pueden incluir, vea Usos de expresiones en informes paginados (Generador de informes) y Adición de una expresión a un informe paginado (Generador de informes).

Importante

Cuando se habilita el espacio seguro para RDL, solo puede usar algunos tipos y miembros en el texto de la expresión en el tiempo de publicación del informe. Para obtener más información, consulte Habilitar y deshabilitar el espacio seguro para RDL para Reporting Services en el modo integrado de SharePoint.

Para obtener ejemplos de expresiones para usos específicos, consulte los siguientes artículos:

Para más información sobre las expresiones simples y complejas, dónde se pueden usar las expresiones y los tipos de referencias que se pueden incluir en una expresión, consulte los artículos que se encuentran en Expresiones en un informe paginado (Generador de informes). Para más información sobre el contexto donde se evalúan las expresiones para calcular agregados, consulte Ámbito de expresión para los totales, agregados y colecciones integradas en un informe paginado (Generador de informes).

Para aprender a escribir expresiones que usan muchas de las funciones y operadores que también se usan en los ejemplos de expresiones de este tema, consulte Tutorial: Introducción de expresiones.

Funciones

Muchas expresiones de un informe contienen funciones. Con estas funciones, se puede dar formato a los datos, aplicar lógica y obtener acceso a los metadatos del informe. Puede escribir expresiones que usen funciones de la biblioteca en tiempo de ejecución de Microsoft Visual Basic y de los espacios de nombres Convert y Math. Puede agregar referencias a las funciones desde otros ensamblados o desde código personalizado. También puede usar las clases de Microsoft .NET Framework, incluida System.Text.RegularExpressions.

funciones de Visual Basic

Puede usar funciones de Visual Basic para manipular los datos que se muestran en los cuadros de texto o sus parámetros, las propiedades u otras áreas del informe. En esta sección se ofrecen ejemplos de algunas de estas funciones. Para más información, consulte Miembros de la biblioteca en tiempo de ejecución de Visual Basic.

.NET Framework proporciona muchas opciones de formato personalizado, por ejemplo, formatos de fecha específicos.

Funciones matemáticas

  • La función Round es útil para redondear números al entero más cercano. La expresión siguiente redondea 1,3 a 1:

    = Round(1.3)  
    

    También puede escribir una expresión para redondear un valor al múltiplo que usted especifique, de forma similar a la función MRound de Excel. Con esta función, puede multiplicar un valor por un factor que crea un entero, redondee el número y, a continuación, divida por el mismo factor. Por ejemplo, para redondear 1,3 al múltiplo más cercano de 0,2 (1,4), utilice la siguiente expresión:

    = Round(1.3*5)/5  
    

Funciones de fecha

  • La función Today proporciona la fecha actual. Esta expresión puede utilizarse en un cuadro de texto para mostrar la fecha en el informe o puede utilizarse en un parámetro para filtrar los datos por la fecha actual:

    =Today()  
    
  • Use la función DateInterval para extraer una parte específica de una fecha. Estos son algunos parámetros válidos de DateInterval:

    • DateInterval.Second

    • DateInterval.Minute

    • DateInterval.Hour

    • DateInterval.Weekday

    • DateInterval.Day

    • DateInterval.DayOfYear

    • DateInterval.WeekOfYear

    • DateInterval.Month

    • DateInterval.Quarter

    • DateInterval.Year

      Por ejemplo, esta expresión mostrará el número de la semana del año actual del día de hoy:

      =DatePart(DateInterval.WeekOfYear, today()) 
      
  • La función DateAdd es útil para suministrar un rango de fechas basado en un solo parámetro. La expresión siguiente proporciona una fecha que es seis meses posterior a la fecha de un parámetro denominado StartDate:

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)  
    
  • La función Year muestra el año correspondiente a una fecha determinada. Esta función puede utilizarse para agrupar las fechas o para mostrar el año como etiqueta para un conjunto de fechas. Esta expresión proporciona el año correspondiente a un determinado grupo de fechas de pedidos de venta. También es posible utilizar la función Month y otras funciones para manipular las fechas:

    =Year(Fields!OrderDate.Value)  
    
  • Puede combinar las funciones en una expresión para personalizar el formato. La siguiente expresión cambia el formato día/mes/año de una fecha a número de la semana/semana/mes. Por ejemplo, 12/23/2009 en December Week 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  
    

    Cuando se utiliza como un campo calculado en un conjunto de datos, puede utilizar esta expresión en un gráfico para agregar los valores por semana dentro de cada mes.

  • La siguiente expresión da formato al valor SellStartDate como MMM-AA. El campo SellStartDate es un tipo de datos de fecha y hora:

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • La siguiente expresión da formato al valor SellStartDate como dd/MM/aaaa. El campo SellStartDate es un tipo de datos de fecha y hora:

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • La función CDate convierte el valor en una fecha. La función Now devuelve un valor de fecha que contiene la fecha y la hora actuales del sistema. DateDiff devuelve un valor de tipo Long que especifica el número de intervalos de tiempo entre dos valores de fecha.

    El ejemplo siguiente muestra la fecha de inicio del año en curso:

    =DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
    
  • El ejemplo siguiente muestra la fecha de inicio del mes anterior en función del mes actual:

    =DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
    
  • La siguiente expresión genera los años en el intervalo entre SellStartDate y LastReceiptDate. Estos campos están en dos conjuntos de datos distintos, DataSet1 y DataSet2. Funciones del Generador de informes: función First en un informe paginado (Generador de informes), que es una función de agregado, devuelve el primer valor de SellStartDate en DataSet1 y el primer valor de LastReceiptDate en DataSet2:

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • La función DatePart devuelve un valor Integer que contiene el componente especificado de un valor Date dado. La siguiente expresión devuelve el año para el primer valor de SellStartDate en DataSet1. Se especifica el ámbito del conjunto de datos porque hay varios conjuntos de datos en el informe:

    =Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  
    
    
  • La función DateSerial devuelve un valor de fecha que representa un año, un mes y un día especificados, con la información de hora establecida en medianoche. El ejemplo siguiente muestra la fecha final del mes anterior en función del mes actual:

    =DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
    
  • Las siguientes expresiones muestran varias fechas según un valor de parámetro de fecha seleccionado por el usuario:

Descripción de ejemplo Ejemplo
Ayer =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
Hace dos días =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
Hace un mes =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
Hace dos meses =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
Hace un año =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
Hace dos años =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))

Funciones de cadena

  • Combine más de un campo mediante el uso de operadores de concatenación y constantes de Visual Basic. La expresión siguiente devuelve dos campos, cada uno de ellos en una línea diferente del mismo cuadro de texto:

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value   
    
  • Aplique formato a las fechas y los números de una cadena con la función Format . La expresión siguiente muestra los valores de los parámetros StartDate y EndDate en formato de fecha larga:

    =Format(Parameters!StartDate.Value, "D") & " through " &  Format(Parameters!EndDate.Value, "D")    
    

    Si el cuadro de texto solo contiene una fecha o un número, necesitará usar la propiedad Format del cuadro de texto para aplicar formato, en lugar de usar la función Format dentro del cuadro de texto.

  • Las funciones Right, Lene InStr son útiles para devolver una subcadena (por ejemplo, para reducir DOMAIN\username a solo el nombre de usuario). La siguiente expresión devuelve la parte de la cadena situada a la derecha de una barra diagonal inversa (\) en un parámetro llamado User:

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

    La siguiente expresión da como resultado el mismo valor que el anterior, usando los miembros de la clase String de .NET Framework en lugar de funciones de Visual Basic:

    =Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("\")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("\")-1)  
    
  • Muestre los valores seleccionados en un parámetro de varios valores. En el ejemplo siguiente, se usa la función Join para concatenar los valores seleccionados del parámetro MySelection en una sola cadena que se podrá establecer como una expresión para el valor de un cuadro de texto en un elemento de informe:

    = Join(Parameters!MySelection.Value)  
    

    El ejemplo siguiente hace lo mismo que el ejemplo anterior y muestra una cadena de texto antes de la lista de valores seleccionados:

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • Las funciones Regex de la clase System.Text.RegularExpressions de .NET Framework son útiles para cambiar el formato de cadenas existentes, por ejemplo, para dar formato a un número de teléfono. La expresión siguiente usa la función Replace para cambiar el formato de un número de teléfono de un campo de "nnn-nnn-nnnn" a "(nnn) nnn-nnnn":

    =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")  
    

    Nota:

    Compruebe que el valor de Fields!Phone.Value no tiene espacios adicionales y es del tipo String.

Búsqueda

  • Al especificar un campo clave, puede usar la función Lookup para recuperar un valor de un conjunto de datos para una relación uno a uno (por ejemplo, un par clave-valor). En la expresión siguiente se muestra el nombre de producto de un conjunto de datos llamado Producto, según el identificador de producto con el que se va a realizar la coincidencia:

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

LookupSet

  • Al especificar un campo clave, puede usar la función LookupSet para recuperar un conjunto de valores de un conjunto de datos para una relación uno a varios. Por ejemplo, una persona puede tener varios números de teléfono. En el siguiente ejemplo, suponga que el conjunto de datos PhoneList contiene un identificador de persona y un número de teléfono en cada fila. LookupSet devuelve una matriz de valores. La siguiente expresión combina los valores devueltos en una sola cadena y muestra la lista de números de teléfono de la persona especificada por ContactID:

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

Funciones de conversión

Puede usar funciones de Visual Basic para convertir un campo de un tipo de datos a otro. Puede usar las funciones de conversión para convertir el tipo de datos predeterminado de un campo en el tipo de datos necesario para realizar cálculos o para combinar texto.

  • La expresión siguiente convierte la constante 500 al tipo Decimal con el fin de compararla con un tipo de datos monetario de Transact-SQL en el campo Value de una expresión de filtro:

    =CDec(500)  
    
  • La expresión siguiente muestra el número de valores seleccionados para el parámetro de varios valores MySelection:

    =CStr(Parameters!MySelection.Count)  
    

Funciones de decisión

  • La función IIF devuelve uno de dos valores dependiendo de si la expresión es cierta o no. La siguiente expresión utiliza la función IIF para devolver un valor booleano True si el valor de LineTotal es superior a 100. De lo contrario, la expresión devuelve un valor “False”:

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • Use varias funciones IIF (lo que también se conoce como "instrucciones IIF anidadas") para devolver uno de tres valores dependiendo del valor de PctComplete. La expresión siguiente puede situarse en el color de relleno de un cuadro de texto para cambiar el color de fondo en función del valor existente en dicho cuadro de texto:

    =IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))  
    

    Los valores mayores o iguales a 10 se muestran con un fondo verde. Los valores entre uno y nueve se muestran con un fondo azul. Los valores inferiores a uno se muestran con un fondo rojo.

  • Otra forma de obtener la misma funcionalidad es con la función Switch . La función Switch resulta de gran utilidad cuando se necesita probar tres condiciones o más. La función Switch devuelve el valor asociado a la primera expresión en una serie que se evalúa como TRUE:

    =Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red")  
    

    Los valores mayores o iguales a 10 se muestran con un fondo verde. Los valores entre uno y nueve se muestran con un fondo azul. Los valores iguales a uno se muestran con un fondo amarillo. Los valores iguales a 0 o inferiores se muestran con un fondo rojo.

  • Prueba el valor del campo ImportantDate y devuelve "Red" si tiene más de una semana de antigüedad o "Blue" en caso contrario. Esta expresión puede utilizarse para controlar la propiedad Color de un cuadro de texto en un elemento de informe:

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")  
    
  • Prueba el valor del campo PhoneNumber y devuelve "No Value" si es un valor nulo, llamado Nothing en Visual Basic. De lo contrario, devuelve el valor del número de teléfono. Esta expresión puede utilizarse para controlar el valor de un cuadro de texto en un elemento de informe:

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)  
    
  • Prueba el valor del campo Department y devuelve un nombre de subinforme o un valor nulo, llamado Nothing en Visual Basic. Esta expresión puede utilizarse con subinformes detallados condicionales:

    =IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)  
    
  • Comprueba si el valor de un campo es un valor nulo. Esta expresión puede usarse para controlar la propiedad Hidden de un elemento de informe de imagen. En el ejemplo siguiente, la imagen especificada por el campo LargePhoto se muestra solamente si el valor del campo no es un valor nulo:

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
    
  • La función MonthName devuelve un valor de cadena que contiene el nombre del mes especificado. El ejemplo siguiente muestra NA en el campo Month si el campo contiene el valor 0:

    IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  
    
    

Funciones de informe

En una expresión, puede agregar una referencia a más funciones de informe que manipulan datos de un informe. En esta sección, se ofrecen ejemplos de dos de estas funciones. Para obtener más información sobre funciones y ejemplos de informes, consulte Funciones del Generador de informes: referencia de funciones de agregado en informes paginados (Generador de informes).

Sum

  • La función Sum puede calcular el total de los valores de un grupo o de una región de datos. Esta función puede resultar útil en el encabezado o en el pie de página de un grupo. La expresión siguiente muestra la suma de los datos del grupo o de la región de datos Order:

    =Sum(Fields!LineTotal.Value, "Order")  
    
  • También puede usar la función Sum para calcular agregados condicionales. Por ejemplo, imagine que tiene un conjunto de datos que tiene un campo denominado State con los posibles valores Not Started, Started y Finished. La expresión siguiente, cuando se coloca en un encabezado de grupo, calcula la suma agregada solo para el valor Finished:

    =Sum(IIF(Fields!State.Value = "Finished", 1, 0))  
    

RowNumber

  • La función RowNumber , cuando se utiliza en un cuadro de texto de una región de datos, muestra el número de fila de cada instancia del cuadro de texto en que aparece la expresión. Esta función puede ser de utilidad para numerar las filas de una tabla. También puede resultar útil para tareas más complejas, como proporcionar saltos de página según el número de filas. Para obtener más información, consulte Saltos de página.

    El ámbito que especifique para RowNumber controlará cuándo comienza la nueva numeración. La palabra clave Nothing indica que la función empieza a contar desde la primera fila de la región de datos más externa. Para empezar a contar en regiones de datos anidadas, utilice el nombre de la región de datos. Para empezar a contar en un grupo, utilice el nombre del grupo:

    =RowNumber(Nothing)  
    

Apariencia de los datos del informe

Pueden utilizarse expresiones para manipular la apariencia de los datos en el informe. Por ejemplo, se pueden mostrar los valores de dos campos en un solo cuadro de texto, se puede mostrar información acerca del informe o se puede influir en el modo en que se insertan los saltos de página en el informe.

Encabezados y pies de página

Cuando se diseña un informe, existe la posibilidad de mostrar el nombre del informe y el número de página en el pie del informe. Puede usar las siguientes expresiones:

  • La siguiente expresión proporciona el nombre del informe y la hora a la que se ejecutó. Puede colocarse en un cuadro de texto en el pie de página o en el cuerpo del informe. La fecha y hora se presenta con el formato de fecha corta de .NET Framework:

    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")  
    
  • La siguiente expresión, situada en un cuadro de texto en el pie de página de un informe, devuelve el número de página y el total de páginas del informe:

    =Globals.PageNumber & " of " & Globals.TotalPages  
    

En los ejemplos siguientes, se indica cómo mostrar el primer y el último valor de una página en el encabezado de página, de manera similar a lo que aparece en una lista de directorios. En el ejemplo se da por hecho que una región de datos contiene un cuadro de texto llamado LastName.

  • La siguiente expresión se sitúa en un cuadro de texto en el lado izquierdo del encabezado de página y proporciona el primer valor del cuadro de texto LastName en la página:

    =First(ReportItems("LastName").Value)  
    
  • La siguiente expresión se sitúa en un cuadro de texto en el lado derecho del encabezado de página y proporciona el último valor del cuadro de texto LastName en la página:

    =Last(ReportItems("LastName").Value)  
    
  • En el ejemplo siguiente, se indica cómo incluir un total para la página. En el ejemplo se da por hecho que una región de datos contiene un cuadro de texto llamado Cost. Cuando situa la siguiente expresión en el encabezado o pie de página, proporciona la suma de los valores del cuadro de texto Cost de la página:

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

Nota:

Solamente puede hacerse referencia a un elemento de informe por expresión en un encabezado o pie de página. Asimismo, puede hacer referencia al nombre del cuadro de texto, pero no a la expresión de datos real del cuadro de texto, en expresiones de encabezado y de pie de página.

Saltos de página

Es posible que en algunos informes se desee insertar un salto de página al final de un número de filas determinado, en lugar de (o además de) en los grupos o elementos de informe. Cree un grupo que contenga los grupos o registros de detalles que desee. Agregue un salto de página al grupo y, a continuación, agregue una expresión de grupo al grupo por un número especificado de filas.

  • Si se coloca la expresión siguiente en la expresión de grupo, se asigna un número a cada conjunto de 25 filas. Cuando se define un salto de página para el grupo, el resultado de la expresión es un salto de página cada 25 filas:

    =Ceiling(RowNumber(Nothing)/25)  
    

    Para que el usuario pueda establecer el número de filas por página, cree un parámetro llamado RowsPerPage y base la expresión de grupo en el parámetro, tal y como se muestra en la siguiente expresión:

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

    Para más información sobre cómo configurar saltos de página para un grupo, consulte Adición de un salto de página a un informe paginado (Generador de informes).

Propiedades

Las expresiones no se usan únicamente para mostrar datos en cuadros de texto. También se pueden utilizar para cambiar el modo en que se aplican las propiedades a los elementos de informe. Es posible cambiar la información de estilo de un elemento de informe o modificar su visibilidad.

Formato

  • Cuando se utiliza en la propiedad Color de un cuadro de texto, la siguiente expresión cambia el color del texto según el valor del campo Profit:

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

    También puede usar la variable de objeto de Visual Basic Me. Esta variable es otra manera de hacer referencia al valor de un cuadro de texto.

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

  • Cuando se utiliza en la propiedad BackgroundColor de un elemento de informe en una región de datos, la siguiente expresión alterna el color de fondo de cada fila entre verde claro y blanco:

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

    Si usa una expresión para un ámbito especificado, es posible que tenga que indicar el conjunto de datos para la función de agregado:

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

Nota:

Los colores disponibles son los de la enumeración KnownColor de .NET Framework.

Colores de gráfico

Para especificar los colores de un gráfico Shape, puede usar código personalizado que le permita controlar el orden en que los colores se asignan a los valores de los puntos de datos. Este código personalizado le permitirá usar colores coherentes para varios gráficos que tienen los mismos grupos de categorías. Para obtener más información, consulte Especificación de colores coherentes en varios gráficos de formas en un informe paginado (Generador de informes).

Visibilidad

Es posible mostrar y ocultar los elementos de un informe mediante las propiedades de visibilidad del elemento de informe. En una región de datos, como una tabla, se pueden ocultar inicialmente las filas de detalles basándose en el valor de una expresión.

  • Cuando se usa para la visibilidad inicial de las filas de detalles de un grupo, la siguiente expresión muestra las filas de detalles de todas las ventas que superen el 90 por ciento en el campo PctQuota:

    =Iif(Fields!PctQuota.Value>.9, False, True)  
    
  • Cuando se establece en la propiedad Hidden de una tabla, la siguiente expresión muestra la tabla solo si tiene más de 12 filas:

    =IIF(CountRows()>12,false,true)  
    
  • La expresión siguiente, cuando se establece en la propiedad Hidden de una columna, muestra la columna solo si el campo existe en el conjunto de datos de informe después de haber recuperado los datos del origen de datos:

    =IIF(Fields!Column_1.IsMissing, true, false)  
    

Puede personalizar direcciones URL con los datos de informe y, además, controlar de manera condicional si las dichas direcciones URL se agregan como acciones para un cuadro de texto.

  • Cuando se usa como una acción en un cuadro de texto, la siguiente expresión genera una dirección URL personalizada que especifica el campo de conjunto de datos EmployeeID como un parámetro de dirección URL:

    ="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value  
    

    Para obtener más información, consulte Adición de un hipervínculo a una URL en un informe paginado (Generador de informes).

  • La expresión siguiente controla de forma condicional si debe agregarse una dirección URL a un cuadro de texto. Esta expresión depende de un parámetro llamado IncludeURLs que permite al usuario decidir si desea incluir direcciones URL activas en un informe. Esta expresión se establece como acción en un cuadro de texto. Si se establece el parámetro en FALSE y, a continuación, se visualiza el informe, puede exportar el informe a Microsoft Excel sin hipervínculos:

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

datos de informe

Pueden utilizarse expresiones para manipular los datos que se usan en el informe. Se puede hacer referencia a parámetros y a otra información del informe. Incluso se puede modificar la consulta que se usa para recuperar datos para el informe.

Parámetros

Pueden utilizarse expresiones en un parámetro para modificar su valor predeterminado. Por ejemplo, puede usar un parámetro que filtre datos para un usuario determinado basándose en el identificador de usuario con el que se ejecuta el informe.

  • La siguiente expresión, cuando se usa como valor predeterminado para un parámetro, obtiene el identificador de usuario de la persona que ejecuta el informe:

    =User!UserID  
    
  • Para hacer referencia a un parámetro en un parámetro de consulta, una expresión de filtro, un cuadro de texto u otras áreas del informe, use la colección global Parameters . En este ejemplo se da por supuesto que el parámetro se denomina Department:

    =Parameters!Department.Value  
    
  • Pueden crearse parámetros en un informe y establecerse como ocultos. Cuando se ejecuta el informe en el servidor de informes, el parámetro no aparece en la barra de herramientas y el lector del informe no puede cambiar el valor predeterminado. Puede usar un parámetro oculto establecido en un valor predeterminado como constante personalizada. Puede usar este valor en cualquier expresión, incluida una expresión de campo. La expresión siguiente identifica el campo especificado por el valor de parámetro predeterminado para el parámetro denominado ParameterField:

    =Fields(Parameters!ParameterField.Value).Value  
    

Código personalizado

En un informe, puede utilizarse código personalizado. El código personalizado puede incrustarse en el informe o puede almacenarse en un ensamblado personalizado que se utilice en el informe. Para más información sobre código personalizado, vea Referencias a ensamblados y código personalizado en expresiones en un informe paginado en el Diseñador de informes (SSRS).

Uso de variables de grupo para la agregación personalizada

Puede inicializar el valor de una variable de grupo local en un ámbito de grupo determinado y, a continuación, incluir una referencia a esa variable en expresiones. Una forma de usar una variable de grupo con código personalizado es implementar un agregado personalizado. Para obtener más información, vea Uso de variables de grupo en Reporting Services 2008 para agregados personalizados.

Para obtener más información sobre variables, consulte Referencias a las variables de informe y de grupo en un informe paginado (Generador de informes).

Supresión de valores null o cero en tiempo de ejecución

Algunos valores de una expresión pueden evaluarse como NULL o como indefinidos durante el procesamiento del informe. Estos valores pueden provocar errores en tiempo de ejecución que hacen que en el cuadro de texto se muestre “#Error” en lugar de la expresión evaluada. La función IIF es sensible a este comportamiento. A diferencia de lo que ocurre en una instrucción If-Then-Else, se evalúa cada una de las partes de la instrucción IIF, incluidas las llamadas a función, antes de que se pasen a la rutina que comprueba si es TRUE o FALSE. La instrucción =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value) genera “#Error” en el informe representado si Fields!Sales.Value es un valor Nothing.

Para evitar esta condición, use una de las estrategias siguientes:

  • Defina el numerador como 0 y el denominador como 1 si el valor del campo B es 0 o no definido. De lo contrario, defina el numerador con el valor del campo A y el denominador con el valor del campo B:

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))  
    
  • Use una función de código personalizado para devolver el valor de la expresión. En el ejemplo siguiente, se devuelve la diferencia porcentual entre un valor actual y un valor anterior. Este valor se puede usar para calcular la diferencia entre dos valores sucesivos. Controla el caso perimetral de la primera comparación cuando no hay ningún valor previo y funciona en casos si el valor anterior o el valor actual es un valor nulo, denominado Nothing en 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  
    

    En la expresión siguiente se muestra cómo llamar a este código personalizado desde un cuadro de texto, para el contenedor "ColumnGroupByYear", un grupo o región de datos:

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))  
    

    Este código ayuda a evitar las excepciones de tiempo de ejecución. Ahora puede usar una expresión como =IIF(Me.Value < 0, "red", "black") en la propiedad Color del cuadro de texto para mostrar de forma condicional el texto según si los valores son mayores o menores que 0.