none
Suma por grupos reporting service RRS feed

  • Pregunta

  • Hola estoy haciendo un reporte en reporting service en el cual se muestra informacion de dos tablas relacionadas (encabezado y detalle) para hacerme enteder voy colocar un ejemplo de como esta la estructura:

    Tabla1

    Id     Descripcion      Valor
    ------------------------------
    1      Desc A            10000
    2      Desc B            30000
    3      Desc C            5000


    Tabla2 (Detalle)
    Id_FkTb1      Id           Cantidad        ValorTotal
    -----------------------------------------------------------
    1                  1            10                    35000
    1                  2             1                     5000
    2                  1             1                     8000
    3                  1             5                     3500
    3                  2           10                     6800
    3                  3             8                     3900

    al hacer  en un procedimiento almacenado join entre tabla1 y tabla2 relacionando los campos Id (Tabla 1) y Id_FkTb1 (Tabla 2) , se devuelve todos lo datos anteriores.

    Lo que se quiere mostrar en le reporte es algo como lo siguiente:

    Id          Descripcion         Valor
    -----------------------------------------------------------------
    1           Desc A                10000 
                 idDetalle        Cantidad           ValorTotal
                1                     10                     35000 
                2                     1                       5000
               ---------------------------------------------------------
                Total Detalle                            40000
    -----------------------------------------------------------------
    2         Desc B                 30000
               idDetalle         Cantidad          ValorTotal
               1                    1                       8000
             ---------------------------------------------------------
             Total Detalle                             8000
    -----------------------------------------------------------------
    3         Desc C                 5000
               idDetalle         Cantidad          ValorTotal
               1                     5                      3500
               2                    10                     6800
               3                     8                      3900
              ---------------------------------------------------------
              Total Detalle                          14200
    -----------------------------------------------------------------
             Gran Total Detalle   62200
    -----------------------------------------------------------------
    Total Valor   45000

    Presentar el encabezado y detalle no ha sido problema, lo mismo que el total detalle y gran total detalle, el problema es el Total Valor, el campo Valor que esta en la tabla1 no esta descriminado en la tabla2, es un valor que solamente esta en la tabla1, pero es necesario presentarlo en el informe, como tambien mostrar la sumatoria de ese campo.

    Los datos que se muestra estan dentro de una tabla de reporting (tablix) y dentro de este tengo un grupo por el Id de tabla1

    Entonces la pregunta como logro calcular ese campo. lo hecho con Sum del campo pero por ejemplo para el ID 1 me esta sumando el doble osea 20000 por que en el detalle tiene 2 registros y para el Id 3 lo triplica (15000) por que este id tiene 3 registros de detalle.

    Muchas Gracias por su ayuda

    viernes, 17 de febrero de 2012 17:38

Todas las respuestas

  • Hola,

    Prueba a cambiar el agregado SUM por max, para que te coja el máximo de los X registros que tengas para esa cabecera que para este caso serán del mismo valor y no tendrá sentido pero si te mostrará solo uno ;). Otra opción es quitar el sum, pero ya depende de como lo tengas te puede dar error o no.

    Prueba con esto y si no te va, lo vamos viendo ;).

    Un Saludo!


    Fran Díaz | {geeks.ms/blogs/fdiaz/} | {onobanet.es} | {secondnug.com}

    martes, 21 de febrero de 2012 20:15
    Moderador
  • Hola Harold..

    Hice un pequeño sp como el siguiente:

    select ROW_NUMBER() over(order by tbl1.id desc) as 'increm',tbl1.id,tbl1.Descripcion,tbl1.valor,tbl2.Id as id2,
    tbl2.Cantidad,tbl2.Id_FkTbl1,tbl2.VaorTotal, 0 as sumaTotal into #temp from Tabla_2 as tbl2 inner join Tabla_1 as tbl1 on
    tbl1.Id = tbl2.Id_FkTbl1

    declare @i as int = 1
    declare @count as int = (select COUNT(id)from #temp)
    while(@i<=@count)
        BEGIN
                DECLARE @desc as varchar(10) set @desc = (select descripcion from #temp where id = @i group by descripcion )
                declare @topregistro as int set @topregistro = (select top(1)increm from #temp where descripcion = @desc)
                declare @sum as int = (select SUM(vaortotal) from #temp where descripcion = @desc)
                update #temp set sumatotal = @sum where increm = @topregistro
            SET @i = @i+1
        END    
        
    select * from #temp
    drop table #temp

    Ten en cuenta la recomendacion que hace Frank Díaz para el max y claro está acoplarlo a tus necesidades

    Espero sea de tu ayuda... Éxitos


    martes, 21 de febrero de 2012 21:37
  • Hola,

    ¿Te sirvió algún ejemplo?

    Un Saludo


    Fran Díaz | {geeks.ms/blogs/fdiaz/} | {onobanet.es} | {secondnug.com}

    viernes, 24 de febrero de 2012 19:54
    Moderador