根据行的条件筛选列

时间:2014-01-10 15:34:56

标签: sql-server reporting-services ssrs-2008-r2

我在SSRS 2008 R2中有以下Matrix:

enter image description here

我想要做的只是显示“FTE”行有值的列。 (标有红色圆圈)。我已经尝试了过滤器并根据列属性中的表达式显示/隐藏选项,但我无法弄清楚当“category”=“FTE”时如何仅引用行。我的数据如下:

tblPhysicians 
employee_id    last_name    ...
102341145      Smith
123252252      Jones

tblPhysiciansMetrics
id      fy     period     division_name      category_name     employee_id
123     2014   1          Allergy            Overhead          123456
124     2014   1          Allergy            Salary            125223
125     2014   1          Allergy            FTE               1.0


query
SELECT * FROM
tblPhysicians
INNER JOIN tblPhysicianMetrics
   ON tblPhysicians.employee_id = tblPhysicianMetrics.employee_id
WHERE
   tblPhysicianMetrics.division_name = @division_name
   AND tblPhysicianMetrics.fy = @fy
   AND tblPhysicianMetrics.period = @period

请注意,我的Matrix中的行只是category_name,所以我不能只在category_name =“FTE”时隐藏,这不是我想要的。我真正需要的是一些说法,“对于category_name =”FTE“的行,如果未设置该值,则不要显示该列”。这可能吗?

另一种方法是甚至不在查询中获取那些,但是与矩阵的过滤一样,如果我只是将“AND tblPhysiciansMetrix.category_name ='FTE'”添加到WHERE子句中,我的整个数据集就会减少仅限于category_name为FTE的那些记录。

非常感谢任何帮助!

更新:添加Matrix的定义以帮助:

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要使用表达式设置列可见性,该表达式检查 FTE 类别列中的所有基础数​​据。

我有一个简单的数据集:

enter image description here

基于此的简单矩阵:

enter image description here

完全符合您的预期:

enter image description here

因此,在上面的示例中,我们希望隐藏 Brown 列。为此,请对列可见性

使用这样的表达式
=IIf(Sum(IIf(Fields!category_name.Value = "FTE", 1, 0), "last_name") > 0
  , False
  , True)

这有效地计算了列中的所有字段(由last_name表达式中的Sum范围参数确定) - 如果这是> 0显示该列。按要求工作:

enter image description here

答案 1 :(得分:0)

CAVEAT 我不是100%确定如何将这些数据分组到矩阵中。从您的描述中不是100%清楚。让我知道为什么这不起作用(如果没有,我会相应地更新我的答案。

我已使用我的答案的名称值替换了employee_id列,以使我的解释变得简单。

将此嵌套IIF()添加到Matrix列的visibility属性中。

 =IIF(Fields!category_Name.Value="FTE" ,IIF( Fields!value.Value >= 0, True,False),false)

它将检查该类别的值和该行的单元格中的“FTE”。