質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

Q&A

解決済

2回答

1501閲覧

SQL Server レポーティンサービス(レポートビルダー)でのパラメータ検索指定

hirota_akiyoshi

総合スコア12

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL Server Reporting Services

SQL Server Reporting Services (SSRS)はMicrosoftが開発したサーバベースのレポートジェネレータです。組織的なレポートの作成、配置、管理に役立てることのできるツールやサービスが豊富に用意されています。

0グッド

0クリップ

投稿2021/05/14 05:20

レポートビルダーで作成したレポートを、SQLServerへ移して利用しています。
レポート作成時、パラメーターで抽出条件として指定しています。
パラメーターで指定できる項目は、マスターテーブルから取得して選択できるようにしています。
そこで、表示する内容が多い為、検索機能が付けられないかと考えていますが、
実現できません。
PHP、Java等のWeb系の言語を利用すれば、実現は可能です。
ただ、レポートビルダー、レポーティングサービスの機能範囲で模索しています。

試したこと
1.検索用としてパラメータを1つ用意
2.条件指定用としてパラメータを1つ用意
3.1.のパラメータの内容を2.のパラメータのWhere条件とし、表示される内容を絞り込む
絞り込んだ内容から選択する。
ここまでは、想定の通り
4.さらに条件を追加する為に1.の検索内容を変更すると
2.の内容が書き変わる為、先に選択した条件が保持できない為、抽出条件として追加できない

実装したいことは
プルダウンメニューの中から検索した項目を元に、レポートを作成する為の元データを抽出する
そのための抽出パラメーターを準備する段階で、検索、指定を繰り返し、抽出条件を作成する。

実現されている方、みえましたらアドバイスよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hihijiji

2021/05/14 09:57

階層的な検索条件指定は恐ろしく困難かと… 例えば、車の販売履歴の一覧を表示するとして、 販売日、販売担当者、車種の検索項目を設けるとします。 そこで販売日をしたら、販売担当者と車種の選択肢が絞り込まれる とかなら出来たと思います。
hirota_akiyoshi

2021/05/15 13:57

回答ありがとうございます。 今のところ、変数とカスタムコードで思案中です。選択した内容を変数に保持しつつなんとかできないかと考えてます。もう少し考えてみます。
hirota_akiyoshi

2021/05/18 04:49

その後 カスタムコードにクラスを定義して、クラス内で値が保持できないかと思いましたが、 パラメータに変更があるととクリアされるようです。またはうまくインスタンス化されていない のかも? いずれにせしろ無理そうです。
guest

回答2

0

自己解決

回答頂いた方々、ありがとうございました。
結局、PHP、jquery(sumoselect)で対応することにしました。
使いこなせてないですが、select要素の機能追加では、
sumoselectはかなり便利そうです。

投稿2021/06/16 04:20

hirota_akiyoshi

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もし私の理解がまちがっていたら申し訳ないですが
パラメータによって値と項目指定をしてレポートを絞り込んでいくことを
意図していると読み取りました。

レポートビルダーではINSERT文もT-SQL構文も利用は可能ですので

  • 検索条件追加の度に、レポートの呼び出しをするのを許容する
  • 検索条件はすべてANDで結合する

という条件なら、以下のように、検索条件をテーブルに保存するやり方があるかと考えます。

SSRS(rdlファイル) のパラメータは
@Parameter1(検索パラメータ1)
@Parameter2(条件指定パラメータ1)
@SessionString (ブラウザなどから渡す一意の文字列)
@clearParams(条件をすべて消すかどうか決める 1 なら削除し、何もしない)

SQL

1CREATE TABLE tmp_SearchParameter 2( 3 SessionString nvarchar(100) NULL, -- 作業するユーザーを区別する何らかの一意な文字列 4 Parameter1 nvarchar(100) NULL, -- Value 5 Parameter2 nvarchar(100) NULL -- ColumnName 6) 7

を用意しておきます。

レポートの抽出クエリ(データセットの中身)を以下のようにします。

SQL

1------ ここから 2IF @clearParams = 1 3BEGIN 4 DELETE 5 FROM tmp_SearchParameter 6 WHERE SessionString = @SessionString 7 AND SessionString IS NOT NULL 8END 9ELSE 10BEGIN 11INSERT INTO tmp_SearchParameter 12SELECT 13 @SessionString, @Parameter1, @Parameter2 14 15SELECT 16* 17FROM 18 抽出するテーブル 19WHERE 20 (検索項目1 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目1' AND SessionString = @SessionString) 21 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目1' AND SessionString = @SessionString) = 0) 22AND (検索項目2 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目2' AND SessionString = @SessionString) 23 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目2' AND SessionString = @SessionString) = 0) 24AND (検索項目3 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目3' AND SessionString = @SessionString) 25 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目3' AND SessionString = @SessionString) = 0) 26AND (検索項目4 = (SELECT TOP 1 Parameter1 FROM tmp_SearchParameter WHERE Parameter2 = '検索項目4' AND SessionString = @SessionString) 27 OR (SELECT COUNT(Parameter1) FROM tmp_SearchParameter WHERE Parameter2 = '検索項目4' AND SessionString = @SessionString) = 0) 28END 29------ ここまで

呼び出し1回目
@clearParams = 0

呼び出し2回目 項目1の指定
@SessionString = 'SESSION1'
@Parameter1 = '値1'
@Parameter2 = '検索項目1'

呼び出し3回目 項目2の指定
@clearParams = 0
@SessionString = 'SESSION1'
@Parameter1 = '値2'
@Parameter2 = '検索項目2'

呼び出し4回目 項目3の指定
@clearParams = 0
@SessionString = 'SESSION1'
@Parameter1 = '値3'
@Parameter2 = '検索項目3'

このように渡します。

項目4つめも同様にすると、すべての条件が適用されます。
ここまでだと、1~3で抽出されたものになります。

もちろんこんなことをしなくても、目的とするデータそのものを別の作業テーブルとして作り
レポートパラメータ経由で絞り込んでいっても良いかと思います。
その際には、Webブラウザなどから作業中のユーザーを区別する文字列項目を作業テーブルに追加し、
それを条件として加えて表示・項目指定の処理をする必要があります。

投稿2021/06/02 00:46

t-takayama

総合スコア167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirota_akiyoshi

2021/06/12 13:23

アドバイスありがとうございます。 テーブルを作成する方法は、今のところ除外してしています。 パッケージソフトのデータベースに対してリンクサーバーを利用してアクセスしている為、不要な更新を避けるためです。 やはり、phpとjavascript及びjqueryで考えています。アドバイスの内容は、今後の参考にしたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問