谢谢您来看看我的问题。

我有一个SQL group by function,我想向其中添加参数。 (如果可能的话)

我试图将参数(表中的两列)拼接到函数中,但似乎不正确。

这个函数创建一个表来记录记录,我希望能够通过'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

最佳答案

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

假设我有假装的订单和人,但是我只想找到某些人的订单。我将按照以下步骤操作:


在本例中,我将仅为参数创建一个数据集,并将其称为“ People”,让我们使用一个自行执行的表变量并将该“ Query”框放置在数据集中。

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

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

select * From @People

我想先从依赖项开始,该依赖项是我设置为Integer的变量@Person并选中“允许多个值”。然后,在变量的左窗格中选择“可用值”。我选择“从查询中获取值”,从1中选择“人”数据集,选择“ PersonID”作为“值”字段,然后选择“人”作为标签。
现在我的参数已绑定,我可以继续执行我的订单集了。再次创建一个数据集,但将其称为“ 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)

现在,如果用tablix项填充我的报表,并将'OrdersMain'中的值放在tablix中,则会提示用户带有Brett,Sean等的标签。但是ID用于订单以限制数据集的范围。


可选的

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

过滤在SSRS中也可能意味着其他事情。您可以在任何数据集的左窗格中看到一个“过滤器”,您可以应用此过滤器。请记住,这将首先评估整个表达式,然后对其进行过滤。恕我直言,这种用法最适合小型且快速的共享数据集。或者,您也可以在tablix元素中使用filter子句,当您希望三个对象来自同一集合,但在运行时后评估不同的谓词,但又限制了一个对象对多个对象的重用范围时,这通常会很好。

关于mysql - 如何向报表数据集中的聚合函数添加参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19026816/

10-10 00:44
查看更多