Ejemplos de expresiones en Reporting Services

Algunas expresiones se utilizan con frecuencia en los informes. Entre ellas, se incluyen las que cambian la apariencia de los datos de un informe, las que cambian las propiedades de los elementos de informe y las que afectan al modo en que se recuperan los datos. En este tema, se describen algunas de las expresiones que se pueden utilizar para tareas comunes en un informe. Para obtener más información, vea Crear expresiones en Reporting Services.

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 utilicen funciones de la biblioteca de tiempo de ejecución de Visual Basic y de los espacios de nombres System.Convert y System.Math. Puede agregar referencias a funciones desde otros ensamblados o desde código personalizado. También puede utilizar clases de Microsoft .NET Framework, incluida System.Text.RegularExpressions. Para obtener más información acerca de las funciones de Visual Basic que admiten las expresiones, vea el tema sobre la biblioteca de tiempo de ejecución de Visual Basic en msdn.microsoft.com.

Funciones de Visual Basic

Es posible utilizar funciones de Microsoft Visual Basic para manipular los datos que se muestran en los cuadros de texto o que se utilizan para parámetros, propiedades u otras áreas del informe. En esta sección se ofrecen ejemplos de algunas de estas funciones. Para obtener más información acerca de las funciones de Visual Basic, vea la documentación de Visual Basic.

Funciones de fecha

Se pueden utilizar funciones de Visual Basic para proporcionar información de fecha en el informe.

  • La siguiente expresión contiene la función Today, que proporciona la fecha actual. Esta expresión se puede utilizar en un cuadro de texto para mostrar la fecha en el informe o se puede utilizar en un parámetro para filtrar los datos por la fecha actual.

    =Today()
    
  • La función DateAdd es útil para suministrar un intervalo de fechas basado en un solo parámetro. La siguiente expresión 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 siguiente expresión contiene la función Year, que muestra el año correspondiente a una fecha determinada. Se puede utilizar para agrupar las fechas o para mostrar el año como etiqueta para un conjunto de fechas. Esta expresión proporciona el año para un grupo dado de fechas de pedido. También se pueden utilizar la función Month y otras funciones para manipular las fechas. Para obtener más información, vea la documentación de Visual Basic .NET.

    =Year(Fields!OrderDate.Value)
    

Funciones de cadena

Se pueden utilizar funciones de Visual Basic para manipular las cadenas en el informe.

  • Se puede combinar más de un campo con operadores de concatenación y constantes de Visual Basic. La expresión siguiente devuelve dos campos, cada uno de ellos en una línea separada del mismo cuadro de texto.

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 
    
  • Se puede aplicar formato a las fechas y los números de una cadena con la función Format. La siguiente expresión 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 sólo contiene una fecha o un número, para aplicar formato se debe utilizar la propiedad Format del cuadro de texto en lugar de usar la función Format dentro del cuadro de texto.

  • Las funciones Right, Len e InStr son útiles para devolver una subcadena; por ejemplo, para reducir DOMINIO\nombreDeUsuario al nombre de usuario solamente. La siguiente expresión devuelve la parte de la cadena situada a la derecha de una barra diagonal inversa (\) en un parámetro denominado User:

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

    Con la siguiente expresión, se obtiene el mismo resultado que con la anterior, pero se utilizan 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)
    
  • Se pueden mostrar los valores seleccionados en un parámetro de varios valores. En el ejemplo siguiente se utiliza la función Join para concatenar los valores seleccionados del parámetro MySelection en una sola cadena que se puede establecer como una expresión del valor de un cuadro de texto en un elemento de informe.

    = Join(Parameters!MySelection.Value)
    

    Si el cuadro de texto sólo contiene una fecha o un número, para aplicar formato se debe utilizar la propiedad Format del cuadro de texto en lugar de usar la función Format en el cuadro de texto.

  • Las funciones Regex de la clase System.Text.RegularExpressions de .NET Framework son útiles para cambiar el formato de cadenas existentes; por ejemplo, para aplicar formato a un número de teléfono. La siguiente expresión utiliza la función Reemplazar para cambiar un número de teléfono de diez dígitos de un campo del formato nnn-nnn-nnnn al formato (nnn) nnn-nnnn:

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

Funciones de conversión

Se pueden utilizar funciones de Visual Basic para realizar las conversiones de tipos de datos necesarias en el informe.

  • Se pueden utilizar funciones de Visual Basic para convertir los tipos de datos que sean necesarios. Con frecuencia, se utilizan funciones de conversión para eliminar o aplicar formato a los mensajes #Error de un informe. La siguiente expresión muestra el número de valores seleccionados para el parámetro de varios valores MySelection.

    =CStr(Parameters!MySelection.Count)
    

Funciones de decisión

Se pueden utilizar funciones de Visual Basic para evaluar un valor de entrada y devolver otro valor en función del resultado.

  • La función Iif devuelve uno de dos valores dependiendo de si la expresión evaluada es true o no. En la siguiente expresión, se utiliza la función Iif para devolver un valor booleano True si el valor de LineTotal es mayor que 100. De lo contrario, devuelve False:

    =Iif(Fields!LineTotal.Value > 100, True, False)
    

    En la siguiente expresión, se utilizan varias funciones Iif (también conocidas como "funciones Iif anidadas") para devolver uno de tres valores dependiendo del valor de PctComplete.

    =Iif(Fields!PctComplete.Value >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
    
  • La siguiente expresión también devuelve uno de tres valores según el valor de PctComplete, pero en ella se utiliza la función Switch, que devuelve el valor asociado a la primera expresión de una serie que se evalúe como True:

    =Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
    
  • La expresión siguiente comprueba el valor del campo ImportantDate y devuelve "Red" si es superior a una semana o "Blue" en los demás casos. 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")
    
  • La siguiente expresión comprueba el valor de un campo PhoneNumber para ver si es null (Nothing en Visual Basic) y devuelve "No Value" en lugar del valor nulo. 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)
    
  • La expresión siguiente comprueba el valor del campo Department y devuelve un nombre de informe integrado o un valor null (Nothing en Visual Basic). Esta expresión puede utilizarse con informes integrados de obtención de detalles condicionales.

    =Iif(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
    
  • La expresión siguiente comprueba si un valor de campo es nulo. Esta expresión puede utilizarse para controlar la propiedad Hidden de un elemento de informe de imagen.

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

Funciones de informe

Reporting Services proporciona funciones de informe adicionales que permiten manipular los datos de un informe. En esta sección, se ofrecen ejemplos de dos de estas funciones. Para obtener más información acerca de las funciones de informe y ejemplos, vea Usar funciones de informe en expresiones (Reporting Services).

  • 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 ser útil en el encabezado o pie de un grupo de tablas. La siguiente expresión muestra la suma de datos del grupo o la región de datos Order:

    =Sum(Fields!LineTotal.Value, "Order")
    
  • Una expresión que contiene 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 donde aparezca la expresión. Esta función puede ser de utilidad para numerar las filas de una tabla. También puede ser ú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, vea "Saltos de página" más adelante en este tema.
    La siguiente expresión muestra el número de fila desde la primera fila de la región de datos más externa hasta la última. La palabra clave Nothing indica que la función empezará a contar desde la primera fila de la región de datos más externa. Para empezar a contar en regiones de datos secundarias, utilice el nombre de la región de datos.

    =RowNumber(Nothing)
    

Apariencia de los datos del informe

Se pueden utilizar 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. Para ello, se utilizan 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 hora se presenta con la cadena de formato de .NET Framework para fechas cortas:

    =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 el encabezado o pie de página del informe también se pueden utilizar expresiones para hacer referencia a elementos del cuerpo del informe. 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 supone que existe una región de datos que contiene un cuadro de texto denominado LastName.

  • La siguiente expresión, situada en un cuadro de texto a la izquierda del encabezado de página, proporciona el primer valor del cuadro de texto LastName en la página:

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

    =Last(ReportItems("LastName").Value)
    

Se pueden aplicar agregados a una referencia a un elemento de informe en un encabezado o pie de página. Sin embargo, no se puede aplicar un agregado a una referencia a un elemento de informe en el cuerpo del informe. En el ejemplo siguiente, se indica cómo incluir un total de páginas. En el ejemplo se supone que existe una región de datos que contiene un cuadro de texto denominado Cost.

  • La siguiente expresión, situada en el encabezado o pie de página, proporciona la suma de los valores del cuadro de texto Cost para la página:

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

    [!NOTA] Sólo se puede hacer referencia a un elemento de informe por expresión en un encabezado o 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. Para ello, se crea un grupo en una región de datos (normalmente un grupo inmediatamente externo a los detalles), se agrega un salto de página al grupo y, después, se agrega una expresión de grupo para agrupar por un número de filas específico.

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

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

Propiedades

Las expresiones no sólo se utilizan 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. Se puede cambiar la información de estilo de un elemento de informe o modificar su visibilidad.

Formato

Se pueden utilizar expresiones para modificar la apariencia de los elementos de un informe.

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

    =Iif(Fields!Profit.Value < 0, "Red", "Black")
    
  • La siguiente expresión, cuando se utiliza en la propiedad BackgroundColor de un elemento de informe en una región de datos, alterna el color de fondo de cada fila entre verde claro y blanco:

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

    Si se utiliza una expresión para un ámbito determinado, puede que sea necesario indicar el conjunto de datos para la función de agregado:

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

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.

  • La siguiente expresión, cuando se utiliza para la visibilidad inicial de las filas de detalles de un grupo, 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)
    
  • La siguiente expresión, cuando se establece en la propiedad Oculto de Visibilidad de una tabla, muestra la tabla sólo si tiene más de 12 filas:

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

Datos del informe

Se pueden utilizar 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

Se pueden utilizar expresiones en un parámetro para modificar su valor predeterminado. Por ejemplo, se podría utilizar un parámetro que filtre datos para un usuario determinado basándose en el Id. de usuario con el que se ejecute el informe.

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

    =User!UserID
    
  • Se puede utilizar la siguiente expresión para hacer referencia al parámetro en un parámetro de consulta, expresión de filtro, cuadro de texto u otras áreas del informe. En este ejemplo se supone que el parámetro se denomina User:

    =Parameters!User.Value
    

Código personalizado

En un informe, se puede utilizar código personalizado. El código personalizado se puede incrustar en el informe o se puede almacenar en un ensamblado personalizado que se utilice en el informe. Para obtener más información acerca del código personalizado, vea Usar referencias de código personalizado en expresiones (Reporting Services).

  • En el siguiente ejemplo, se llama al método de código incrustado ToUSD, que convierte el valor del campo StandardCost en un valor de moneda:

    =Code.ToUSD(Fields!StandardCost.Value)
    
  • En el ejemplo siguiente se muestra cómo definir algunas constantes y variables personalizadas.
    [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
    

    Aunque las constantes y variables personalizadas no aparecen en la vista Constantes del Editor de expresiones (que sólo muestra las constantes integradas), se pueden agregar referencias a ellas desde cualquier expresión, como se muestra en los ejemplos siguientes. Se tratan como variantes.
    [Visual Basic]

    =Code.MyNote
    =Code.NCopies 
    =Code.MyVersion
    =Code.MyDoubleVersion
    
  • En el ejemplo siguiente se llama al método de código incrustado FixSpelling, que sustituye todas las apariciones del texto Bike por Bicycle en SubCategory.Value.

    =Code.FixSpelling(Fields!SubCategory.Value)
    

    Cuando el código siguiente se incrusta en una definición de informe, muestra una implementación del método FixSpelling. La primera vez que este código personalizado se ejecute, un cuadro de mensaje mostrará el texto sustituido. Este ejemplo le indica cómo hacer referencia a las clases StringBuilder y System.Windows.Forms.MessageBox de .NET Framework. Debe agregar una referencia a las propiedades del informe para System.Windows.Forms. Para obtener más información, vea Cómo agregar código a un informe (Diseñador de informes) y Cómo agregar una referencia de ensamblado a un informe (Diseñador de informes).
    [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
    

Vea también

Conceptos

Usar funciones de informe en expresiones (Reporting Services)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

14 de abril de 2006

Contenido modificado:
  • Se agregaron ejemplos: expresión regular para número de teléfono; constantes y variables personalizadas; color del cuadro de texto; selección de varios parámetros y recuento de selecciones.
  • Comprobación de valores Null.

5 de diciembre de 2005

Contenido modificado:
  • Se agregó un ejemplo de código personalizado.