Search This Blog

Wednesday, October 20, 2010

Unir o Mezclar Datasets en Reporting Services

Esta quizá ha sido una de las preguntas que mas me han hecho en lo que refiere a SQL Server Reporting Services “Como hago para unir 2 Datasets”… bueno, la verdad siempre logre resolverlo con T-SQL y en algunos casos con MDX, sin embargo llego la hora de investigar como hacerlo, ahora que lo logre, es hora de compartirlo con ustedes.

El siguiente ejemplo es de caracter explicativo, SQLGeek entiende que la solución se puede tener fácilmente a través de TSQL, sin embargo el objetivo es explicar el uso de las funciones en SSRS.


Usaremos la base de datos AdventureWorks

Dataset1

   1: SELECT TOP 10 YEAR(OrderDate) Anho, 



   2: SUM(SubTotal) Subtotal, SUM(TaxAmt) Impuestos, 



   3: SalesPersonID 



   4: FROM Sales.SalesOrderHeader 



   5: GROUP BY SalesPersonID, YEAR(OrderDate)


   6: ORDER BY SalesPersonID 





Dataset2





   1: SELECT TOP 10 SalesPersonID, SalesQuota  



   2: FROM SALES.SalesPerson



   3: Order by SalesPersonID 





Estos datasets devolverán la siguiente información





   1: Anho        Subtotal              Impuestos             SalesPersonID



   2: ----------- --------------------- --------------------- -------------



   3: 2002        6530343.5264          522427.5036           NULL



   4: 2003        9791060.2977          783284.8498           NULL



   5: 2001        3266373.6566          261309.8975           NULL



   6: 2004        9770899.74            781671.9792           NULL



   7: 2004        302131.667            24170.5335            268



   8: 2001        34682.5602            2774.6049             268



   9: 2002        479976.9232           38398.1537            268



  10: 2003        552833.499            44226.6801            268



  11: 2001        903229.8296           72258.3864            275



  12: 2004        1858626.9289          148690.1544           275






   1: SalesPersonID SalesQuota



   2: ------------- ---------------------



   3: 268           NULL



   4: 275           300000.00



   5: 276           250000.00



   6: 277           250000.00



   7: 278           250000.00



   8: 279           300000.00



   9: 280           250000.00



  10: 281           250000.00



  11: 282           250000.00



  12: 283           250000.00




Ahora bien, una vez llevamos esto a SSRS en Datasets Separados podríamos tener 2 reportes, 2 tablas, 2 gráficos, 2 matrices o 2 listas…



image



Sin embargo muchas personas me han consultado para poder llegar a algo así



image



Pero me dicen que al intentar hacerlo, SSRS devuelve un error así



image



La solución esta en el uso de la función Lookup, disponible en SQL Server Reporting Services, y que nos permite que podamos hacer este tipo de cosas, la sintaxis de la función es la siguiente:



=Lookup(CampoDataSet1, CampoDataSet2, CampoQueQueremosTraer, DataSetSecundario)



La función Lookup es el equivalente a un Join, solo que lastimosamente con esta función podemos traer un campo a la vez, así que si deseamos traer mas de un campo, tendremos que poner la función mas de una vez.



Si aplicamos esto a nuestro ejemplo, nuestra función quedaría de la siguiente manera.



=Lookup(Fields!SalesPersonID.Value, Fields!SalesPersonID.Value, Fields!SalesQuota.Value, "DataSet2")


Obteniendo los siguientes resultados



image



Espero les sea de mucha utilidad…



Si tienen dudas o desean que tratemos algun tema en el blog, no duden en escribirme a jbocachica (arroba) sqlgeek.net



Descárgate el RDL aquí 



http://tinyurl.com/sqlgeek1

7 comments:

Anonymous said...

Y donde tengo que poner esa funcion, yo no quiero unir los dataset en si, sino mas bien que sean indistintos es distinta infromacion, mostrada en dos distintas tablas pero en un solo reporte

Malamen said...

YO tengo un store procedure que me arroja hasta 15 tablas con distinta informacion. Pense que reporting services me podría ayudar a mostrar todo esto en un informe gerencial, pero solamente me muestra la primera tabla.

John J. Bocachica said...

@Mary, si tu quieres poner 2 tablas independientes con informacion independiente en un mismo reporte, simplemente debes crear un Dataset o Conjunto de datos para cada consulta... no sera necesario usar la funcion.

@SeaWolf, lastimosamente SSRS soporta solamente procedimientos almancenados que retornen un grupo de datos, si retornan mas de uno, solamente se podra utilizar el primer conjunto de datos, esta informacion la puedes verificar en http://msdn.microsoft.com/en-us/library/ms159260(v=SQL.100).aspx

Unknown said...

groso tio un reporte detallado que me duraba horas por concatenar con tanta tabla lo pase con tu lookup y se me demora 3 a 5 minutos XD

@NicoMarquez said...

Estimado, buenos días, he leído tu blog pues me estoy iniciando en SSRS, me gustaría por favor me pudieras resolver una duda, tratare de ser lo más claro posible, necesito realizar un calculo pero los datos están en 2 dataset distintos, es decir, tengo el total en un data ser y en otro data set tengo una parte de ese total, pues se deben mostrar así, el tema es que ahora necesito saber cuanto de esa parte corresponde al total, pero la verdad nose como realizar ese cálculo en Reporting services.

Ejemplo: Dataset1 = total
Dataset2 = Una parte del total.

necesito Una Parte del Total.Dataset2/ total.dataset1
y eso en una matriz que lleve las fechas

ejemplo 22/07/2013 resultado de la operatoria
y así para cada día.,

Agradecería mucho tu orientación, muchas gracias.

Luis said...

para hacer una suma de dos campos de dos dataset?

Unknown said...

hay una manera mas facil, solo eliges la celda en donde deseas agregar el campo desde tu dataset y luego haces click derecho y elijes text box properties y luego en el menu general das click al boton Fx de la opcion Value y luego en la ventilla que aparece eliges en categoria el dataset de donde deseas tomar el campo y das ok. y listo.

LinkWithin

Related Posts Plugin for WordPress, Blogger...