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í
7 comments:
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
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.
@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
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
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.
para hacer una suma de dos campos de dos dataset?
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.
Post a Comment