Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssrs 2008 在代码中应用报告筛选器_Ssrs 2008_Reporting Services - Fatal编程技术网

Ssrs 2008 在代码中应用报告筛选器

Ssrs 2008 在代码中应用报告筛选器,ssrs-2008,reporting-services,Ssrs 2008,Reporting Services,我的特定问题可能过于本地化,但我想问的一般性问题是,我相信其他人会问的,我想知道: 一般问题:在Sql Server Reporting Services中,是否可以对代码中的报表应用筛选器?如果没有,是否可以根据变量的值在报表过滤器中使用分支,您能给我指一下文档或解释一下如何做吗 下面是我的具体例子,以扩展我的上述意思,以防我用词不当: 我正在学习SSR,而docs和Google正在出现短缺 理想的效果是我们有一个基于事件跟踪系统的报告。在这个系统中,我们有各种可以跟踪事件的团队:IT运营、

我的特定问题可能过于本地化,但我想问的一般性问题是,我相信其他人会问的,我想知道:

一般问题:在Sql Server Reporting Services中,是否可以对代码中的报表应用筛选器?如果没有,是否可以根据变量的值在报表过滤器中使用分支,您能给我指一下文档或解释一下如何做吗


下面是我的具体例子,以扩展我的上述意思,以防我用词不当:

我正在学习SSR,而docs和Google正在出现短缺

理想的效果是我们有一个基于事件跟踪系统的报告。在这个系统中,我们有各种可以跟踪事件的团队:IT运营、开发、安全等。每个团队都有指定的团队成员

  • 我们有一个显示所有事件的基本报告
  • 我们添加了一个名为“LimitByTeam”的布尔参数,该参数在报告上生成一个复选框,正如您所期望的那样
  • 我们添加了一个接受多个值的字符串参数。允许的值来自列出团队的数据集。这将预期的下拉列表添加到报告中,允许用户选择一个或多个团队
  • 我们添加了一个包含团队和团队成员的数据集
如果未选中该复选框,我们希望显示所有事件。(默认设置)

如果选中,我们希望根据创建事件记录单的人员的登录ID筛选报告

如果我在SQL中这样做,我会像

Select 
   (ticket fields) 
From 
   Table 
WHERE TicketCreator IN (
             Select LoginId FROM TeamMembersTable 
             WHERE TeamName in ('IT Ops', 'Developers'))
在SQL或VB等语言中,这很简单

在SSRS中,我不太清楚如何做到这一点。我已经了解到,我可以使用自定义代码使用VB来执行更复杂的逻辑(看起来是VB.NET.HOORAY!熟悉的领域)

因此,我添加了自定义代码,并验证了我可以读取报表参数的值,但我始终不知道如果参数值为真,如何应用过滤器。这是我得到的

Public Sub ApplyTeamFilter() 

    ' Report.Parameters("LimitByTeam") is a 
    ' boolean report parameter that I'm able to access
    ' so I've got the IF statement worked out


    If Report.Parameters("LimitByTeam").Value = True Then
                 ' Pseudo-code - I'm looking for something like Report.Filters.Add(filterstatement)
                 ' Alternatively a way to change this to a function to return a list of items from 
                 ' the Team MembersTable table and use it in a custom expression.
     End If
End Sub
问题是,我似乎找不到报表对象的Filters属性,也找不到任何让我找到它的方法。因为我在那里找不到它,所以我把搜索范围扩大到这里面的所有东西,但找不到它,甚至找不到任何类似于我尝试的方法的东西

我也在尝试这样做,因为我想我看到了一种使用此函数的方法:

Public Function IsLoginIdInTeam(ByVal LoginId as String, byVal Team As String) As Boolean

    '  Report.Parameters("LimitByTeam") is a 
    ' boolean report parameter that I'm able to access
    ' so I've got the IF statement worked out


    If Report.Parameters("LimitByTeam").Value = False Then
        Return True ' Default
    Else
        ' Access the TeamMembers table and look for a match
                ' Something like 
                ' Convert.ToBoolean(Report.DataSets!TeamMembers.Compute(Count, "TeamName = '" & Team & "' AND LoginId = '" & LoginId & "'")

     End If
End Function
但我也不知道如何访问报表中的数据集,更不用说与它们交互的语法了。伪代码使用System.Data.DataTable,但我怀疑SSRS数据集是另一个野兽


我是否遗漏了一些显而易见的东西?我是否应该放弃在报告中以这种方式进行过滤,尝试另一种方法,比如更改数据集中的原始查询?

我不太喜欢SSRS中的布尔参数(或者SQL中的
BIT

WHERE @MyBool OR @MyOtherBool
这是必须的

WHERE @MyBool = 1 or @MyOtherBool = 1
因此,如果我有一个SSRS报告,其中包含一个名为
MyBoolParam
的布尔值和一个名为
MyMultiSelectTextParam
的多值文本参数,那么类似这样的SQL查询将起作用:

SELECT 
   MyField,
   MyOtherField
FROM
   MyTable t
WHERE
   @MyBoolParam = 1
   OR
   t.MyField IN ( @MyMultiSelectTextParam)
(布尔参数的首选替代方法实际上是一个包含可能值的字符串,但在查询中也会以相同的方式处理。)


如果您不能轻松地更改SQL查询(例如使用第三方SP),那么您也可以通过向SSRS数据集添加过滤器来完成同样的事情。右键单击“报告数据”窗格中的数据集并查看数据集属性。过滤器窗格将允许您添加为每行计算的条件。我没有在多值参数中使用过这么多,但IN运算符应该可以做到这一点。

真的,如果我很笨,应该做一些完全不同的事情,请告诉我。我已经习惯了标准的.NET开发,有时我希望所有的东西都是相似的,但我忽略了显而易见的东西。我想知道我是不是因为这个而问了一些愚蠢的问题——比如有人习惯于骑自行车,试着学着骑滑板,然后说“救命!我找不到把手!”如果我对去哪里找和找什么有一个大致的概念,我通常擅长研究如何做事情。我对SSR完全不感兴趣。不需要自定义代码。您可以在通过SSR传递的SQL中使用这些参数。在接下来的几分钟里,我会写一个简单的例子并添加一个答案。如果不容易的话,那就糟了。我就是那个在滑板上寻找把手的孩子。非常感谢。我现在就去试试。A+表示努力?SSRS是一款相当不错的产品。大多数事情应该是容易的,真的是。我脑海中能想到的大多数例外都与页面布局有关。数据查询和过滤通常工作良好。(我将在我的答案中添加一些实现这一点的替代方法。)