Mysql 如何向报表数据集中的聚合函数添加参数

Mysql 如何向报表数据集中的聚合函数添加参数,mysql,sql,reporting-services,expression,reportbuilder3.0,Mysql,Sql,Reporting Services,Expression,Reportbuilder3.0,谢谢你来看我的问题 我有一个SQL group by函数,我想向其中添加参数。如果可能的话 我曾尝试将参数、表中的两列拼接到函数中,但似乎做得不对 这个函数创建一个统计记录的表,我希望能够通过“团队”和“位置”过滤参数。 我将如何将这些信息添加到数据集中,以便进行筛选 我通常会使用以下方法添加它们: select i.Team ,i.Location From incident i Where i.Team in (@Team) and i.Location in (@Location)

谢谢你来看我的问题

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

我曾尝试将参数、表中的两列拼接到函数中,但似乎做得不对

这个函数创建一个统计记录的表,我希望能够通过“团队”和“位置”过滤参数。 我将如何将这些信息添加到数据集中,以便进行筛选

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

select
i.Team
,i.Location
From 
incident i
Where i.Team  in (@Team)
and i.Location in (@Location)
该表称为事件,所有信息都来自同一个表

我非常希望能有这样的想法。多谢各位

哦,我正在使用报表生成器3和SQL 2008 R2

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
我想首先从依赖项开始,它是一个变量@Person,我将其设置为整数,并选中“允许多个值”。然后在变量的左窗格中选择“可用值”。我选择“从查询中获取值”,从1中选择我的“人员”数据集,选择PersonID作为值字段,选择person作为标签

现在,我的参数已绑定,我可以继续我的订单集。再次创建一个数据集,但将此数据集称为“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步中,让一切保持原样,但将此新数据集添加到从查询获取的“默认值”中。通过这种方式,我可以创建一个临时表来获取我最常用的一些人员,然后将他们设置为默认值。这将使报表在调用时自动执行


过滤在SSR中也可能意味着其他事情。您可以在任何数据集上看到左侧窗格中的“筛选器”,您可以应用此筛选器。请记住,这将首先计算整个表达式,然后过滤它。这种使用IMHO的方式最适合于较小且快速的共享数据集。或者,您也可以在tablix元素中使用filter子句,当您希望在运行后对同一集合中的三个对象(但不同的谓词)进行求值时,这通常是很好的,但要限制对多个对象重复使用一个数据集的范围。

非常感谢。这有助于我更好地理解参数。我正在处理这份报告中的图表,关于你的建议,我还有什么需要考虑的吗?使用我的组查询,我可以轻松地添加另一个参数吗?是的,请记住SSRS中的数据集不必用于表示。它们只能用于填充变量。我经常为用户选择多个或单个组合参数。它们并不是我熟悉的硬限制,有些报告我有八个数据集,其中只有一个用于显示。您还可以让一个列表先确定另一个包含因变量的列表。例如:我构造了一个参数departments,然后它选择一个值,然后使用类似select*from@People where Dept的内容in@Depts. 这有一个参数依赖于另一个参数,技术上参数也用于表示,但我的意思是,数据集不必仅位于网格或图表上。它们可以用于填充变量、在内部确定工作流流程,或者只是进一步过滤数据。