2013-11-04 59 views
0

我有一个SSRS报告其中的参数中的一个是多选。我需要一个行组与集聚行有求和仅基于什么用户从下拉菜单中选择某编号的汇总行。例如....如果下拉包含A = 4,B = 7,C = 1,d = 3,让我们说,用户选择A和C只。含A和C(不分离出来成团,刚刚返回行)和总的分组只能说明行应= 5SSRS上字段分组=多值参数

回答

0

您需要将绑定参数中是可以用“IN”计算表达式子句的多值参数。现在使用SSRS处理参数的方式不同于SQL,因此我认为您可以少用一些代码。这里是直接用SQL自动提取和运行的例子。

declare @People Table (personID int identity, person varchar(8)); 

insert into @People values ('Brett'),('Sean'),('Chad'),('Michael'),('Ray'),('Erik'),('Queyn'); 

declare @Orders table (OrderID int identity, PersonID int, Description varchar(32), Amount int); 

insert into @Orders values (1, 'Shirt', 20),(1, 'Shoes', 50),(2, 'Shirt', 22),(2, 'Shoes', 52),(3, 'Shirt', 20),(3, 'Shoes', 50),(3, 'Hat', 20),(4, 'Shirt', 20),(5, 'Shirt', 20),(5, 'Pants', 30), 
(6, 'Shirt', 20),(6, 'RunningShoes', 70),(7, 'Shirt', 22),(7, 'Shoes', 40),(7, 'Coat', 80) 


declare @Ords table 
    (
     value varchar(32) 
    ) 

--PLAY with values to see agregation works with different MULTIPLE CHOICES 
-- in reality @Ords would be your parameter and the rest of the stuff if just 
-- faking a dataset. 
insert into @Ords VALUES ('Shirt'); 
--insert into @Ords VALUES ('Shirt'),('Shoes'); 
--insert into @Ords VALUES ('Shirt'),('Shoes'),('Hat'); 

-- simple way when you can expose dataset to join to. 
Select 
    p.personID 
, p.person 
, sum(case when v.value is not null then 1 end) 
, sum(case when v.value is not null then Amount end) 
from @People p 
    left join @Orders o on o.PersonID = p.personID 
    left join @Ords v on o.Description = v.value  
group by p.personID, p.person 
order by p.personID 
; 

-- With SSRS you probably cannot JOIN directly to your parameter(never tried it though, maybe you can) 
-- so you need to do an 'IN' expression in a CTE and then aggregate your CTE. You can shorten this 
-- in SSRS to be in (@parameterName) instead of (Select value from @ParameterName) 
With a as 
    (
    Select 
     p.person 
    , p.personID 
    , case when o.Description in (Select value from @Ords) then 1 end as Cnt 
    , case when o.Description in (Select value from @Ords) then Amount end as Amount 
    from @People p 
     left join @Orders o on o.PersonID = p.personID 
    ) 
Select 
    personID 
, person 
, count(Cnt) 
, sum(Amount) 
from a 
group by personID, person 
order by personID 
+0

谢谢djangojazz,非常酷的建议,但我也许应该更清楚。我正在寻找SSRS中的功能或操作来完成此功能。我有一个SP,它在报告中提供数据的报告后面运行。我只是想操纵报表设计中的数据。我试过使用= join函数和其他一些东西,但我找不到解决方案。 – Kat

+0

我从来没有做过,但你可能按一个参数作为一个SSRS“分组”。然后,只需执行[SUM(DataField)],分组就会自动处理数学部分。我会远离你将不得不做一个评估,恕我直言,表现远的表达是不好当聚集。当你必须或直接使用sql时,使用它们,计算列,自定义代码或分组。我有几种情况使用自定义表达式来使用百分比分组,我很遗憾这种选择,因为它们很慢,需要重写,我懒得做。 – djangojazz

+0

如果你有一个程序,你可以改变代码吗?我在程序中遇到的问题是您正在拿走所有的灵活性并将其放入代码中。好处是你可以直接从SQL改变你的结果。这取决于你的情况是一种混合的祝福。出于这个原因,我通常使用SSRS的视图和表函数。速度可能不会像使用proc一样好,但是我可以更好地控制演示级别。 – djangojazz