如何根据East / West参数过滤我的状态列?

时间:2013-05-08 20:34:45

标签: tsql reporting-services ssrs-2008

我有一个包含不同状态列的报告。如何从我的具有东西方而不是单个状态的参数中过滤这些状态?

我对状态列表的查询是:

select distinct
state
from contract

我对参数的查询是:

select distinct
case when  STATE = 'CA' or STATE = 'WA' or STATE = 'MO'
        or STATE = 'OR' or STATE = 'NV' or STATE = 'ID'
        or STATE = 'MT' or STATE = 'WY' or STATE = 'UT'
        or STATE = 'AZ' or STATE = 'CO' or STATE = 'NM'
        or STATE = 'ND' or STATE = 'SD' or STATE = 'NE'
        or STATE = 'KS' or STATE = 'OK' or STATE = 'TX'
        or STATE = 'LA' or STATE = 'AR' or STATE = 'IA'
        or STATE = 'MN' or STATE = 'HI' or STATE = 'AK' then 'West'

    when   STATE = 'MI' or STATE = 'OH' or STATE = 'PA'
        or STATE = 'NJ' or STATE = 'WI' or STATE = 'IL'
        or STATE = 'IN' or STATE = 'KY' or STATE = 'TN'
        or STATE = 'MS' or STATE = 'AL' or STATE = 'GA' 
        or STATE = 'FL' or STATE = 'SC' or STATE = 'NC'
        or STATE = 'VA' or STATE = 'WV' or STATE = 'MD'
        or STATE = 'DE' or STATE = 'CT' or STATE = 'RI' 
        or STATE = 'NY' or STATE = 'MA' or STATE = 'VT'
        or STATE = 'NH' or STATE = 'ME'  then 'East'
    else null end as 'Territory Selection'
from contracts

我的参数显示为[All] [West] [East]。我想如果我将我的过滤器设置为[State] IN [Territory Selection],它会将状态过滤为属于东或西,但是它没有按预期工作。任何指针都将不胜感激!

1 个答案:

答案 0 :(得分:2)

  1. 使用“allow null”复选框设置名为“EastWest”的参数。设置一个简单的查询来获取“来自查询的可用值”的数据,如:

    Select 'West' as Territory
    union
    Select 'East'
    
  2. 像上面那样创建另一个数据集,但是把它放在CTE中并像这样引用第一个参数:

    With a as 
    (
    Select 
        State
    , case when  STATE in ('CA','WA', 'MO', 'OR' ,'NV' ,'ID','MT' ,'WY' ,'UT','AZ' ,'CO' ,'NM','ND' ,'SD' ,'NE'
            ,'KS' ,'OK' ,'TX','LA' ,'AR' ,'IA','MN' ,'HI' ,'AK') then 'West'
        when  State in ('MI' ,'OH' ,'PA','NJ' ,'WI' ,'IL','IN' ,'KY' ,'TN','MS' ,'AL' ,'GA','FL' ,'SC' ,'NC'
            ,'VA' ,'WV' ,'MD','DE' ,'CT' ,'RI','NY' ,'MA' ,'VT','NH' ,'ME')  then 'East'
        end as 'Territory Selection'
    from (State Listing)
    )
    Select State
    from a
    where [Territory Selection] = isnull(@EastWest,[Territory Selection])
    
  3. 请仔细注意谓词,因为它基本上表明:“当变量为null时,通过将列与自身相关联来选择所有内容”

  4. 创建另一个“隐藏”变量,将其称为“状态”并将其绑定到您创建的上述数据集。你基本上把一个小的变量拿到一个变量,然后从一个实际的东西中得到你需要的数据,这个东西在一个列之前就不存在了......你需要一个不同的标签,而不是为每个状态实例列出的东西。 / p>

  5. 您现在可能有一个常规数据集,如

    Select (thing)
    from (real table)
    where states in (@states)