跨多个页面的 SSRS 报告重复列
SSRS Report Repeating Columns across multiple pages
作为一个非常简化的示例,假设我有以下数据集,我正在尝试从以下数据创建 SSRS 报告(.rdl 文件):
TabOrdinal TabName EndDate Value
1 First Tab 1/1/2018 141
1 First Tab 1/1/2018 297
1 First Tab 1/1/2018 309
1 First Tab 1/1/2018 705
1 First Tab 1/1/2018 398
1 First Tab 1/2/2018 309
1 First Tab 1/2/2018 753
1 First Tab 1/2/2018 641
1 First Tab 1/2/2018 806
1 First Tab 1/2/2018 177
1 First Tab 1/2/2018 503
1 First Tab 1/3/2018 653
1 First Tab 1/3/2018 717
1 First Tab 1/3/2018 969
1 First Tab 1/3/2018 631
1 First Tab 1/3/2018 614
1 First Tab 1/3/2018 160
1 First Tab 1/4/2018 463
1 First Tab 1/4/2018 997
1 First Tab 1/4/2018 87
1 First Tab 1/4/2018 378
1 First Tab 1/4/2018 972
1 First Tab 1/4/2018 212
2 Second tab 1/4/2018 873
2 Second tab 1/4/2018 525
2 Second tab 1/4/2018 693
2 Second tab 1/4/2018 48
2 Second tab 1/4/2018 20
2 Second tab 1/4/2018 685
2 Second tab 1/4/2018 688
并且我在我的报告中创建了以下分组:
顶级行组:
Name: Tab
Group On: [TabName]
Page Breaks: Between Each Group
代码中:
<TablixMember>
<Group Name="Tab">
<GroupExpressions>
<GroupExpression>=Fields!TabName.Value</GroupExpression>
</GroupExpressions>
<PageBreak>
<BreakLocation>Between</BreakLocation>
</PageBreak>
<PageName>=Fields!TabName.Value</PageName>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!TabOrdinal.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
...
</TablixMembers>
</TablixMember>
还有一个列组:
Name: EndDate
Group On: [EndDate]
代码中:
<TablixMember>
<Group Name="EndDate">
<GroupExpressions>
<GroupExpression>=Fields!EndDate.Value</GroupExpression>
</GroupExpressions>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!EndDate.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
<TablixMember />
</TablixMembers>
</TablixMember>
现在,根据我提供的示例数据,我希望发生的事情是我的报告看起来如下所示:
选项卡 1:
1/1/2018 1/2/2018 1/3/2018 1/4/2018
<data> <data> <data> <data>
选项卡 2:
1/4/2018
<data>
但是,我不知道为什么,但是我的第二个选项卡包含第一个选项卡上存在的所有相同日期的空列,因此第二个选项卡如下所示:
选项卡 2:
<empty column> <empty column> <empty column> 1/4/2018
<empty column> <empty column> <empty column> <data>
我怎样才能让报告知道为每个选项卡重置日期列?
我希望这是有道理的,但如果没有,请告诉我,我会尝试进一步解释。
它显示在右侧的原因是因为您在 EndDate
上分组,但结束日期在 1/4/2018
之前已经有三个值。
也许您可以修改 SQL 查询并添加 ROW_NUMBER()
,如下所示:
... ROW_NUMBER() OVER(PARTITION BY TabName ORDER BY TabName, EndDate) AS rn
然后在您的列组中,按 rn 分组。您可能需要稍微修改 ROW_NUMBER
部分以确保您的值设置正确。我已修改为仅按 TabName
进行分区。我想这就是你想要的。
为了隐藏没有值的文本框,我相信有多种方法可以解决。我成功的一种方法是右键单击列并转到列可见性。从那里我添加了表达式 - =ReportItems!TextBoxName.Value = NOTHING
... 当然,您必须为 "data".
使用正确的名称
作为一个非常简化的示例,假设我有以下数据集,我正在尝试从以下数据创建 SSRS 报告(.rdl 文件):
TabOrdinal TabName EndDate Value
1 First Tab 1/1/2018 141
1 First Tab 1/1/2018 297
1 First Tab 1/1/2018 309
1 First Tab 1/1/2018 705
1 First Tab 1/1/2018 398
1 First Tab 1/2/2018 309
1 First Tab 1/2/2018 753
1 First Tab 1/2/2018 641
1 First Tab 1/2/2018 806
1 First Tab 1/2/2018 177
1 First Tab 1/2/2018 503
1 First Tab 1/3/2018 653
1 First Tab 1/3/2018 717
1 First Tab 1/3/2018 969
1 First Tab 1/3/2018 631
1 First Tab 1/3/2018 614
1 First Tab 1/3/2018 160
1 First Tab 1/4/2018 463
1 First Tab 1/4/2018 997
1 First Tab 1/4/2018 87
1 First Tab 1/4/2018 378
1 First Tab 1/4/2018 972
1 First Tab 1/4/2018 212
2 Second tab 1/4/2018 873
2 Second tab 1/4/2018 525
2 Second tab 1/4/2018 693
2 Second tab 1/4/2018 48
2 Second tab 1/4/2018 20
2 Second tab 1/4/2018 685
2 Second tab 1/4/2018 688
并且我在我的报告中创建了以下分组:
顶级行组:
Name: Tab
Group On: [TabName]
Page Breaks: Between Each Group
代码中:
<TablixMember>
<Group Name="Tab">
<GroupExpressions>
<GroupExpression>=Fields!TabName.Value</GroupExpression>
</GroupExpressions>
<PageBreak>
<BreakLocation>Between</BreakLocation>
</PageBreak>
<PageName>=Fields!TabName.Value</PageName>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!TabOrdinal.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
...
</TablixMembers>
</TablixMember>
还有一个列组:
Name: EndDate
Group On: [EndDate]
代码中:
<TablixMember>
<Group Name="EndDate">
<GroupExpressions>
<GroupExpression>=Fields!EndDate.Value</GroupExpression>
</GroupExpressions>
</Group>
<SortExpressions>
<SortExpression>
<Value>=Fields!EndDate.Value</Value>
</SortExpression>
</SortExpressions>
<TablixMembers>
<TablixMember />
</TablixMembers>
</TablixMember>
现在,根据我提供的示例数据,我希望发生的事情是我的报告看起来如下所示:
选项卡 1:
1/1/2018 1/2/2018 1/3/2018 1/4/2018
<data> <data> <data> <data>
选项卡 2:
1/4/2018
<data>
但是,我不知道为什么,但是我的第二个选项卡包含第一个选项卡上存在的所有相同日期的空列,因此第二个选项卡如下所示:
选项卡 2:
<empty column> <empty column> <empty column> 1/4/2018
<empty column> <empty column> <empty column> <data>
我怎样才能让报告知道为每个选项卡重置日期列?
我希望这是有道理的,但如果没有,请告诉我,我会尝试进一步解释。
它显示在右侧的原因是因为您在 EndDate
上分组,但结束日期在 1/4/2018
之前已经有三个值。
也许您可以修改 SQL 查询并添加 ROW_NUMBER()
,如下所示:
... ROW_NUMBER() OVER(PARTITION BY TabName ORDER BY TabName, EndDate) AS rn
然后在您的列组中,按 rn 分组。您可能需要稍微修改 ROW_NUMBER
部分以确保您的值设置正确。我已修改为仅按 TabName
进行分区。我想这就是你想要的。
为了隐藏没有值的文本框,我相信有多种方法可以解决。我成功的一种方法是右键单击列并转到列可见性。从那里我添加了表达式 - =ReportItems!TextBoxName.Value = NOTHING
... 当然,您必须为 "data".