2012-09-28 30 views
47

Tengo un informe de SSRS que contiene más de 20 columnas en un tablix. Nuestros usuarios han decidido que los datos están bien, pero quieren que las columnas se muevan (suspiro!).¿Hay alguna manera fácil de reorganizar columnas tablix en el modo de diseño SSRS?

Parece que debería ser fácil reorganizar las columnas (mover la columna 3 a la columna 1, cambiar columnas 4 & 5 etc.). Sin embargo, arrastrar y soltar no parece funcionar y la única solución parece ser eliminar la columna original y volver a insertarla en el lugar correcto (y volver a aplicar cualquier formato de expresiones & ya creado para la columna).

¿Hay alguna manera más fácil de hacer esto? Tenga en cuenta que no quiero una solución programática, solo necesito cambiarla una vez en modo de diseño.

+3

No, no hay una manera fácil. En lo que concierne a Microsoft, SSRS es un hijastro pelirrojo medio abandonado. – Yuck

+0

@ensisNoctis ni siquiera cerca. EnPaulStock, tuve que eliminar mis columnas por completo y leerlas, ya que las mías eran columnas agrupadas. –

+0

@MichaelPlautz, mierda, este hilo no fue el que intenté marcar como duplicado. Expusiste mi error después de medio año;) – ensisNoctis

Respuesta

25

Si puede leer XML (simplemente entienda dónde comienzan y terminan las etiquetas, etc.), puede realizar fácilmente la tarea. Puede realizar la siguiente serie de pasos:

  1. Antes de todo, haga una copia de seguridad del informe original copiándolo en otro archivo.
  2. haga clic derecho en el informe y seleccione "Ver código"
  3. Esto abre el RDL del informe --- no tener miedo es sólo un simple archivo XML
  4. Ahora localice dentro del RDL presentar la etiqueta "Tablix1" - busca <Tablix Name="Tablix1"> ....</Tablix >
  5. ahora hay que buscar diferentes "<Textbox Name="...">...</Texbox>" etiquetas anidadas dentro de las etiquetas <TablixCells><TablixCell><CellContents>....
  6. ahora se puede reorganizar fácilmente las columnas del informe con sólo cambiar el orden de éstos y <Textbox...>...</Texbox> tendrá el nuevo informe con un nuevo orden de columnas.
+13

+1 para otro ejemplo de lo poco que Microsoft ha invertido en dar a sus desarrolladores herramientas de informes razonables. – Yuck

+3

Solo un FYI para cualquiera que lea esta respuesta, debe mover los elementos que contienen los nombres de las columnas por separado de los elementos que contienen los detalles. Los anchos de columna también se almacenan por separado, al igual que las reglas de visibilidad que haya aplicado ... Este método ya no se ve tan fácil ... – Mike

+1

El Asnwer de Scott Blasingame es mucho más simple si este Método XML es demasiado complicado. –

4

En realidad, tiene que mover (cortar y pegar) todo el elemento <TablixCell> para la columna (todo entre el <TablixCell> y </TablixCell> incluyendo los <TablixCell></TablixCell> y etiquetas en sí).

Por ejemplo, para reordenar las columnas en el ejemplo siguiente para hacer la columna "ID de producto" vienen antes la columna "Nombre", debería seleccionar y cortar toda la sección alrededor del elemento de la célula "ProductName" (todo, desde el primero <TablixCell> hasta el primero </TablixCell>) y luego péguelo después de</TablixCell> para la columna "ProductID".
Tenga en cuenta que hay un conjunto completo de elementos <TablixCell> para cada fila definida en Tablix; cada uno está en un elemento separado <TablixRow>. Si dejó la columna del encabezado predeterminado (donde se establecen los nombres de las columnas), el primero <TablixRow> define esa fila de encabezado y el segundo define los datos en las columnas y es el que desea editar. Una vez que haya reorganizado las columnas de datos, deberá hacer lo mismo para la columna de encabezado (si la tiene) o simplemente cambiar el nombre de las columnas con el diseñador para que coincida con los datos ahora en las columnas.

Realmente, esto es tan enrevesado que probablemente sea más fácil mover una columna simplemente usando el diseñador para insertar una nueva columna donde desea mover la columna, configurarla con la fuente de datos adecuada para esa columna, y luego eliminar la columna original.Para el ejemplo siguiente, debe insertar una nueva columna después de Identificación del producto, configurarlo en ProductName columna de origen de datos (que lo establecería como "Nombre del producto" en la fila del encabezado) y luego eliminar el nombre original del producto columna a la izquierda.

... 
<TablixCell> 
    <CellContents> 
    <Textbox Name="ProductName"> 
     <CanGrow>true</CanGrow> 
     <KeepTogether>true</KeepTogether> 
     <Paragraphs> 
     <Paragraph> 
      <TextRuns> 
      <TextRun> 
       <Value>=Fields!ProductName.Value</Value> 
       <Style /> 
      </TextRun> 
      </TextRuns> 
      <Style /> 
     </Paragraph> 
     </Paragraphs> 
     <rd:DefaultName>ProductName</rd:DefaultName> 
     <Style> 
     <Border> 
      <Color>LightGrey</Color> 
      <Style>Solid</Style> 
     </Border> 
     <PaddingLeft>2pt</PaddingLeft> 
     <PaddingRight>2pt</PaddingRight> 
     <PaddingTop>2pt</PaddingTop> 
     <PaddingBottom>2pt</PaddingBottom> 
     </Style> 
    </Textbox> 
    </CellContents> 
</TablixCell> 
<TablixCell> 
    <CellContents> 
    <Textbox Name="ProductID"> 
     <CanGrow>true</CanGrow> 
     <KeepTogether>true</KeepTogether> 
     <Paragraphs> 
     <Paragraph> 
      <TextRuns> 
      <TextRun> 
       <Value>=Fields!ProductID.Value</Value> 
       <Style /> 
      </TextRun> 
      </TextRuns> 
      <Style /> 
     </Paragraph> 
     </Paragraphs> 
     <rd:DefaultName>ProductID</rd:DefaultName> 
     <Style> 
     <Border> 
      <Color>LightGrey</Color> 
      <Style>Solid</Style> 
     </Border> 
     <PaddingLeft>2pt</PaddingLeft> 
     <PaddingRight>2pt</PaddingRight> 
     <PaddingTop>2pt</PaddingTop> 
     <PaddingBottom>2pt</PaddingBottom> 
     </Style> 
    </Textbox> 
    </CellContents> 
</TablixCell> 
... 

después del cortar/pegar, a continuación, terminarían con:

... 
<TablixCell> 
    <CellContents> 
    <Textbox Name="ProductID"> 
     <CanGrow>true</CanGrow> 
     <KeepTogether>true</KeepTogether> 
     <Paragraphs> 
     <Paragraph> 
      <TextRuns> 
      <TextRun> 
       <Value>=Fields!ProductID.Value</Value> 
       <Style /> 
      </TextRun> 
      </TextRuns> 
      <Style /> 
     </Paragraph> 
     </Paragraphs> 
     <rd:DefaultName>ProductID</rd:DefaultName> 
     <Style> 
     <Border> 
      <Color>LightGrey</Color> 
      <Style>Solid</Style> 
     </Border> 
     <PaddingLeft>2pt</PaddingLeft> 
     <PaddingRight>2pt</PaddingRight> 
     <PaddingTop>2pt</PaddingTop> 
     <PaddingBottom>2pt</PaddingBottom> 
     </Style> 
    </Textbox> 
    </CellContents> 
</TablixCell> 
<TablixCell> 
    <CellContents> 
    <Textbox Name="ProductName"> 
     <CanGrow>true</CanGrow> 
     <KeepTogether>true</KeepTogether> 
     <Paragraphs> 
     <Paragraph> 
      <TextRuns> 
      <TextRun> 
       <Value>=Fields!ProductName.Value</Value> 
       <Style /> 
      </TextRun> 
      </TextRuns> 
      <Style /> 
     </Paragraph> 
     </Paragraphs> 
     <rd:DefaultName>ProductName</rd:DefaultName> 
     <Style> 
     <Border> 
      <Color>LightGrey</Color> 
      <Style>Solid</Style> 
     </Border> 
     <PaddingLeft>2pt</PaddingLeft> 
     <PaddingRight>2pt</PaddingRight> 
     <PaddingTop>2pt</PaddingTop> 
     <PaddingBottom>2pt</PaddingBottom> 
     </Style> 
    </Textbox> 
    </CellContents> 
</TablixCell> 
... 
76

Hay una manera de hacerlo a través del diseñador.

Para mover columnas, inserte la cantidad de columnas en blanco que desea mover en su lugar de destino. Luego, haga clic con el botón izquierdo en las celdas (NO en la columna del encabezado) que desea mover. Ahora debería poder hacer clic derecho y seleccionar el comando Cortar. Ahora, haga clic derecho en la parte superior de las columnas de destino y seleccione Pegar. Por último, elimine las columnas antiguas ahora vacías.

+3

Esto funciona bien, gracias. –

+1

Probé esto con filas; trabajado como un encanto. Mucho _mucho_ más seguro/más fácil que editar XML ... – ARich

+1

Esta debería ser la respuesta principal. Mucho más seguro que jugar con el XML. – april4181

2

Otra nota sobre el trabajo en el RDL:
Si lo hace mal, el informe mostrará un mensaje de error y no mostrará los datos.

A menos que esté familiarizado con RDL (Lenguaje de definición de informes, un tipo de XML), estos tipos de errores pueden ser muy frustrantes para tratar, a veces, haciendo que el informe no sea utilizable.

Es mucho más seguro utilizar agregar columnas nuevas y eliminar el método anterior en el diseñador, mencionado anteriormente. Esto lo mantiene fuera del RDL reduciendo sus posibilidades de dañar el informe.

Cuestiones relacionadas