Usuario
Suma por grupos reporting service

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 3900al 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 45000Presentar 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
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}
-
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 #tempTen 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
-