2011-04-21 85 views
6

He estado peleando con SSRS durante demasiado tiempo sobre lo que debería ser una cuestión simple. Espero que alguien pueda ayudarme a ver una solución.El encabezado de Tablix no se repite en la página nueva, cuando el subinforme provoca un salto de página

Tengo un informe que tiene varios perfiles y cada perfil tiene una gran cantidad de secciones de datos. Las secciones de datos (varias tablas y gráficos) no están relacionadas entre sí de ninguna manera que no sea que "clave" de nuevo a la identificación del perfil principal.

El objetivo (que parece simple) es tener un encabezado en cada página con la información del perfil, y luego tener las secciones de datos (cada formato forma completamente diferente) presentado.

El primer problema que encontramos fue que por alguna razón SSRS2008 no permite que una celda tablix contenga otra tablix con un conjunto de datos diferente (por qué no puede requerir un filtro basado en la agrupación principal). La solución recomendada para este inconveniente es combinar todos los datos en un conjunto de datos gigante (no es posible aquí, las secciones de datos son muy numerosas y variadas) o insertar subinformes y pasar los parámetros. Mientras que la opción número dos aumenta el "trabajo" necesario para imprimir una gran cantidad de perfiles, procedimos a implementarlo y funciona.

El problema aparece en la tablix principal (la que contiene los subinformes) que tiene un grupo de encabezado de fila estático establecido con "RepeatOnNewPage = true". Esta configuración permite que el encabezado se muestre en todas las páginas como se desee ... a excepción de los subinformes del tramo de varias páginas, donde el encabezado se omite de manera incorrecta.

Por alguna razón, cuando el subinforme abarca varias páginas, el encabezado de la tabla principal no se repite. Esto me está volviendo loco ya que parece que un par de malas decisiones de diseño en SSRS me han puesto en una situación en la que no puedo crear el informe que quiero ... los encabezados funcionan sin subinformes, pero necesito subinformes para "unirme" "las secciones de datos para el perfil.

Esto parece ser un requisito simple y común ... después de todo, es un informe que se está migrando desde un sistema de informes de décadas. Revisé StackOverflow y Google sin éxito ... Parece que tengo varias preguntas/respuestas sobre saltos de página, pero nada que sugiera una solución a este problema con los subinformes.

Estoy publicando esto en caso de que me falta algo. Si alguien tiene alguna sugerencia, sería muy apreciada.

+1

Tenemos más información sobre este problema. Los encabezados que faltan no parecen estar relacionados con el uso de subinformes, sino que cuando una fila Tablix se divide en varias páginas, no se puede imprimir el encabezado de fila Tablix (en las páginas adicionales). El subinforme está en una fila Tablix (debido a la limitación de "unión" que anotamos anteriormente), y el subinforme puede ser fácilmente mayor que una página de longitud. CUALQUIER AYUDA o sugerencia sobre esto sería muy apreciada. – codinginthevoid

Respuesta

1

Hemos resuelto nuestro problema ... aunque no de la manera más ideal.

El encabezado de página (del informe "maestro", no los subinformes) parece ser el único manera de tener una sección de encabezado.

hemos implementado una solución basada en gran parte en esta entrada de blog: Maintaining State in Reporting Services 2008

Hemos modificado ligeramente de la entrada del blog, la eliminación de "id" de los métodos e incluyendo un GUID para asegurar el informe de valores no se mezclan incluso si el usuario ejecuta varias copias del informe al mismo tiempo. (Al usar variables compartidas, recuerde que son globales para el informe que se ejecuta en las instancias de ejecución y entre los usuarios en el servidor de informes, por lo que se debe tener mucho cuidado cuando se utilizan).)

En el cuerpo del informe que tenemos un bloque de texto oculto que llama:

=Code.SetValue("xxx",Fields!Field1.Value) & Code.SetValue("yyy",Fields!Field2.Value) 

y en la cabecera de página del informe que hacer referencia a estos como (por ejemplo):

=Code.GetValue("xxx") 

Esto funciona porque el cuerpo se calcula antes del encabezado de la página, incluso para la página 1.

Aún así, al final es un truco para algo que debería estar en el producto de Microsoft, dado que han vertido el año s de desarrollo en este producto! El porqué no podemos haber anidado los encabezados de tablix y más fáciles de usar está fuera de mi alcance ... de nuevo esto está actualizando un informe de un programa de principios de los 90 que hizo todo esto sin ningún problema. Por lo menos, envíenos las variables de informe que se pueden recuperar y establecer a medida que se procesa el informe.

De todos modos, las cosas están como están ... hemos probado la solución con variables compartidas y parece estar funcionando muy bien. Vamos a ejecutar pruebas de estrés para asegurarnos de que se implemente correctamente; publicaré algo aquí si encontramos más problemas.

(Y si alguien sabe de alguna otra manera de obtener las filas de encabezado consistentes en las páginas, incluso cuando hay filas de detalle con grandes alturas, por favor, compartir ...)

+0

¿Pudo establecer el valor en el subinforme o solo a través del informe "principal"? – Glenn

2

he encontrado el mismo problema también. Lo que encontré fue que la forma de resolver el problema era desnormalizar los datos, agregando un campo 'Tipo de registro' para identificar si la fila era un padre o un hijo.

Había dos subtablas en mi tablix, ambas mostraban datos detallados vinculados a la agrupación externa. Si configuro los encabezados de las tablas secundarias para que se repitan en cada página (usando la flecha Avanzado> Propiedades estáticas> KeepTogether = True, KeepWithGroup = After, RepeatOnNewPage = True), entonces una de las tablas secundarias se mostraría correctamente, sin embargo, el elemento principal El encabezado repetitivo de la tabla simplemente desaparecería.

Para no hacer historia, este fue un problema enormemente molesto de resolver. La solución es simple, funcionó para mí, pero puede no funcionar para todos.

Enlazado a continuación hay un RDL de ejemplo de SSRS2008 que se conecta a localhost y tiene un ejemplo del problema que tuve y también la solución que implementé. ¡Siéntete libre de usarlo si lo encuentras útil!

(Me hubiera publicado en aquí, pero desbordamiento de pila falla por bloques de código que parece)

http://www.sqlservercentral.com/Forums/Topic1111567-1633-1.aspx?Update=1

1

Nos hemos enfrentado exactamente al mismo problema durante la implementación de las demandas de los clientes en los informes de SSRS, Y probamos muchas cosas que resultaron todas con error ure.

En nuestro caso, Informe principal tiene 4 subinforme. Cada Subinforme debe iniciarse en una nueva página. Y también cuando comience un nuevo subinforme, el encabezado de página se debe cambiar dinámicamente en función del subinforme en cuerpo en la página actual.

También uno de SubReports que fue SubReport3 tiene otra carcasa. Básicamente, el Informe principal se estaba ejecutando según el nivel de Dealer.Pero el Cliente desea que SubReport3 se ejecute para cada SubDealer relacionado con el parámetro @Dealer. Además, el Cliente desea ver los datos de cada SubDealer iniciados en Nueva página dentro de SubReport3.

Como resultado, encontramos una solución diferente de la siguiente manera.

Creamos el encabezado de página en el informe principal. (Menú de informe -> Agregar encabezado de página) (Como @codinginthevoid dijo que es la forma más consistente)

Pusimos 4 subinformes dentro de tablix por separado. Agregamos una nueva columna a cada tablix. Esa columna en cada tablix visiblity = falso, el ancho de esa columna puede ser lo más pequeño posible, luego creó el marcador de posición dentro de esa columna, anotó la expresión siguiente:

Si la expresión está en Tablix1, expresión was = "Tablix1" , si en Tablix2 luego "Tablix2" y etc.

luego comenzó encabezado de la página de diseño para Tablix1, cada elemento de informe en el que se PageHeader putt para Tablix1 tiene la expresión de la visibilidad de la siguiente manera:

=ReportItems!Tablix1_HiddenTextbox1.Value IS NOTHING

luego se aplica misma cosa para Tablix2 y etc.

Al final, había muchos cuadros de texto en PageHeader del informe y algunos de ellos posición era completamente el mismo, superpuestos, pero cuando se muestran los informes, cada uno de esos cuadros de texto se muestra en la página relacionada con el subinforme relacionado.

Cuestiones relacionadas