有没有简单的方法来重新排列SSRSdevise模式中的tablix列?

我有一个SSRS报告,其中包含超过20列在一个tablix。 我们的用户已经决定,数据是好的,但他们希望列移动( 叹气! )。

似乎应该很容易重新安排列(将列3移动到列1,交换列4和5等)。 但是,拖放似乎不起作用,唯一的解决scheme似乎是删除原始列并将其重新插入到正确的位置(并重新应用已为列创build的任何expression式和格式)。

有没有更简单的方法来做到这一点? 请注意,我不想要一个编程解决scheme,但只需要在devise模式下更改一次。

如果你可以阅读XML(只是了解标签的开始和结束等),你可以轻松完成任务。 您可以采取以下一系列步骤:

  1. 首先将原始报告复制到另一个文件备份。
  2. 右键点击您的报告,然后select“查看代码”
  3. 这打开了报告的RDL —不要害怕它只是一个简单的XML文件
  4. 现在在RDL文件中find“Tablix1”标签 – 查找<Tablix Name="Tablix1"> ....</Tablix >
  5. 您现在需要查找嵌套在<TablixCells><TablixCell><CellContents>....标记中的不同“ <Textbox Name="...">...</Texbox> ”标记
  6. 现在,只需重新排列这些<Textbox...>...</Texbox>的顺序,您就可以轻松地重新排列报告的列,并且您将获得具有新列sorting的新报告。

有一种方法可以通过devise师来完成。

要移动列,请在目标位置插入要移动的空白列数。 然后左键单击要移动的单元格(不是标题列)。 现在您应该可以右键单击并select“剪切”命令。 现在,右键单击目标列的顶部,然后select粘贴。 最后,删除现在空的旧列。

实际上,您需要移动(剪切和粘贴)列的所有<TablixCell>元素( <TablixCell></TablixCell>之间的所有元素,包括<TablixCell></TablixCell>标签本身)。

例如,要重新排列下例中的列以使“产品ID”列出现在“产品名称”列之前,您可以select并剪切“ProductName”单元格元素周围的整个部分(从第一个<TablixCell>到第一个</TablixCell> ),然后将其粘贴到“ProductID”列的</TablixCell> 之后
请注意,Tablix中定义的每一行都有一组<TablixCell>元素; 每个都在一个单独的<TablixRow>元素中。 如果您离开默认标题列(设置列名称),则第一个<TablixRow>定义该标题行,第二个定义列中的数据,这是您要编辑的数据。 重新排列数据列之后,您需要为标题列(如果有的话)执行相同的操作,或者使用devise器重命名列以匹配列中的数据。

实际上,这太复杂了,只需要使用devise器来插入一个新的列,然后将列移动到其中,然后将该列设置为适当的数据源,然后删除原始列。 对于下面的示例,您将在产品ID后面插入一个新列,将其设置为ProductName数据源列(在标题行中将其设置为“产品名称”),然后删除左侧的原始产品名称列。

 ... <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> ... 

在剪切/粘贴之后,您将最终得到:

 ... <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> ... 

关于RDL工作的另一个注意事项是:
如果发现错误,报告将显示错误消息,并且不会显示数据。

除非您熟悉RDL(报告定义语言,一种XMLtypes),否则这些types的错误可能会使处理有时使报告不可用的问题变得非常令人沮丧。

在上面提到的devise器中使用添加新列和删除旧的方法要安全得多。 这使您远离RDL,减less了损坏报告的机会。