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…
Sin embargo muchas personas me han consultado para poder llegar a algo así
Pero me dicen que al intentar hacerlo, SSRS devuelve un error así
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
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í