SSRS列表格式

时间:2015-03-18 16:57:30

标签: reporting-services formatting

需要在SSRS中创建一个列表中编号范围为0-30的列表,并允许以短划线输入空值。即如果我有8个得分为10分的玩家,那么列表会在行值10旁边的行值中显示8,但对于其他29个数字,它会显示短划线( - )?

1 个答案:

答案 0 :(得分:2)

您可能需要进行一些调整,但这应该可以帮助您完成大部分工作。没有太多信息可以确切地确定您想要的信息。

将SSRS中的数据集查询调整为以下内容,将子查询Z替换为提供点数和玩家数量的当前查询。我现在在那里插入了虚拟数据所以我会得到这个例子的数据(8 = 1,13 = 1,17 = 2)。

With X as 
(
    select top (30) n = ROW_NUMBER() OVER (ORDER BY m1.number)
    from master.dbo.spt_values as m1
    CROSS JOIN master.dbo.spt_values as m2
)
,Y as 
(
    Select Points, PlayerCount, ROW_NUMBER() OVER (Order by PlayerCount) RowNum
    from (
    --replace this with your query to return the data 
    --with your 2 columns for points and player count
        Select 8 as Points, 1 as PlayerCount
        UNION 
        Select 17 as Points, 2 as PlayerCount
        UNION 
        Select 13 as Points, 1 as PlayerCount) Z
)
Select x.n as Points,  /*isnull(Y.Points,0),*/ Isnull(Y.PlayerCount,0) PlayerCount
from X 
left join Y on X.n = Y.Points;

标记为X的CTE是产生30个斑点的原因。如果您希望它是31个点(0 - 30,包括0和30),请将X中的查询更改为

select top (31) n = ROW_NUMBER() OVER (ORDER BY m1.number)-1
from master.dbo.spt_values as m1
CROSS JOIN master.dbo.spt_values as m2

您最终获得了包含2列的数据集:Points和PlayerCount。 现在在SSRS中创建列表。

  1. 插入一个列表。在该列表中,向右插入2列。然后删除最左侧(原始)列。
  2. 将列表中左侧文本框的表达式设置为points字段。
  3. 将列表中右侧文本框的表达式设置为PlayerCount字段。
  4. 在上面的组外添加一行。输入每列的列标题。我使用了积分和玩家数量。
  5. 在“详细信息”行组的“组属性”中,转到“排序”并将“排序依据”列设置为点。订单应该是A到Z。
  6. 将行的高度调整为最适合您的行。我使用.25作为标题和详细信息行。
  7. 在Tablix属性中,如果可能,请选中“在一个页面上保持在一起”旁边的框。
  8. 在包含“玩家计数”字段(右下角)的文本框中,转到文本框属性“数字类别”。将其设置为0位小数。选中将零显示为:旁边的框。确保 - 已被选中。
  9. 这会给你一个如下所示的列表: enter image description here

    如果出于某种原因,您只想查看包含>的数字0位玩家在顶部拥有该数量的积分,然后是其余的积分,您可以使用计算列进行此操作。

    1. 右键单击您的数据集并添加计算字段。将Name设置为PointsCountSort。 =iif(Fields!PlayerCount.Value = 0, 2, 1) 的表达式。单击确定。
    2. 在“详细信息”组的“排序顺序”中。将排序顺序更改为PointsCountSort A到Z,然后点A到Z.
    3. 这使得列表排序如下:

      enter image description here