una tener tablix tabla sumar services repetir ocultar mostrar las inmovilizar funcion filas expresion encabezado dinamicas debe contar columnas reporting-services sql-server-2000

reporting services - tener - ¿Cómo puedo representar un número desconocido de columnas en SSRS?



sumar columnas en reporting services (6)

Estoy trabajando en un informe bastante complejo en Sql Server Reporting Services. Mi SP devuelve un número dinámico de columnas, cada una de las cuales recibe un nombre dinámico.

Básicamente piensa en una aplicación de mantenimiento de tiempo. Cada columna que es dinámica representa un intervalo de tiempo en el que se cargó el tiempo para ese equipo. Si no se le cobró un tiempo a ese depósito durante el período de tiempo que cubre el informe, no se muestra. Cada cubo tiene su propio identificador que necesito que sean los encabezados de las columnas.

Tengo un SP que devuelve todo esto. Lo hace haciendo un poco de SQL dinámico con una declaración exec (feo, pero sé que estoy en SQL 2000, por lo que una opción PIVOT no funcionaría)

Puedo tener una cantidad indefinida de cubos y cualquiera o todos pueden mostrarse.

Encontré esto - http://www.codeproject.com/KB/reporting-services/DynamicReport.aspx - que es útil, pero en el ejemplo, él tiene un número finito de columnas y él simplemente las oculta o las muestra de acuerdo a las que tienen valores. En mi caso, tengo un número variable de columnas, así que de alguna manera necesito el informe para agregar columnas.

¿Alguna idea?


He tenido la necesidad de hacer esto en el pasado y la conclusión a la que llegué es "no se puede", sin embargo, no estoy seguro de eso. Si encuentras una solución, me encantaría saberlo.

Un problema que le viene a la mente es que necesita definir el informe utilizando los nombres de las columnas que va a recuperar del proceso almacenado, y si no conoce esos nombres o cuántos hay, ¿cómo puede hacerlo? usted define el informe?

La única idea que tenía sobre cómo hacer esto es crear dinámicamente la definición del informe (archivo .rdl) a través de C #, pero en ese momento, no pude encontrar una API de MS para hacerlo, y dudo que uno exista ahora. . Encontré uno de código abierto, pero no seguí esa ruta.


Siempre que conozca un número máximo de columnas, es posible hacer esto de una manera.

En primer lugar, nombre las columnas con un resultado de su consulta, de modo que puede pasarlo a la consulta o derivarlo allí. En segundo lugar, simplemente construya el informe como si tuviera el número máximo de columnas, y escóndalas si están vacías.

Por ejemplo, tuve que crear un informe que informara los números de ventas mensuales por hasta un año, pero los meses no necesariamente comenzaban en enero. Le pasé el nombre del mes en una columna, seguido de los números de mi informe. En .rdl, construí 12 conjuntos de columnas, una para cada mes posible, y acabo de utilizar una expresión para ocultar la columna si estaba vacía. El resultado es que el informe parece expandirse al número de columnas necesarias.

Por supuesto, no es realmente dinámico en el sentido de que puede expandirse tanto como lo necesite sin conocer el límite superior.


Esto puede hacerse. Hice esto y funciona bien. No tiene que saber la cantidad máxima de columnas o mostrar y ocultar columnas en mi enfoque. Usa una matriz y modifica tu sp para devolver datos dinámicos a la estructura mencionada en esta publicación del blog http://sonalimendis.blogspot.com/2011/07/dynamic-column-rdls.html


Construya 2 conjuntos de datos relacionados, el primero para el contenido del informe y el segundo para la lista de sus etiquetas de columna.

El conjunto de datos del contenido del informe debe tener un número fijo de columnas y nombre. Puede asignar un número máximo de columnas.

En este ejemplo, tengo las primeras 2 columnas como fijas, o siempre visibles, y un máximo de 4 columnas para mostrarlas por elección a través de un parámetro multivalor, o depende de las condiciones de la consulta. Y como siempre, podemos tener un total también. Por lo tanto, puede verse así:

Fixed01, Fixed02, Dyna01, Dyna02, Dyna03, Dyna04, Total

El segundo conjunto de datos con sus valores se verá así:

Name Label ---- ----- Dyna01 Label01 Dyna02 Label02 Dyna03 Label03

He omitido la cuarta etiqueta para demostrar que no todas las columnas están siendo utilizadas por una determinada condición de consulta. Recuerde que ambos conjuntos de datos están destinados a estar relacionados con la misma consulta.

Ahora crea un parámetro llamado, digamos, @columns; llene sus valores disponibles y valores predeterminados con el segundo conjunto de datos.

Para cada una de esas 4 columnas dinámicas, configure la visibilidad de la columna con la siguiente expresión:

=IIf(InStr(join(Parameters!columns.Value,","),"Dyna01"),false,true)

Y para cada uno de los cuadros de texto de encabezado de columna, use la siguiente expresión:

=Lookup("Dyna01", Fields!Name.Value, Fields!Label.Value, "dsColumns")

En cuanto al Total, aquí está la expresión de su visibilidad:

= IIf(InStr(join(Parameters!columns.Value, ","), "Dyna01"), false, true) AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna02"), false, true) AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna03"), false, true) AndAlso IIf(InStr(join(Parameters!columns.Value, ","), "Dyna04"), false, true)

Y aquí está para sus valores:

= IIf(InStr(join(Parameters!columns.Value, ","), "Dyna01"), Fields!C01.Value, 0) + IIf(InStr(join(Parameters!columns.Value, ","), "Dyna02"), Fields!C02.Value, 0) + IIf(InStr(join(Parameters!columns.Value, ","), "Dyna03"), Fields!C03.Value, 0) + IIf(InStr(join(Parameters!columns.Value, ","), "Dyna04"), Fields!C04.Value, 0)

Eso es todo, espero que ayude.

Bonus, ese segundo Dataset, dsColumns , también puede contener otros atributos de columna, como: color, ancho, fuentes, etc.


ahora qué pasa si hay un número incierto de columnas, digamos si tengo fechas como nombres de columna que pueden ser muy similares a los criterios de selección del informe, por ejemplo, las columnas pueden ser como: nombre, [2013-05-03], [2013-05- 04], [2013-05-05] .....


Creo que la mejor manera de hacerlo es agregar todas las columnas en su tabla y editar la propiedad de visibilidad de la misma con la ayuda de los argumentos que obtiene de su SP ... esto resolverá el propósito de la columna dinámica, pero al ver el informe usted obtendrá una gran cantidad de espacio en blanco que puede resolver con SSRS - Mantenga una tabla del mismo ancho cuando se ocultan columnas dinámicamente? y su informe estará listo