SSRS 2008 –> Variables + Custom Code + ReportItems!

Este post es en ayuda para alguien que quiera buscar como trabajar con los datos del reporte sin necesidad de ir otra vez a SQL.

Es decir por ejemplo si quisiera este reporte:

Tipo 1

Característica 1 Característica 2 Característica 3…
valores valores valores
  Total2 Total3

Tipo 2

Característica 1 Característica 2 Característica 3 Característica 4 Característica 5
valores valores valores valores valores
      Total4 Total5

….  (varios tipos dinámicos)

Y desear tener una tabla resumen con todas las sumas de cada tabla ademas de una suma total –> Total3 + Total5 + etc

Tabla Resumen

Total3 valor
Total5 valor
TotalN valor
….
TOTAL valor + valor + …

Si vemos el problema sin mucho conocimiento de SSRS, pues decidiríamos tener un stored procedure que me de cada tipo o que me de todos los tipos y otro que me de la tabla resumen. Yo pienso que eso esta de mas, porque la tabla resumen lo podríamos sacar de los datos ya obtenidos para los tipos…

Tenemos muchas opciones para solucionar esto.. por ejemplo podemos trabajar con las variables de Reporting Services 2008 (una nueva característica), la podemos utilizar dando clic derecho en el grupo.

group clic derecho
Pero aun no encuentro la forma de hacer la tabla resumen solo con variables. (tendríamos que combinarlo con Custom Codes, como lo explico mas a adelante).

group variables

y crear la variable con las expresiones o características que deseamos. Un post que me ayudo mucho en esto si lo deseas utilizar fue http://blogs.msdn.com/robertbruckner/archive/2008/07/20/Using-group-variables-in-reporting-services-2008-for-custom-aggregation.aspx es muy bueno porque te lo muestra paso a paso.

La otra forma posible de hacerlo seria utilizar los reports items, propiedad existente desde la versión 2005, para esto si necesitaría sumar esos totales no es mas que: ReportItems!NombreTotal1.value + ReportItems!NombreTotal2.value + … claro que con las validaciones correspondientes como isNothing o isNumeric, etc. Pero esto tiene un pequeño problema, si los tipos del ejemplo crecen dinámicamente en una lista o en una tabla no podría saber como se llama cada ReportItem. Para ello vamos a la siguiente solución :p …

Finalmente, vamos al tema central :p .. que se llama Custom Code. Para mi esto fue una característica en SSRS 2005 (creo que ya venia desde el 2000) que me saco de serios líos cuando quise sacar una gráfica que no venia con Reporting, entonces utilice algunas librerías gráficas, lo referencie y lo combine con unos custom codes, pero no nos desviemos :p

Para este problema en el Custom Code cree las variables publicas que necesite para almacenar los totales:

Public Valores As New System.Collections.Generic.Dictionary(Of String, Decimal)

luego agregamos el siguiente código para llenar este Dictionary

Public Function InsertarTotal(ByVal Titulo As String, ByVal Mkt As Decimal)
   If (Titulo<>Nothing) then
        If Valores.ContainsKey(Titulo) Then
             Valores(Titulo) = Valores(Titulo) + Mkt
        else
            Valores.add(Titulo,Mkt)
        End If
   End If
   InsertarTotal = 0
End Function

Con esta función almaceno en la lista de datos, indizado con el nombre, así que cada vez que haya un total llamo a la función y se inserta en la lista.

y por cada fila que deseamos agregar el valor colocamos: =  … + code.InsertarTotal(Fields!Titulo.Value,Fields!Mkt.Value)

al final tenemos la lista con los valores y ya los ponemos poner en una tabla:

Usamos la misma consulta que nos dan los resultados, pero con un distintc de los totales

Titulos Valores
=Fields!Titulo.value =code.Valores(Fields!Titulo.value)
   

y con esto solucionamos esto, derrepente parezca sencillo a primera vista pero es un tip que me costo un día averiguarlo :p, espero les sea útil.

ya escribiré hasta el próximo break de la chamba :S

P.D.: Me olvide de comentarles que deben tener mucho cuidado con los totales en diferentes hojas!!! porque el total se pierde si es que no hacen algunos cambios 🙂

2 comentarios en “SSRS 2008 –> Variables + Custom Code + ReportItems!”

  1. Mola el que haya variales…una cosa más a la saca :D!! Gracias

    Una cosa sobre los ReportItems, hay que tener cuidado con ellos al darle formato y luego llamarlos desde otro sitio porque podrían salir valores extraños.

    Algo que nos pasó en un proyecto, fue que yo los llamaba para hacer totates en diferentes tablas y al exportar a excell salía un error :(.

    Buen aporte!!

    Un Saludo

  2. Fran,
    Como le hiciste para llamar para totales en diferentes tablas? Cuando trato me regresa un error que solo quiere referencias a objetos en el grupo. Tienes algun ejemplo?

    Se agradeceria,

    Desde Arizona U.S.A.

    Oscar,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *