0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RDLのデータセットのフィルターでOrを使用する方法

Last updated at Posted at 2021-07-22

はじめに

SSRS(SQL Server Reporting Services)を使用している方がどのくらいいるのかわからないのですが、何か問題が起きたときに、なかなか解決方法が見つからないことが多いです。
.Net FrameworkでWPF開発をしていた時に、レポートを作るのに、Microsoft Reporting Service(RDLC)を使っていました。
ところが、.Net5で開発をしようとすると、Microsoft Reportは使えないことがわかりました。
記事執筆時点では、MicrosoftがMictosoft Reportは未対応だったようで、何か代替案はないかと探していくうちに、SQL Serverであれば、SSRS(RDL)が使えることがわかりました。使い方や開発方法は、ほぼMicrosoft Reportと同じでした。

課題

さて、今回のタイトルにあるフィルターについてですが、データセットを作成後、パラメータでデータを絞り込めるようにしようとしました。
image.png

この図にあるのですが、UsageDateFromというのはNullを許容した日付で、UsageDateToという同じくNull許容した日付がほかにあります。
これをServiceDateというパラメータで絞り込みをしています。
日付範囲を指定して、

UsageDateFrom <= ServiceDate <= UsageDateTo

というよう感じにしたいわけです。
要するに、いつから、いつまで提供したサービスを表示したいというような感じです。

ところが、まだサービスが終了していない場合、UsageDateToはNullになっています。
つまり、クエリとして書くと

UsageDateFrom <= ServiceDate And (UsageDateTo Is Null Or UsageDateTo >= ServiceDate)

といった感じになります。

ところが、フィルターは、上からAndで結合されてしまうため、Or条件を付加する方法がわかりませんでした。
いろいろと試行錯誤した結果、ようやく一つの解決方法がわかったのでご紹介させていただきます。

解決

フィルターは「式」「演算子」「値」「データタイプ」で構成されていますが、「式」と「値」にさまざまな式を入力することができます。
image.png
これらを駆使してOrを実現していきます。

UsageDateFrom <= ServiceDate

の部分は以下のようにすでに設定して済み
image.png

次が問題となる箇所です

UsageDateTo Is Null Or UsageDateTo >= ServiceDate

まずは式のfxをクリックして以下のように記述します。Or ではなくOrElseとするのが肝かな。
image.png
そして、ここがポイント!
データタイプをブールにします。そして値をTrueにすることで実現できました
image.png

SSRSを使用している方がどのくらいいるのかわかりませんが、Power BIでもRDLフォーマットは使用できるので、学んでおいても損はないかなと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?