0

私の質問を見に来てくれてありがとう。

パラメータを追加したい関数ごとの SQL グループがあります。(それが可能であれば)

テーブルの2列のパラメータを関数にスプ​​ライスしようとしましたが、うまくいかないようです。

この関数は、レコードをカウントするテーブルを作成します。「チーム」と「場所」によるパラメーターでフィルター処理できるようにしたいと考えています。この情報をデータセットに追加してフィルタリングできるようにするにはどうすればよいですか?

通常、次を使用してそれらを追加します。

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
4

1 に答える 1

0

1 つまたは複数の値を使用するパラメーターを使用する場合、それらをデータセットに関連付けることもできます。

仮のシーケンスで注文と人がいるが、特定の人だけの注文を見つけたいとします。いくつかの手順に従います。

  1. パラメータ専用のデータセットを作成し、それを「People」と呼びます。この例では、自己実行するテーブル変数を使用し、この「クエリ」ボックスをデータセットに配置します。

    declare @People Table ( personID int identity, person varchar(8));
    
    insert into @People values ('Brett'),('Sean'),('Chad'),('Michael')
    ,('Ray'),('Erik'),('Queyn');
    
    select * From @People
    
  2. 最初に依存関係から始めたいと思います。これは、整数として設定した変数 @Person であり、「複数の値を許可する」をチェックします。次に、変数の左側のペインで [使用可能な値] を選択します。[クエリから値を取得] を選択し、1 から [人] データセットを選択し、[値] フィールドとして [PersonID] を選択し、ラベルとして [人] を選択します。

  3. これでパラメーターがバインドされ、注文セットに進むことができます。再びデータセットを作成しますが、これを「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)
    
  4. レポートに Tablix 項目を入力し、'OrdersMain' の値を Tablix に入力すると、ユーザーは Brett、Sean などのラベルを表示するように求められますが、データセットの範囲を制限するために注文に ID が使用されます。 .

オプション

別のデータセットの SUBSET の人々に対してステップ 1 を繰り返し、それを「デフォルト」と呼ぶことができます。次に、ステップ 2 の拡張ですべてをそのままにしますが、この新しいデータセットをクエリから取得した「デフォルト値」に追加します。このようにして、最も頻繁に使用する一部の人を取得する一時テーブルを作成し、代わりにそれらをデフォルトに設定できます。これにより、呼び出されたときにレポートが自動的に実行されます。

フィルタリングは、SSRS では他のことも意味します。任意のデータセットで、左側のペインに「フィルター」が表示され、これを適用できます。これは最初に式全体を評価してからフィルタリングすることに注意してください。この使用 IMHO は、かなり小さくて高速な共有データセットに最適です。または、Tablix 要素で filter 句を使用することもできます。これは、同じセットから 3 つのオブジェクトが必要であるが、実行後に異なる述語が評価されるが、多くのオブジェクトに対して 1 つのデータセットを再利用してスコープを制限する場合に適しています。

于 2013-09-26T18:22:06.010 に答える