SSRS - 如何将数据继续到下一栏?

时间:2012-06-04 14:12:26

标签: reporting-services

我需要报告“员工姓名”和“年龄”,但我不需要将名称继续到下一页;我需要继续下一栏。

它应该是这样的:

_________________________________________________
| Employee Name | Age | Employee Name | Age     |
|_______________|_____|_______________|_________|

任何人都可以发送管理此报告的报告吗?我正在使用Microsoft报告服务。

2 个答案:

答案 0 :(得分:32)

你需要一个多列报告的声音。

在“布局”选项卡上,右键单击没有任何报表对象的位置,然后选择“属性”。单击“布局”选项卡,然后将列数设置为页面上所需的列数 - 在您的示例中,它将为2.这将为您提供一个列,用于在左侧布置报表对象,在灰色列上显示灰色列右边的列将重复的位置。

然而,这里有一些技巧:

  • 您的列必须适合页面,否则您将无法获得任何列。例如,如果布局设置的默认值为1厘米间距和2.5厘米左右边距,则A4(21厘米宽)页面上的列必须小于7.5厘米。否则,您将只获得一列,因为页面上不适合两列。
  • 设计器中的报表呈现器不支持多列,因此您只能在设计器中看到一列。 HTML呈现器也不支持多列,并且在部署到报告服务服务器并显示为网页时,您只会看到报告的一列。您需要将报表输出到支持多列(如PDF或打印机)的渲染器,以便实际查看多列报表中的列。

更新 - 使用表格伪造多列报告

如果不这样做,让它显示你想要的独立于渲染器的方式就是使用带有两个表的hack,就像你尝试过的那样,但诀窍是以交替的方式隐藏行。

要实现此hack,请并排创建两个指向数据集的表。在第一个表的Detail行上,对于Visibility-Hidden属性,使用以下公式:

=iif((RowNumber(Nothing) Mod 2) = 0, True, False)

在第二个表的Detail行上,对于Visibility-Hidden属性,使用相反的公式:

=iif((RowNumber(Nothing) Mod 2) = 1, True, False)

这意味着第一个表将打印每个奇数行,第二个表将打印每个偶数行,从而有效地为您提供多列输出。

对于需要两列以上的表的可见性的通用解决方案,请使用以下公式:

=iif((RowNumber(Nothing) Mod TOTALCOLUMNS) = THISCOLUMN, True, False)

其中: TOTALCOLUMNS是列的总数 THISCOLUMN是此表所代表的列号,从零开始(即第一列为0,第二列为1等)

例如,五列输出中第三列的表将Visibility-Hidden属性设置为:

=iif((RowNumber(Nothing) Mod 5) = 2, True, False)

请注意,这与真正的多列略有不同,因为它在从真正的多列包装到右侧列之前从左到右而不是向下读取页面。但是,它具有在每个渲染器中正确渲染的优点。

您可以通过从InteractiveSize-Height属性计算页面上可以容纳的行数并在左表中显示那么多列然后在右表中显示其余列来调整此方法来执行真正的多列操作在整个报告中,但这可能很脆弱,具体取决于渲染器和更改页边距布局设置。上述方法简单有效。

答案 1 :(得分:0)

我正在尝试使用EmployeeName和EmployeeTitle。我试图在上面实施Chris的解决方案。我会得到每个表中的预期值,但它们会重复。

我做了一些研究,最后得到了以下行可见性。

对于我使用的偶数行:

=iif(RunningValue(Fields!jobtitle.Value, CountDistinct, "EmployeesDataSet") Mod 2 = 0, True, False)

对于使用的奇数行:

=iif(RunningValue(Fields!jobtitle.Value, CountDistinct, "EmployeesDataSet") Mod 2 = 1, True, False)

行组是on jobtitle。

来源:RowNumber for group in SSRS 2005