1

我正在使用 MS Report Builder 3.0 创建报告。对于此报告,我构建了一个存储过程,可过滤到所需的特定行,然后我使用行组对特定字段 (pass_no) 进行分组。显示的表格是行组内的 2 列和 3 行。我想要完成的基本描述是,而不是运行到下一页的行,我希望行在同一页上以一组新的 2 列继续。可以把它想象成一份报纸,其中的文本在新的一栏中继续,而不是向下延伸到下一页。

对于我将在此处使用的示例,SP 返回了 12 行数据,并且在 pass_no 列中有 8 个唯一值,这是我的行组所在的组。所以在报告中我最终得到了 8 组 3 行。我的目标是让表格在之前显示 6 个 pass_no 值(所以 6 组 3 行),因为缺乏更好的术语,开始一个新表格。

我的第一种方法是创建一个列组并将分组表达式设置为以下内容:

=Floor((RowNumber(Nothing) - 1) / 6)

虽然这适用于创建一组新的 2 列,但新列的拆分基于 SP 返回的原始数据中的行号,而不是行组创建的行集的数量。因此,因为返回了 12 行,并且第 6 行和第 7 行具有相同的 pass_no 值,所以第二组列复制了那组数据。此外,第二列集的前 6 行为空白,第二组值显示在第一组下方。

在此处输入图像描述

如果我添加一个额外的列组,它也按 pass_no 分组,那么我不会得到重复的值,但我确实得到了每个 pass_no 的一对列(正如预期的那样)。我尝试稍微修改上面的表达式并更改Nothing为行组名称并尝试了表名称,但它们都没有产生预期的结果。

我无法更改 SP 以在那里进行分组,因为还有其他列值不相同,我使用Join(LookupSet()).

我还考虑过创建 2 个表并对表应用过滤器,因此第一个表只显示前 6 个结果,第二个表显示剩余的结果,但这也查看原始数据而不是分组并且TOP N不能在 pass_no 上使用,因为它是文本值,而不是整数。如果我需要去 3 张桌子,这也会导致问题。

长话短说,有没有办法进行表格中断而不是分页符,或者将列溢出到同一页面而不是新页面?

这是数据集的相关部分:

http://sqlfiddle.com/#!2/5082b/1

PASS_NO    MASTERTRAN    TRANS_NO    DESCRIPTION             IS_MOD
7913019000  4931019000  4931019000  General Admission Adult 0
7914019000  4932019000  4932019000  Sea Turtle Hosp Adult   0
7914019000  4932019000  4933019000  2:00 PM SEA TURTLE HOSP 1
7916019000  4934019000  4934019000  Sea Turtle Hosp Child   0
7916019000  4934019000  4935019000  2:00 PM SEA TURTLE HOSP 1
7917019000  4934019000  4934019000  Sea Turtle Hosp Child   0
7917019000  4934019000  4935019000  2:00 PM SEA TURTLE HOSP 1
7918019000  4934019000  4934019000  Sea Turtle Hosp Child   0
7918019000  4934019000  4935019000  2:00 PM SEA TURTLE HOSP 1
7922019000  4936019000  4936019000  General Admission Child 0
7923019000  4936019000  4936019000  General Admission Child 0
7924019000  4936019000  4936019000  General Admission Child 0
4

1 回答 1

1

我认为您的数据存在一些问题。

正如您已经知道的那样,通常对于这种设置,您会设置一个行组,其表达式如下:

=(RowNumber(Nothing) - 1) Mod 6

还有一个列组表达式,如:

=Ceiling(RowNumber(Nothing) / 6)

这将创建一个六行 tablix,可以根据需要水平增长。

有关类似示例,请参见此 SO question

但是,您目前还需要按另一列分组 -pass_no在您的情况下。通常,您可以使用如下表达式来近似组级行号:

=RunningValue(Fields!pass_no.Value, CountDistinct, "DataSet1")

不幸的是,当您尝试将其添加到以下分组表达式之一中时:

=Ceiling(RunningValue(Fields!pass_no.Value, CountDistinct, "DataSet1") / 6)

您收到以下错误:

tablix 'Tablix1' 的组表达式包括聚合函数 RunningValue。RunningValue 不能在组表达式中使用。

基于这一切,我的建议是尝试获得一个每个pass_no值有一行的数据集,并以此为基础,使用上面的行/列分组表达式,即不需要对多pass_no行进行分组。因此,在您的示例中,它将有八行。然后,您可以拥有一个包含所有单独行的单独数据集,并使用lookupset函数来连接description等。

您的另一种选择是尝试仅在一个数据集上获取所有内容,包括所需的聚合。这可能是不可能的,但description至少您可以利用此处的各种技术中的任何一种来获取分隔列表。获得此列表后,您可以将分隔符替换为vbCrLf以将其拆分回多行。

所有这一切都是一种非常冗长的说法,我不知道您的数据是否可以满足您的要求,但是如果您考虑至少有一个每行一行的数据集,pass_no您应该能够使其工作。

于 2013-08-30T19:51:50.947 回答