Fran Diaz

Reporting Services, Business Intelligence, tecnologías Microsoft y otros

Email Notifications

Recent Posts

Tags

News

Community

Comunidades

  • Foro MSDN Español: Colaborador
  • CartujaDotNet

Webs Amigas

Archives

Reporting Services in Visual Studio 2005(II/III)

Vamos con esta segunda parte para trabajar con informes de Reporting Services. En este post, vamos a ver como crear un informe que luego se guardará y ejecutará desde un servidor de informes que trae el Reporting Services (SSRS).

Creación de un Informe de Servidor:

¿Qué necesitamos? Tener instalado el Reporting Services y Visual Studio.NET 2005.

Nota: La versión express de visual studio en cualquiera de sus sabores (c#, vb.net ó c++) no tiene el control ReportViewer en Windows Forms. Solo viene este control con el Visual Studio Web Developer.
A partir de la versión estándar o superior podremos tener el control ReportViewer en Windows Forms.

¿Cómo Empezamos?

Abrimos una instancia de Visual Studio, sino lo instalamos da igual, al instalar Reporting Services se crea una instancia de este en la carpeta de Sql Server 2005 con las plantillas para trabajar con Reporting Services. A continuación, creamos un nuevo proyecto, seleccionamos el tipo de proyecto "Proyecto de Business Intelligence", del cual utilizaremos la plantilla "Proyecto de Servidor de Informes".

TipoProyectoRDL

Una vez creado el proyecto, nos situamos en el y creamos con botón derecho un nuevo informe(sin asistente). Una vez creado este, nos saldrá esta ventana:

InformeServidor 

Si nos fijamos bien, tiene tres pestañas este nuevo informe. Datos, Diseño y Vista previa. Vamos a empezar a configurar nuestro informe. Si nos fijamos en la parte de datos podemos crear un nuevo origen de datos o llamar a un store procedure. Nosotros vamos a crear un origen de datos.

Nos situamos donde pone Origen de datos, y en el combo que tenemos a su derecha elegimos nuevo conjunto de datos y nos saldrá un nueva ventana.  En esta podemos dar el nombre al DataSource, elegir el tipo acceso a datos (access, sql server, oracle, un xml, etc) y editar la cadena de conexión, que no sería otra cosa que elegir la base de datos, asignarle usuario y password (si lo requieren) y probar la conexión a esta. También como otras opciones, podemos utilizar un origen de datos compartido o utilizar una sola transacción.
El origen de datos compartido no es otra cosa que una fuente de datos con acceso a tablas, vistas u otros y que está en el servidor compartido para llamar desde informes. Un ejemplo claro puede ser las ciudades de un país.
Bien, después de crear el DataSource, a continuación, se nos habilitará el espacio de más abajo para poder escribir nuestras consultas. En este caso haremos un select * from Contact (u otra tabla si lo deseas), guardamos y listo [;)].
Crear el diseño de nuestro informe se hará igual que en la primera parte de este post y la vista previa es la ejecución del informe.

Ahora vamos a configurar las propiedades del proyecto y a subir nuestro informe. Estos informes tiene una peculiaridad, y es que se suben a un servidor Web y desde ahí pueden llamar. Ya sea desde una aplicación Web o Forms.

Nos situamos en el proyecto, y en las propiedades(botón derecho) configuramos los siguientes parámetros:

ConfiguracionRS

OverwriteDataSources: True para sobreescribir alguna fuente de datos que tengamos en nuestro proyecto y que esté ya en el servidor.
TargetDataSourceFolder: Carpeta donde se almacenará nuestra fuente de datos si esta es compartida.
TargetReportFolder: Carpeta donde estará nuestro informe.
TargetServerURL: Url donde esta nuestro servidor de informes. Por defecto: http://localhost/reportserver

Ahora solo tendríamos que implementar el proyecto(botón derecho e implementar) o si por el contrario solo queremos implementar nuestro informe, con que demos botón derecho e implementar encima de este bastará.

Ya tenemos creado nuestro informe, podemos implementarlo en el servidor de informes de Reporting o si le cambiamos la extensión rdl por rdlc, también podremos utilizarlo como informe local. ¿Ventajas de esto último?, pues podemos crear nuestra datasource personalizada como veremos en el próximo y último post, diseñar y verlo.

Hasta el próximo!!!

Un Saludo

Posted: 2/1/2008 9:18 por Fran Díaz | con 19 comment(s) |
Comparte este post:

Comentarios

Fabian ha opinado:

Fran,

Estoy hace un rato viendo esto de los reportes y estoy desarrollando con Sybase, el tema es que tengo unos reportes que necesito agruparlos por un número especifico pero solo deben ser agrupados para hacer cosas con ellos como grupo pero el problema es que si les pongo agrupar pierdo registros en el reporte, lo que necesito hacer es que los agrupe para poder trabajar con los registros como por ejemplo pinte los registros que tienen este mismo campo azul. no que los esconda, Se puede hacer eso? o sea agrupa pero muestralos igual todos...

Gracias master.

# January 3, 2008 5:04 AM

Fran Díaz ha opinado:

Hola Fabian,

Claro que puedes verlos todos, si los agrupas te sale el grupo arriba y los detalles, parece que hay menos porque salen agrupados contraidos por defecto, pero si pulsas sobre el icono de expandir(+) verás el detalle.

En cuanto a lo de cambiar de color lo puedes hacer desde el diseñador o con una expresión, como mejor te sea Wink.

Ya me comentarás que tal.

Un Saludo

# January 3, 2008 8:38 AM

Fabian ha opinado:

Fran,

A que icono de expandir te refieres? por que cuando lo ejecuto se ejecuta sin problemas pero agrupados lo cual hace que se pierdan los datos, hay forma que los despliegue todos por defecto.

necesito agrupar por un capo común para identificar un grupo especifico pero no quiero que esconda la agrupación, o sea:

NUMERO  VALOR

1010    casa

1010    perro

1010    gato

1020    gallina

Necesito que agrupe por NUMERO, pero cuando lo agrupo por el campo que necesito y ejecuto el reporte se ve:

NUMERO  VALOR

1010    casa

1020    gallina

y pierdo todos los otros valores, la agrupación debe permitirme ver todos igual.

Gracias.

# January 3, 2008 3:47 PM

Fabian ha opinado:

Fran,

Vi lo que me digiste pero no logro que me muestre todos los datos, sigue haciendo lo mismo.

VALOR   DATA

10      perro

10      gato

agrupo por valor

VALOR   DATA

10      perro

necesito que muestre todo... me ayudas?

# January 4, 2008 3:52 AM

Fran Díaz ha opinado:

Hola Fabian,

¿Algo así?:

Numero Valor

Numero Valor 1001 gato.

Siguiente línea...

Ya me comentas,

Un Saludo

# January 4, 2008 8:49 AM

Fabian ha opinado:

Nop, el tema es sencillo yo estoy lanzando un listado en un reporte pero para hacer sumas totalizadas debo agrupar por un campo, este es un número, todo funciona bien solo que al agrupar efectivamente lo hace y deja todos los registros que contengan el mismo numero agrupados en uno solo y si estos son distintos en sus otros campos igual lo hace lo cual para mi esta mal. Segun lo que entiendo el ReportViewer lo esta haciendo bien, el tema es que necesito que se agrupe pero solo para identificar el grupo como tal pero que los campos de la agrupación no los oculte en uno solo, si no que necesito verlos todos, por eso en el ejemplo que te envié te menciono como los oculta.

La pregunta es esta, ¿Puedo agrupar solo para identificar elementos de un Reporte, no así para que los "Agrupe"? así puedo hacer sumas por los totales de ese grupo pero sin perder los valores de los demas campos.

# January 4, 2008 12:52 PM

Fabian ha opinado:

Esto se demora mucho en publicar, mi correo es info.pandanetarrobargmailpuntocom

si puedes me ayudar por ahí.

Gracias.

FRB

# January 6, 2008 2:36 PM

Fran Díaz ha opinado:

Hola fabian,

Mucho me temo que no va a poder ser, la función de agrupar está para lo que ha sido

diseñada, para agrupar Sad.

En cuanto el ReportViewer, es un control para mostrar un informe Wink.

La solución que te puedo dar, es que hagas tu ya lo que necesitas desde sql.

Ya me contarás que tal,

PD: No se demora en aparecer, sino que primero lo veo yo(cuando tengo tiempo para ver el correo Embarrassed) y luego lo publico) Wink.

Un Saludo

# January 8, 2008 9:42 AM

Fabian ha opinado:

jaja vale gracias, el tema ya lo resolvi, esto lo hice agregando todos los campos a una lista sin agrupar y luego esta lista completa la meti en otra lista pero esta si agrupa, la gracia de esto es que agrupa pero no oculta.

Saludos y gracias.

Fabian

# January 8, 2008 2:29 PM

Fran Díaz ha opinado:

Me alegro Wink, para otra vez, si te registras en el sitio y te suscribes a un artículo(al que hayas puesto el comentario)abajo del todo en la página. Te envían un mensaje cadaz vez que se escriba uno nuevo.

Un Saludo.

# January 22, 2008 9:26 AM

Victor Manuel ha opinado:

Hola

Tengo un pequeno problema, debo hacer unos reportes con Reporting Services y requiero que las fuentes de datos sean SQL-Server, Oracle y Sybase. No se si esto se puede, si tienen algun sitio donde pueda consultar al respecto... o si me pueden suministrar ayuda... se los agradezco de antemano.

Feliz dia

Victor Manuel Orrego

# January 29, 2008 10:15 PM

Fran Díaz ha opinado:

Hola Victor,

Para sql server y oracle no debes de tener problemas, apra sybase... no probé nunca. Prueba con algunas de los origenes de datos que te deja poner. Sino, siempre puedes crearte una clase y pasarlo un objeto como fuente de datos al informe. O un XML Wink.

Un Saludo

# January 31, 2008 3:33 PM

Rodolfo ha opinado:

Hola Fran, una consulta:

existe alguna manera de obtener el usuario que esta viendo un reporte, pues me gustaria publicar un reporte con restricciones de informacion segun el usuario.

# March 14, 2008 2:01 AM

Fran Díaz ha opinado:

Hola Rodolfo,

Puedes usar el User!UserID, con el podrás saber la máquina que está accediendo al report Smile.

Un Saludo

# March 17, 2008 7:52 PM

teresa ha opinado:

Hola,

Necesito por favor ayuda, para generar informes con ReportExecution2005.asmx, tengo problemas debido a que he conseguido saber el numero de paginas que tiene el report pero un informe que tarda 3 segundos a traves de /ReportExecution2005.asmx tarda 6 minutos, en hacer el  render.

  ExecutionInfo execInfo = new ExecutionInfo();

           ExecutionHeader execHeader = new ExecutionHeader();

               rs.ExecutionHeaderValue = execHeader;

               execInfo = rs.LoadReport(pathreport, null);

rs.SetExecutionParameters(pValue, "en-us");

                   System.String SessionId = rs.ExecutionHeaderValue.ExecutionID;

                   rs.Timeout = 500000;

                   string[] streamIDs;

                   reportStreams = new System.Collections.Generic.List<System.IO.MemoryStream>();

                   string devInfo;

                   devInfo = "<DeviceInfo>";

                   devInfo += "  <OutputFormat>EMF</OutputFormat>";

                   //devInfo += "  <OutputFormat>PDF</OutputFormat>";

                   devInfo += "  <StartPage>0</StartPage>";

                   devInfo += "  <PageWidth>297mm</PageWidth>";

                   devInfo += "  <PageHeight>210mm</PageHeight>";

                   devInfo += "  <MarginTop>1.5cm</MarginTop>";

                   devInfo += "  <MarginLeft>0.5cm</MarginLeft>";

                   devInfo += "  <MarginRight>0.5cm</MarginRight>";

                   devInfo += "  <MarginBottom>1cm</MarginBottom>";

                   devInfo += "</DeviceInfo>";

                   //render the report so that I know how many pages

                   string encoding;

                   string mimeType;

                   string extension;

                   ReportingService.Warning[] warnings = null;

                   rs.Render("Image", devInfo, out extension, out mimeType, out encoding, out warnings, out streamIDs);

                   pageCount = streamIDs.Length + 1;

GRACIAS

# March 26, 2008 3:06 PM

Angélica ha opinado:

Hola Fran!!

Estoy haciendo un reporte en el Reporting Services, para esto utilizo un store procedure el cual tiene 4 variables una para elegir el número de zona (int), otra para elegir la clave del producto(string), y fecha inicial y final (date), Los dos primeros parametros son multivalor con el segundo que es string no tengo inconvenientes pero el primero que es int al momento de elegir más de uno me marca un error de que no puedo convertir varchar a int o algo similar....

Cuando hago la consulta normal lo hace sin problemas, pero cuando paso la consulta a store procedure me genera el error antes mencionado.

Espero me puedas ayudar!!!

Gracias!!

# April 23, 2008 8:25 PM

Angélia ha opinado:

Hola Fran!

Estoy haciendo unos reportes con sql 2005, para uno de ellos utilizo un sp con 4 parametros uno para una clave (int), otro con nombres (String) y fechas inicial y final (datetime). Los dos primeros son multivalor ya que necesito que el usuario seleccione uno o varios. Mi problema viene con el primer parametro que es int, al momento de elegir varios me marca un error, que no puede convertir de varchar a int o algo similar...

Este mismo reporte con esos mismos parametros sirve perfectamente si solo selecciono un solo valor en el primero.

De igual manera funciona si en lugar de sp yo hago saco la consulta del sp y la pongo de tipo text en el dataset, y aqui si agarro varios valores para el primer parametro.

Supongo que el error es por que mi parametro es int y al tomar varios valores lo toma de esta manera 1,2,3, y el error que me marca es por las comas.

Gracias!!!

# April 24, 2008 10:15 PM

drake_dark ha opinado:

Hola Fran!

Estoy haciendo unos reportes con sql 2005, para uno de ellos utilizo un sp con 4 parametros uno para una clave (int), otro con nombres (String) y fechas inicial y final (datetime). Los dos primeros son multivalor ya que necesito que el usuario seleccione uno o varios. Mi problema viene con el primer parametro que es int, al momento de elegir varios me marca un error, que no puede convertir de varchar a int o algo similar...

Este mismo reporte con esos mismos parametros sirve perfectamente si solo selecciono un solo valor en el primero.

De igual manera funciona si en lugar de sp yo hago saco la consulta del sp y la pongo de tipo text en el dataset, y aqui si agarro varios valores para el primer parametro.

Supongo que el error es por que mi parametro es int y al tomar varios valores lo toma de esta manera 1,2,3, y el error que me marca es por las comas.

Gracias!!!

# April 24, 2008 10:20 PM

Fran Díaz ha opinado:

Hola a tod@s,

Estoy contestando todos los comentarios en los foros de MSDN. Más información del porque la podéis encontrar aquí:geeks.ms/.../191-adi-243-s-a-los-comentarios-en-el-blog.aspx

Un Saludo

# April 26, 2008 10:19 AM