如何在报表数据集中将参数添加到聚合函数

时间:2013-09-26 11:19:52

标签: mysql sql reporting-services expression reportbuilder3.0

感谢您来看我的问题。

我有一个按功能划分的SQL组,我想添加参数。 (如果可能的话)

我试图将参数,表中的两列拼接到函数中,但我似乎没有把它弄好。

此函数创建一个计数记录的表,我希望能够通过'Team'和'Location'过滤参数。 如何将此信息添加到数据集以允许我过滤?

我通常会使用以下方法添加它们:

select
i.Team
,i.Location
From 
incident i
Where i.Team  in (@Team)
and i.Location in (@Location)

该表称为事件,所有信息都来自同一个表。

我非常感谢这样做的想法。谢谢。

哦,我正在使用带有SQL 2008 R2的Report Builder 3

declare @st_date datetime;
declare @en_date datetime;
declare @days int;
declare @offset int;
set @en_date = (@en_datein);
set @offset = (@BrowserTimezoneOffset);
set @days = -6;
set @st_date = DATEADD(dd, @days, @en_date);

with daterange(dt) as
(select 
@st_date dt
union all
select 
DATEADD(dd, 1, dt) dt 
from daterange
where dt <= DATEADD(dd, -1, @en_date)
)
select
             left(DATENAME(dw, dt), 3) as weekday
            ,ISNULL(sum(inc.createdc), 0) as createdcount
            ,ISNULL(sum(inr.resolvedclosedc), 0) as resolvedclosedcount
from daterange left outer join
(select
left(DATENAME(dw,DATEADD(mi,@offset,CreatedDateTime)), 3) as createddatetime
,count(recid) as createdc
from Incident
where DATEADD(mi,@offset,CreatedDateTime) >= @st_date
and DATEADD(mi,@offset,CreatedDateTime) <= @en_date
group by  left(DATENAME(dw, DATEADD(mi,@offset,CreatedDateTime)), 3)
) as inc
on inc.CreatedDateTime = left(DATENAME(dw, dt), 3)
left outer join
(select
left(DATENAME(dw, DATEADD(mi,@offset,ResolvedDateTime)), 3) as ResolvedDateTime
,count(case when status in ('Resolved', 'Closed') then 1 end) as resolvedclosedc
from Incident
where DATEADD(mi,@offset,ResolvedDateTime) between @st_date and @en_date
group by  left(DATENAME(dw, DATEADD(mi,@offset,ResolvedDateTime)), 3)
) as inr
on inr.ResolvedDateTime = left(DATENAME(dw, dt), 3)
group by dt
order by dt

1 个答案:

答案 0 :(得分:0)

使用将使用一个或多个值的参数时,您也可以将它们绑定到数据集。

如果我有一个假装序列中的订单和人员,但我想找到只有某些人的订单。我会按照几个步骤:

  1. 我只会为参数创建一个数据集,并将其称为“人员”,本例允许我们使用自己执行的表变量,并为数据集设置此“查询”框。

    declare @People Table ( personID int identity, person varchar(8));
    
    insert into @People values ('Brett'),('Sean'),('Chad'),('Michael')
    ,('Ray'),('Erik'),('Queyn');
    
    select * From @People
    
  2. 我想先从依赖开始,这是一个变量@Person我设置为整数并检查'允许多个值'。然后,我在变量的左窗格中选择“可用值”。我选择“从查询中获取值”从1中选择我的“人员”数据集,选择“人员ID”作为“值”字段,选择“人”作为标签。

  3. 现在我的参数被绑定了,我可以转到我的订单集了。再次创建一个数据集,但调用这个'OrdersMain'并使用一个自提取表变量,但我现在添加一个谓词,现在引用我的变量。

    declare @Orders table ( OrderID int identity, PersonID int, Desciption 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)
    
    Select * from @Orders where PersonID in (@Person)
    
  4. 现在,如果使用tablix项目填充我的报告并将“OrdersMain”中的值放入Tablix中,则会提示用户使用Brett,Sean等标签。但是id用于订单到限制数据集的范围。

  5. <强>可选

    您可以对另一个数据集中人员的SUBSET重复步骤1,并将其命名为“默认值”。然后使用第2步的扩展将所有内容保留原样,但将此新数据集添加到“默认值”获取查询。这样我就可以创建一个临时表来获取我最常使用的一些人,然后将它们设置为默认值。这将使报告在调用时自动执行。

    过滤也可能意味着SSRS中的其他内容。您可以在任何数据集上看到左侧窗格中的“过滤器”,您可以应用此选项。请记住,这将首先评估整个表达式,然后对其进行过滤。这种使用IMHO最适合使用相当小且快速的共享数据集。或者你可以在tablix元素中使用filter子句,当你想要来自同一个集合的三个对象但是在运行时评估不同的谓词但通过重复使用一个数据集来限制范围时,这通常很好。