SSRS で新規陽性者数の推移グラフを作ってみる【第4回】

第3回からの続きです。現在できてるレポートを確認してみます。

現時点でのレポート

目標となるレポートは以下の通りで、今回は指標値(新規陽性者数、1週間平均、前週平均)を表示してみます。

目標とするレポート

記事中で利用しているファイルは以下から取得してください。 こちらが本家です。

フィルターの修正

まず、このレポート全体の数値は「都道府県=ALL」のデータを対象にしていることは 第2回 でも記載しました。なので「フィルター」という機能でWHERE句にあたる条件を設定しているのですが「グラフデータ」に対して設定していました。今回追加する指標値も当然ながら「都道府県=ALL」ですが、また同じような条件を設定する必要がでてきます。

ということで、フィルターは「グラフデータ」で行うのではなく「データセット」で行うように修正します。これにより、このデータセットを利用するコントロールはすべて「当道府県」を意識する必要がなくなります。まず、グラフのプロパティのフィルターより、都道府県の条件を選択状態にして「削除」ボタンで削除します。

フィルターの修正(1)

次にデータセットのプロパティを選択します。

フィルターの修正(2)

フィルターに「都道府県=ALL」の条件を追加します。

フィルターの修正(3)

「実行」ボタンにより結果が変わらないことを確認しておいてください。

指標値の出力方針を決定

今回追加する指標値をどのように出力するかをあらかじめ決定しておきます。

項目名内容出力方針
新規陽性者数     「情報更新日」の「新規陽性者数」データセットの最初の行の「新規陽性者数」を出力
前日比陽性者数「新規陽性者数」(情報更新日)-「新規陽性者数」(情報更新日ー1日)データセットに「前日新規陽性者数」「新規感染者数前日比」を追加し「新規感染者数前日比」の絶対値を出力
陽性者数傾向「前日比陽性者数」>0の場合「↑」、=0の場合「→」、<0の場合「↓」インジケーターを利用し 「新規感染者数前日比」 の値によってアイコンを変化させるように設定
一週間平均「情報更新日」を含む直近7日間の「新規陽性者数」の平均値データセットに「連番」「相対日数」「週開始日」を追加し「週開始日」単位で集計した場合の「連番」=0の「新規陽性者数」の平均値を出力
前週平均「一週間平均」の前7日間の「新規陽性者数」の平均値「一週間平均」と同様だが「連番」=7の「新規陽性者数」の平均値を出力
指標値の出力方針

データセットに新規追加する項目について説明します。
データセットに項目追加する方法には2通りあります。「データセットの元になるクエリ(SQL)そのものに項目を追加する方法」「クエリ(SQL)の取得項目とは別に計算列として項目を追加する方法」です。今回はどちらも使います。

尚、「一週間平均」「前週平均」でいうところの「週」ですが、目標とするレポートの実際の動作を確認すると、日曜始まりの週ではなく「情報更新日」から遡って7日間単位で区切った単位を週として算出していました。これは、別の記事である「週別集計をSQLで行う」の「最終日から数えて7日単位の集計」に該当します。今回もそのテクニックを利用しますので参照しておいてください。

「前日新規陽性者数」

クエリ(SQL)そのものに列追加します。LEAD 関数を利用して、日付の降順で次のレコードにある「新規陽性者数」を取得するようにします。

新規感染者数前日比

クエリで取得した項目を利用した計算列で定義します。「新規陽性者数」-「前日新規陽性者数」です。

「連番」

クエリ(SQL)そのものに列追加します。ROW_NUMBER 関数を利用して、日付の降順で0からの連番を振ります。目的は7日間単位で集計するための項目「週開始日」を定義するためです。

「週開始日」

クエリで取得した項目を利用した計算列で定義します。「連番」を7で割った余り を設定します。連番は日付の降順で0から振るので、0~7が繰り返されることになります。これは週の開始日からの相対日数ということになります。

「相対日数」

クエリで取得した項目を利用した計算列で定義します。「日付」に「相対日数」を加算(連番が日付の降順なので加算)した日付を設定します。つまり週の始まりの日ということになります。

データセットへの項目追加

前項の方針に従い、まずはデータセットへ項目追加してみます。
データセット(DataSet1)を選択し、右クリック→「データセットのプロパティ」を開きます。
まず、クエリ(SQL)そのものに列追加するため、以下のように SQL を修正します。

SELECT T.*
     , LEAD(新規感染者数,1)
         OVER (PARTITION BY 都道府県
                   ORDER BY 日付 DESC ) AS 前日新規感染者数
     , ROW_NUMBER()
         OVER (PARTITION BY 都道府県
                   ORDER BY 日付 DESC) - 1 AS 連番
  FROM CSVFILES...newly_confirmed_cases_daily#csv AS T
データセットへの項目追加(1)

SQLが正しいかどうかは「クエリデザイナー」で実行してみて確認してください。
問題なければ「フィールド」を選択すると、追加項目が新たに表示されていると思います。

データセットへの項目追加(2)

次に計算列を追加します。「追加」ボタンを押下して「相対日数」「週開始日」「新規感染者数前日比」を追加します。

データセットへの項目追加(3)

順番に計算式を定義していきます。まず「相対日数」の「式」ボタン(fx)から以下の式を設定します。

=Fields!連番.Value Mod 7
データセットへの項目追加(4)

同様に「週開始日」には以下の式を設定します。

=DateAdd(DateInterval.Day,Fields!相対日数.Value,Fields!日付.Value)

最後に「新規感染者数前日比」には以下の式を設定します。

=Fields!新規感染者数.Value-Fields!前日新規感染者数.Value

これでデータセットへの項目追加は完了です。

「表」を使ったデータセットのテスト出力

クエリ(SQL)の変更はクエリデザイナーでその場で確認できますが、計算列として追加した場合は出力されません。少し脱線しますが、これを簡単に確認する方法をご紹介します。
まず、少し余白を設けてそこに「表」を挿入します。

データセットのテスト出力(1)

「表」「マトリックス」「一覧」というのはデータセットと紐づけて集約や集計をしながら出力する機能を持つオブジェクトです。「表」は縦(行)が可変「マトリックス」は縦(行)と横(列)が可変「一覧」は自由配置という使い分けになります。単純なデータセットの中身の確認は一番直感的に分かりやすい「表」を使います。

デフォルトで3列が表示されているので、今回テストしたいデータセットの列数8まで「列を挿入」→「右揃え」で追加していきます。(「右揃え」っていう日本語は直感的ではないですが翻訳の問題でしょうね、、、)

データセットのテスト出力(2)

次に「Tablix のプロパティ」の「データセット名」でテストしたいデータセットを選択します。

データセットのテスト出力(3)

そうすると「表」の列でデータセットの項目が選択できるようになるので、全項目を設定していきます。表示「フォント」を変更しておかないと日本語の場合は文字化けしますのでご注意を。

データセットのテスト出力(4)

この状態で「実行」ボタンでプレビューしてみてください。データセットの中身がずらっと表示されると思います。これでデータセットの計算列まで含めて意図したような結果になっているかを確認できます。

データセットのテスト出力(5)

この程度であればいつでもできるので、確認できたら「表」は削除しておいてください。

「一覧」の動作確認

前項でテスト出力した「表」は削除し、さっそく指標値のラベルを配置していきたいのですが、これにはちょっとコツが要ります。

出力したい項目はその「データセット」の1件目だったり、平均値を集計した結果だったりするわけですが、複数件のデータを相手する場合は「一覧」を配置し、その下に「テキストボックス」を置くとするのが便利です。

「一覧」というのはデータセットのテスト出力で配置した「表」と原理的には同じですが、項目は自由に配置できるという特徴があります。

簡単に言葉では書けますが、少しイメージしにくいと思いますので、またまた脱線してしまいますが、簡単に試してみたいと思います。

最初に余白に「一覧」を配置します。

「一覧」の動作確認(1)

配置した「一覧」のサイズを少し広げて列部分を選択状態にして右クリック→「Tablix のプロパティ」を選択します。

一覧の動作確認(2)

前項と同様にデータセットを選択します。

一覧の動作確認(3)

次に、この「一覧」の中に(厳密には一覧の配下に)、 前回の「情報更新日」と同じ要領で、テキストボックスを配置してプレースホルダーを作成してください。プレースホルダーのプロパティでは上位の「一覧」で既に選択しているデータセットの項目が「値」で選択できるようになっていると思います。

一覧の動作確認(4)

以下のように適当にいくつかテキストボックス+プレースホルダーを作ります。
プレビュー時にわかりやすいように一覧とテキストボックスの背景色とか変えてみました。

一覧の動作確認(5)

ここで「実行」ボタンでプレビューしてみてください。

一覧の動作確認(6)

「一覧」は自由配置と言ったイメージが少しは伝わるでしょうか。

前項の「表」にしても今回の「一覧」にしても(やってませんが「マトリックス」にしても)原理はすべて同じです。今回は単純にデータセットの内容を出しましたが、グルーピングして集約したりできますので、それを利用して指標値を出力したいと考えています。

脱線しすぎて長くなったので、次回に続きます、、、、、

BISQLServer,SSRS

Posted by takmaru