はじめに
SSRS(SQL Server Reporting Services)を使用している方がどのくらいいるのかわからないのですが、何か問題が起きたときに、なかなか解決方法が見つからないことが多いです。
.Net FrameworkでWPF開発をしていた時に、レポートを作るのに、Microsoft Reporting Service(RDLC)を使っていました。
ところが、.Net5で開発をしようとすると、Microsoft Reportは使えないことがわかりました。
記事執筆時点では、MicrosoftがMictosoft Reportは未対応だったようで、何か代替案はないかと探していくうちに、SQL Serverであれば、SSRS(RDL)が使えることがわかりました。使い方や開発方法は、ほぼMicrosoft Reportと同じでした。
課題
さて、今回のタイトルにあるフィルターについてですが、データセットを作成後、パラメータでデータを絞り込めるようにしようとしました。
この図にあるのですが、UsageDateFromというのはNullを許容した日付で、UsageDateToという同じくNull許容した日付がほかにあります。
これをServiceDateというパラメータで絞り込みをしています。
日付範囲を指定して、
UsageDateFrom <= ServiceDate <= UsageDateTo
というよう感じにしたいわけです。
要するに、いつから、いつまで提供したサービスを表示したいというような感じです。
ところが、まだサービスが終了していない場合、UsageDateToはNullになっています。
つまり、クエリとして書くと
UsageDateFrom <= ServiceDate And (UsageDateTo Is Null Or UsageDateTo >= ServiceDate)
といった感じになります。
ところが、フィルターは、上からAndで結合されてしまうため、Or条件を付加する方法がわかりませんでした。
いろいろと試行錯誤した結果、ようやく一つの解決方法がわかったのでご紹介させていただきます。
解決
フィルターは「式」「演算子」「値」「データタイプ」で構成されていますが、「式」と「値」にさまざまな式を入力することができます。
これらを駆使してOrを実現していきます。
UsageDateFrom <= ServiceDate
次が問題となる箇所です
UsageDateTo Is Null Or UsageDateTo >= ServiceDate
まずは式のfxをクリックして以下のように記述します。Or ではなくOrElseとするのが肝かな。
そして、ここがポイント!
データタイプをブールにします。そして値をTrueにすることで実現できました
SSRSを使用している方がどのくらいいるのかわかりませんが、Power BIでもRDLフォーマットは使用できるので、学んでおいても損はないかなと思います。