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

LinkWithin

Related Posts Plugin for WordPress, Blogger...