2017-05-31 11 views
0

私は、専用チーム、一般ユーザー、またはその両方の統計を見ることができるようにパラメータを設定するレポートを用意しています。私は手動で私のSQLに区別していた場合、私は、[ユーザー名]( '%専用')のようなチーム間を区別するためのパラメータにLIKEを使用する

専門チームのため

[ユーザー名

を使用します]は好きではない( '%Dedicated')

通常のユーザーの場合(専用チームメンバーは常にユーザー名の末尾にタグ付けされています)

これらのSQL where句をSSRSパラメータ式に変換する構文についてはわかりません。私は他のための一つのパラメータと

=好きではない( '%専用')

ため

=同様に( '%専用')

を試し

= L IKE( '%')が、それは投げ

と[ユーザー名]は私のSQL

を@Team

両方のための

エラー "式が期待される"ので、私は構文が間違っている必要があります。誰も助言することはできますか?私は通常、SQLに直接LIKEを入れますが、この場合、時には、選択したオプションに応じて好きではないようにする必要があります。

WITH [data] as 

(
SELECT 

iif([Agent Name] like '%Robert Dyas', 1, 0) as [Dedicated] 

,convert(date,format(Dateadd(hh,1,[Start Time]),'dd/MM/yyyy'),103) as [Date], 
[Client Name], 
[Account], 
sum(iif([Type] in ('Normal operator call','Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [Calls Offered], 
sum(iif([Type] in ('Normal operator call'),1,0)) as [Calls Answered], 
sum(iif([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [Ring Offs], 
sum(iif([Ring (secs)] <= 20 AND [Type] in ('Normal operator call'),1,0)) as [Answered in 20 Secs], 
sum(iif([Type] in ('Normal operator call'),[Ring (secs)],NULL)) as [Total Ring Time], 
sum([connected (secs)]) as [Total Connected Time], 
sum(iif([Ring (secs)] > 5 AND [Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [CRO After 5 Secs], 
avg(iif([Type] in ('Normal operator call'),[Ring (secs)],null)) as 'Avg Time to Answer', 

avg(iif([Type] in ('Normal operator call'),[Connected (secs)],null)) as 'Avg Call Time' 


,sum(iif(rtrim([rhoutcome]) = 'MESSAGE',1,0)) AS [Total Messages] 

    FROM ipr.dbo.InboundCallsView IC left JOIN [iAnalyse].[dbo].[iAnalyse3_iResultsHeaderXML] ires ON ic.[Reference] = ires.[rhcallref] 


    WHERE [account] = '106844' 


    AND Dateadd(hh,1,[Start Time]) between '2017-05-29' AND '2017-05-31' 





    group BY iif([Agent Name] like '%Robert Dyas', 1, 0), format(Dateadd(hh,1,[Start Time]),'dd/MM/yyyy'),[client name],[account] 

) 

select 
    * 
from [data] as [d] 
where d.Dedicated = 1 

答えて

1

EDIT:

編集SQLを追加するために、異なるアプローチ

代わりの下からiif()を、

where ([Agent Name] like '%' + (@Parameter) or (@Parameter) is null)

あなたは小さなデータセットを使用することができます使用してみてくださいパラメータの値を作成する:

select 
    null as [Value], 
    'All' as [Label] 

union all 

select 
    'Dedicated' as [Value], 
    'Dedicated' as [Label] 

union all 

select 
    '' as [Value], 
    'Not Dedicated' as [Label] 

Text型であることが、null値を許可するようにSSRSでのパラメータ・アップを設定し、複数の値を受け入れません。このデータセットを使用して、パラメータの値/ラベルを指定します。

うまくいけば、これはもう少し速いですね!あなたのような何かを行うことができ、あなたのSQLで


..

iif(UserName like '%Dedicated', 1, 0) as [Dedicated] 

が次にあなたがするフィルタリングすることができます(私は速記iif()ではなく、単純化のためcaseを使用)。..

where Dedicated in (@Parameter)

Y私たちのパラメータは、複数の定義された値を持つことができます -

  • 専用= 1
  • = 0

は、ユーザーが複数の値を選択することができ専用されていません。

作成した[Dedicated]フィールドを使用できるようにするには、SQLをCTEまたは派生テーブルに配置する必要があります。

これは私がCTEでこれを行うだろうかのモックアップである:私はあなたのSQLに近づくだろうかの

with [data] as 
(
    select 
     *, 
     iif(t.UserName like '%Dedicated', 1, 0) as [Dedicated] 
    from dbo.[Table] as [t] 
) 
select 
    * 
from [data] as [d] 
where d.Dedicated in (@Parameter) 

バージョン:私はこの条件を追加するとき

with [data] as 
(
    select 
     iif([Agent Name] like '%Robert Dyas', 1, 0) as [Dedicated], 
     convert(date, format(Dateadd(hour, 1, [Start Time]),'dd/MM/yyyy'),103) as [Date], 
     [Client Name], 
     [Account], 
     iif([Type] in ('Normal operator call', 'Caller rang off', 'Caller rang off during divert', 'No suitable operator logged on'), 1, 0) as [Calls Offered], 
     iif([Type] = 'Normal operator call', 1, 0) as [Calls Answered], 
     iif([Type] in ('Caller rang off', 'Caller rang off during divert', 'No suitable operator logged on'), 1, 0) as [Ring Offs], 
     iif([Ring (secs)] <= 20 and [Type] = 'Normal operator call', 1, 0) as [Answered in 20 Secs], 
     iif([Type] = 'Normal operator call', [Ring (secs)], null) as [Total Ring Time], 
     [connected (secs)] as [Total Connected Time], 
     iif([Ring (secs)] > 5 and [Type] in ('Caller rang off', 'Caller rang off during divert', 'No suitable operator logged on'), 1, 0) as [CRO After 5 Secs], 
     iif([Type] = 'Normal operator call', [Ring (secs)], null) as [Avg Time to Answer], 
     iif([Type] = 'Normal operator call' ,[Connected (secs)], null) as [Avg Call Time], 
     iif(rtrim([rhoutcome]) = 'MESSAGE',1,0) as [Total Messages] 
    from ipr.dbo.InboundCallsView as [IC] 
     left join [iAnalyse].[dbo].[iAnalyse3_iResultsHeaderXML] as [ires] on ic.[Reference] = ires.[rhcallref] 
    where [account] = '106844' 
     and Dateadd(hour, 1, [Start Time]) between '2017-05-29' and '2017-05-31' 
) 
select 
    d.[Date], 
    d.[Client Name], 
    d.Account, 
    sum(d.[Calls Offered]) as [Calls Offered], 
    sum(d.[Calls Answered]) as [Calls Answered], 
    sum(d.[Ring Offs]) as [Ring Offs], 
    sum(d.[Answered in 20 Secs]) as [Answered in 20 Secs], 
    sum(d.[Total Ring Time]) as [Total Ring Time], 
    sum(d.[Total Connected Time]) as [Total Connected Time], 
    sum(d.[CRO After 5 Secs]) as [CRO After 5 Secs], 
    avg(d.[Avg Time to Answer]) as [Avg Time to Answer], 
    avg(d.[Avg Call Time]) as [Avg Call Time], 
    sum(d.[Total Messages]) as [Total Messages] 
from [data] as [d] 
where d.Dedicated = 1 
group by 
    d.[Date], 
    d.[Client Name], 
    d.Account 
+0

Stangelyそれは作ります非常に長い処理時間。 [Dedicated]のようなUser Nameは[Dedicated]のように完全に動作し、5秒後に実行されますが、iif( '%Dedicated'のようなUserName、1、0)= 1を追加するか、 2番目のものを選択してから*を選択してみてください。[専用] = 1の場合、それは1時間以上実行され、何らかの理由で実行されます。 – tomdemaine

+0

CTE要素を説明するための答えを追加しました。あなたのように見えますか? – BishNaboB

+0

ITは初めではありませんでしたが、私はあなたのやり方を試しました。実行するにははるかに長い時間がかかっています(実行をキャンセルする必要がありました)。 – tomdemaine

関連する問題