none
Filtro en Reporting Services RRS feed

  • Pregunta

  • Buenos dias quisiera que me apoyaran con el siguiente problema que tengo una tabla que quiero mostrar en un reporte y no se como hacerlo, Una tabla con

    Fecha         ID          Total

    01/01/13    1          60

    01/01/13    2          10

    01/02/13    1          50

    01/02/13    2          15

    En el reporte quiero mostrarlo asi

    Fecha           Id1      Id2       Suma Total

    01/01/13     60       10              70

    01/02/13     50      15               65

    La coleccion de datos lo obtendo de un dataset.

    Lo he estado haciendo con if pero se salta una la fila  y me pone dos registros en diferente fila.. espero haberme explicado.

    Grancias por sus respuestas

    martes, 12 de marzo de 2013 16:37

Respuestas

  • Entonces no deberías utilizar una tabla sino una Matriz en la fila de la matriz agrupas por fecha y en la columnas de la matriz agrupa por el ID. Aquí te dejo un enlace para cualquier duda:

    Matriz Reporting Services


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    martes, 12 de marzo de 2013 16:48
  • Hola Frank si por supuesto dime para comenzar inserta una matrix verás que hay una fila y una columna. En la columna pones tu Id luego en la parte inferior verás un grupo llamado ColumnGroup algo así allí le darás doble clic y verás un botón de agregar allí despliegas las opciones y seleccionas tu columnas Id con ello ya habrás agrupado las columnas por el Id. Luego en el grupo de filas que están a un lado harás lo mismo pero allí seleccionarás tu campo fecha. Ejecuta esta primera parte haber si queda como deseas. Me avisas

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 14 de marzo de 2013 20:34
  • ah ya veo lo que deseas restar la suma total a tu monto y ver la diferencia uhm bueno de forma horizontal no creo que vaya a salir pero puedes ponerlo después de toda la suma total algo así:

    Fecha.            Id1           Id2         Suma Total.  

    01/01/13        20             10           30              

    01/02/13        18               9          27                

    Diferencia                                   300 - 57

    Claro yo lo grafico de esa forma lo que veras sera el resultado es decir:

    Fecha.            Id1           Id2         Suma Total.  

    01/01/13        20             10           30              

    01/02/13        18               9          27                

    Diferencia                                   243

    En tu dataset haz clic derecho y pon agregar campo calculado aquí te dejo este link de referencia para que te guíes un poco:

    Campo Calculado

    Verás en las imágenes que hay un botón Fx allí pon lo siguiente:

    = Sum(Fields!Tu_Campo_Que_Sumas.Value) - Fields!Tu_Campo_Diferencia

    Hasta allí ya tienes tu nuevo campo calculado. Ahora solo agregar una fila más y pones ese campo calculado.

    Espero haberme dado a entender. Cualquier duda no dudes en preguntar.


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    jueves, 14 de marzo de 2013 23:16
  • Hola Franck te dejo estos enlaces que te pueden ser muy útiles:

    Crear suma de filas calculadas en Microsoft Reporting Services

    Usar referencias de código personalizado en expresiones (Reporting Services)

    Agregar código a un informe (SSRS)

    Ahora que mencionas lo de sumar las filas anteriores posiblemente se pueda con un RowNumber te dejo este enlace con expresiones que te puede ser útil:

    Expresiones Reporting Services II


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 4 de abril de 2013 17:35
  • Listo jose barba logre solucionarlo por si a alguien le sirve dejo el codigo que utilise en SQL, todo esto lo amarre a un data adicional set de reporting services.

      select t.PNUM,t.Monto, t.PID, rt.PORFIN
    from PAGOS t
    cross apply (select SUM(Monto) as PORFIN
        from PAGOS where (PNUM <= t.PNUM and PID=50) ) as rt
    where t.FACTURA='0016'
    order by t.PID asc

    Gracias por toda la ayuda Jose Barba te seguire molestando.


    viernes, 5 de abril de 2013 0:05

Todas las respuestas

  • Entonces no deberías utilizar una tabla sino una Matriz en la fila de la matriz agrupas por fecha y en la columnas de la matriz agrupa por el ID. Aquí te dejo un enlace para cualquier duda:

    Matriz Reporting Services


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    martes, 12 de marzo de 2013 16:48
  • Buenas tarde Jose Barba revise la informacion del link pero no logro realizar el repote que necesito, creo que lo estoy haciendo mal o no se como hacerlo,

    Podrias ayudarme!!

    Gracias.

    jueves, 14 de marzo de 2013 20:17
  • Hola Frank si por supuesto dime para comenzar inserta una matrix verás que hay una fila y una columna. En la columna pones tu Id luego en la parte inferior verás un grupo llamado ColumnGroup algo así allí le darás doble clic y verás un botón de agregar allí despliegas las opciones y seleccionas tu columnas Id con ello ya habrás agrupado las columnas por el Id. Luego en el grupo de filas que están a un lado harás lo mismo pero allí seleccionarás tu campo fecha. Ejecuta esta primera parte haber si queda como deseas. Me avisas

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 14 de marzo de 2013 20:34
  • Excelente ayuda Jose Barba logre hacer lo que necesito, ahora surgio otro problema, Colocarle un numero a cada linea de forma asendente puedo hacer eso ?? Tambien me gustaria colocar una columna que vaya disminuyendo segun la suma de la fila de un monto x.

    espero haberme explicado.

    jueves, 14 de marzo de 2013 22:17
  • Hola Frank uhm no se si esto te ayude con la numeración pruebalo haber si es lo que necesitas:

    = RowNumber(Nothing) & ".- " & Trim(Fields!codCliente.Value)

    Como ves estoy concatenando RowNumber que es útil para la acción de numeras las filas ademas de un punto y un guión para separar la numeración y el campo a mostrarse lo último sino lo entiendo bien podrías explicarte mejor. Gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 14 de marzo de 2013 22:34
  • Bueno mira en la consulta que estoy haciendo tengo otro valor MontoX ,Fecha,  del Id1 y Id2,  Ahora bien tengo lo siguiente hasta el momento la columan de diferencia es lo que no se como hacerlo.

    Montx = 300   (fuera de la Matrix)

    Fecha.            Id1           Id2         Suma Total.   Diferencia

    01/01/13        20             10           30               270 (va restando del Montox)

    01/02/13        18               9          27                243 (va restando del MontoX)

    Desde ya muchas gracias por tu ayuda.

    jueves, 14 de marzo de 2013 23:08
  • ah ya veo lo que deseas restar la suma total a tu monto y ver la diferencia uhm bueno de forma horizontal no creo que vaya a salir pero puedes ponerlo después de toda la suma total algo así:

    Fecha.            Id1           Id2         Suma Total.  

    01/01/13        20             10           30              

    01/02/13        18               9          27                

    Diferencia                                   300 - 57

    Claro yo lo grafico de esa forma lo que veras sera el resultado es decir:

    Fecha.            Id1           Id2         Suma Total.  

    01/01/13        20             10           30              

    01/02/13        18               9          27                

    Diferencia                                   243

    En tu dataset haz clic derecho y pon agregar campo calculado aquí te dejo este link de referencia para que te guíes un poco:

    Campo Calculado

    Verás en las imágenes que hay un botón Fx allí pon lo siguiente:

    = Sum(Fields!Tu_Campo_Que_Sumas.Value) - Fields!Tu_Campo_Diferencia

    Hasta allí ya tienes tu nuevo campo calculado. Ahora solo agregar una fila más y pones ese campo calculado.

    Espero haberme dado a entender. Cualquier duda no dudes en preguntar.


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    jueves, 14 de marzo de 2013 23:16
  • Gracias por la ayuda Jose voy a revisar y te comento como me va.
    jueves, 14 de marzo de 2013 23:40
  • Hola Jose Barba efectivamente esoy probando y si funciona, pero mira el requerimiento es que sea por filas la la disminucion hasta quedar a cero.

    Fecha.            Id1           Id2         Suma Total.   Diferencia(Saldo)

    01/01/13        20             10           30               270 (va restando del Montox)

    01/02/13        18               9          27                243 (va restando del MontoX)

    ....................

    01/01/ 14           17          3          20             20   (va restando del MontoX)

    01/02/14          15           5          20                0  Cero.

    espero haberme explicado ahora....


    viernes, 15 de marzo de 2013 15:40
  • Haz probado agregar una columna adicional y poner ese campo calculado en esa columna haber que pasa? No he intentado hacer eso pero hazlo para ver que sucede y así vamos saliendo de dudas

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    viernes, 15 de marzo de 2013 15:46
  • Jose mira agregue la columna adicional peso solo resta del montoX la suma de la fila, no logro solucionarlo, con una molestia mas puedo cambiar el Nombre del ID que lo estoy agrupando en las columnas pero trae el Id1 y Id2

    Gracias.

    viernes, 15 de marzo de 2013 17:34
  • A que te refieres con cambiar el nombre del ID? te refieres a la cabecera de la columna?. Ahora respecto a la resta que planeas no lo he hecho antes si encuentro lo comentare. 

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    viernes, 15 de marzo de 2013 18:06
  • si la cabecera de la columna queria personalizarlo , voy a seguir intentando con la resta que te comento espero solucionarlo.

    Espero no ser molesto con las preguntas, puedo tener un archivo *.rdl del reportinServices de SQL que se conecte a varias conecciones dependiendo de la que yo le indique??

    viernes, 15 de marzo de 2013 18:28
  • Hola si puedes personalizar las cabeceras no afecta en nada. Por otro lado podrías definir un parámetro conexión y que ese parámetro reciba la cadena de conexión que le asignes desde código en vb.net o c#. Donde defines la conexión en el Reporting Services colocas este parámetro y cuando lo cargues y envíes al reporte este tomará esa conexión. Y no te preocupes si tienes dudas puedes seguir preguntando.


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    • Editado José Barba viernes, 15 de marzo de 2013 18:35
    viernes, 15 de marzo de 2013 18:34
  • Hola Jose barba mira sigo con mi problema, sobre el saldo  o la diferencia actual, se me estaba ocurriendo si es posible usar codigo personalizado tendrias algunos ejemplos donde usas codigo personalizado, espero tus comentarios.

    PD:: Por otra parte es posible sumar las finas anteriores segun su id para restarlo al monto fila por fila.

    Saludos cordiales

    jueves, 4 de abril de 2013 17:22
  • Hola Franck te dejo estos enlaces que te pueden ser muy útiles:

    Crear suma de filas calculadas en Microsoft Reporting Services

    Usar referencias de código personalizado en expresiones (Reporting Services)

    Agregar código a un informe (SSRS)

    Ahora que mencionas lo de sumar las filas anteriores posiblemente se pueda con un RowNumber te dejo este enlace con expresiones que te puede ser útil:

    Expresiones Reporting Services II


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 4 de abril de 2013 17:35
  • Muchisimas gracias

    en los links que me dejaste esta perfectamente lo que quiero hacer   con lo siguiente

    In the following example, the ROWS clause is specified with UNBOUNDED PRECEDING. The result is that the window starts at the first row of the partition.

    SELECT BusinessEntityID, TerritoryID 
        ,CONVERT(varchar(20),SalesYTD,1) AS  SalesYTD
        ,DATEPART(yy,ModifiedDate) AS SalesYear
        ,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID 
                                                 ORDER BY DATEPART(yy,ModifiedDate) 
                                                 ROWS UNBOUNDED PRECEDING),1) AS CumulativeTotal
    FROM Sales.SalesPerson
    WHERE TerritoryID IS NULL OR TerritoryID < 5;
    

    Here is the result set.

    BusinessEntityID TerritoryID SalesYTD SalesYear CumulativeTotal ---------------- ----------- -------------------- ----------- -------------------- 274 NULL 559,697.56 2005 559,697.56 287 NULL 519,905.93 2006 1,079,603.50 285 NULL 172,524.45 2007 1,252,127.95 283 1 1,573,012.94 2005 1,573,012.94 280 1 1,352,577.13 2005 2,925,590.07 284 1 1,576,562.20 2006 4,502,152.27 275 2 3,763,178.18 2005 3,763,178.18 277 3 3,189,418.37 2005 3,189,418.37 276 4 4,251,368.55 2005 4,251,368.55 281 4 2,458,535.62 2005 6,709,904.17

    Como puedo hacer esto en ReportingServices la columna de CumulativeTotal, estoy usando una matrix,

    si no es posible como puedo crear ese codigo sql en mi consulta estoy usando SQL 2008 R2 pero genera un error con ROWS,

    Pero bueno seria efectivo que sea en reporting services para no tener problemas de migracion y cosas asi.

    Espero tus comentarios Jose Barba y tambien pedir la ayuda del foro.

    Gracias.

    jueves, 4 de abril de 2013 22:09
  • Hola que error te esta dando?

    Como puedo hacer esto en ReportingServices la columna de CumulativeTotal, estoy usando una matrix

    Se me ocurre que puedes crear otro dataset y agregar esa columna a la matriz y ver que obtienes


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos


    jueves, 4 de abril de 2013 22:13
  • Jose perdona no entendi lo del otro data set. Por otro lado el codigo sql es este

    select PID,NuCuota,Convert(varchar(20),PMonto,1),Convert(Varchar(20),SUM(PMonto) over (PARTITION BY PID
    Order By NuCuota ROWS UNBOUNDED PRECEDING),1) As Montos from PagosG

    tambien e usado este

    select PID,NuCuota,PMonto,SUM(PMonto) over (PARTITION BY PID
    Order By NuCuota ROWS UNBOUNDED PRECEDING) As Montos from PagosG

    y los dos generan este error

    Msg 102, Level 15, State 1, Line 2
    Incorrect syntax near 'ROWS'.

    estoy usando sql2008r2

    jueves, 4 de abril de 2013 22:45
  • Que SQL Server tienes? Según veo en algunas páginas ROWS UNBOUNDED se usa a partir del SQL Server 2012

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 4 de abril de 2013 22:59
  • Este es el que tengo QLS Express Edition with Advanced Services.
    jueves, 4 de abril de 2013 23:03
  • Por cierto 2008  r2 si me habia hido
    jueves, 4 de abril de 2013 23:07
  • Hola como comenté se necesita SQL Server 2012 para poder utilizar el ROWS UNBOUNDED las versiones anteriores 2000, 2005, 2008 al parecer no cuentan con esto.

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 4 de abril de 2013 23:07
  • y como puedo hacer eso con reporting services lo mismo en 2008
    jueves, 4 de abril de 2013 23:11
  • Podrías consultarlo en el foro de SQL Server allí podrían darte mejor información acerca del ROWS UNBOUNDED

    SQL Server Forum


    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    jueves, 4 de abril de 2013 23:16
  • Listo jose barba logre solucionarlo por si a alguien le sirve dejo el codigo que utilise en SQL, todo esto lo amarre a un data adicional set de reporting services.

      select t.PNUM,t.Monto, t.PID, rt.PORFIN
    from PAGOS t
    cross apply (select SUM(Monto) as PORFIN
        from PAGOS where (PNUM <= t.PNUM and PID=50) ) as rt
    where t.FACTURA='0016'
    order by t.PID asc

    Gracias por toda la ayuda Jose Barba te seguire molestando.


    viernes, 5 de abril de 2013 0:05
  • Que bien entonces dime lograste solucionar todo?

    Si se solucionó tu consulta no olvides marcar la respuesta. Saludos

    viernes, 5 de abril de 2013 3:57
  • Si hasta el momento creo haber solucionado el problema, sinceramente gracias por la ayuda te seguire molestando!!!! jejejejeje.

    lunes, 8 de abril de 2013 15:54