Gus*_*nti 8 reporting-services
我是SSRS的新手,请原谅我的新手.我正在使用Sql Server 2008,我想从报表中多列的表中显示1个单个字段.就像我打印标签一样.我怎样才能做到这一点?
示例:
而不是打印:
Andrea
Austin
Barbara
Bob
Bruno
Cathy
Chis
...
我想在列中打印(比如3个固定列):
Andrea ---- Bruno ---- Darren
Austin ---- Cathy ---- Francis
Barbara ---- Chis ---- Gabriel
Bob ---- David ---- Gerald
...... .---- ....... ---- .......
编辑:如果我运行报告并单击"打印布局"按钮,我可以看到多个列.我可以将此模式设置为默认模式吗?
小智 13
对于标签的水平布局......
一种选择是在报表或主体元素上使用columns属性.这并不总是正确显示在reportviewer上.我注意到即使它在您的IDE上正确显示以及导出为PDF时也是如此.在报告查看器中,它只显示一列.此外,它从上到下依次蜿蜒标签,然后从左到右.
一种选择是每3行使用一个矩阵和组(如果你想要3列).
这个有点复杂.
我选择的解决方案是在页面上放置3个垂直列表.在每个列表中放置相同的标签.返回数据集中的行号.然后只过滤模3上的每个列表
例如
结果集
RIndex Fname
1 abe
2 burt
3 fred
4 george
Run Code Online (Sandbox Code Playgroud)
过滤表达式
list 1 -> =Fields!RIndex.Value mod 3 = =1
list 2 -> =Fields!RIndex.Value mod 3 = =2
list 3 -> =Fields!RIndex.Value mod 3 = =0
Run Code Online (Sandbox Code Playgroud)
结果
Abe Burt Fred
George
Run Code Online (Sandbox Code Playgroud)
我使用的方法与Vern建议的方法有点类似,但差别足以使其值得一提.
您可以直接在查询中将ROW_NUMBER与模数(%)运算符组合在一起,以构建应显示记录的列号.这是一个在考虑组时生成一个的示例:
declare @numberOfColumns int = 4;
select dpc.EnglishProductCategoryName, dp.ProductAlternateKey
, (ROW_NUMBER() OVER (
PARTITION BY dpc.EnglishProductCategoryName
ORDER BY dp.ProductAlternateKey) + @numberOfColumns - 1) % @numberOfColumns + 1
as DisplayColumn
from dbo.DimProduct dp
inner join dbo.DimProductSubcategory dps on dps.ProductSubcategoryKey = dp.ProductSubcategoryKey
inner join dbo.DimProductCategory dpc on dpc.ProductCategoryKey = dps.ProductCategoryKey;
Run Code Online (Sandbox Code Playgroud)
为了显示这个,我使用的是嵌套表,然后在DisplayColumn上进行过滤.
阅读以下文章了解所有细节:创建多列报告
使用 Visual Studio 中的“报告”菜单并选择“报告属性”。您可以在“布局”选项卡中设置列。
请尝试这篇有关新闻稿样式报告的msdn 文章以了解更多详细信息:http://msdn.microsoft.com/en-us/library/ms159107.aspx
但此方法确实有局限性,因此在某些情况下可能不适用:
只有 PDF 和图像渲染器支持新闻通讯样式的报告。
编辑:因此一种方法是使用多个 tablix 和一个过滤器来检查 RowNumber 并相应地显示每个表中的特定记录。
另一种方式称为新闻通讯式报告 (链接)。仅当报表导出为 PDF 或图像时,才会保留此格式。仅当您在 Visual Studio 的“预览”选项卡上选择“打印布局”时才能预览它。这是一个例子:
SELECT ID,NAME FROM TABLENAME如第 5 点和第 6 点所述 - 由于报表正文流入多个列,因此您必须确保页面大小至少等于 -> ([原始报表正文大小乘以列数] + 所有列间距值)。不然会显得很乱。