Skip to main content
Keita Ogawa posted in Japan

サンプルにある通り、全レコードにStart atという日付があり、Created atとの差として、book in advanceと言う数値があります。

特定の日付を選択すると、その日付から計算して何日前に予約が何件入ったかをグラフにして、予約数を累計としています。なので0日に向けて基本的には多くなります。

このグラフに特定の日付の1年前、1か月前、1週間前の同じロジックの数値を折れ線グラフで追加したいのですがどうすればいいでしょうか。

2022年11月1日を選択している時は、2021年11月1日の予約の何日前から予約が入ったかを累計で表示する、といった形です。

もし可能ならcancelされた予約をcancelされた時点から除外したいのでcancel day in advanceというstart atから何日前にキャンセルされたか表す数値もあります。cancel day in advanceを日付以降から除外してグラフを作成できるでしょうか。​

よろしくお願いします。

7 comments
  1. Oct 24, 2022, 4:19 AM

    補足ありがとうございます。未経過の部分は表示しないということですね。

    今回のように1レコードに期間等を表す複数の日付が存在し、その日毎の値を集計したいというときは、開始日から終了日まで(今回でいうとCreatedAtからStartArまで)の日付データを持たせると扱いやすいです。

    補足ありがとうございます。未経過の部分は表示しないということですね。今回のように1レコードに期間等を表す複数の日付が存在し、その日毎の値を集計したいというときは、開始日から終了日まで(今回でいうとCreatedAtからStartArまで)の日付データを持たせると扱いやすいです。​このように日付を持たせるため、データソースのリレーションは範囲指定にします。今回のケースでは日付で範囲指定するのではなく

    このように日付を持たせるため、データソースのリレーションは範囲指定にします。今回のケースでは日付で範囲指定するのではなく「N日前からゼロ日まで」という日数による指定を行います。リレーション相手の子テーブルはゼロ以上の値しか持ちませんので、リレーションのキーは次のようになります。キーにBookingDaysInAdvanceを使うのではなくDATEDIFFを使うのは、BookingDaysInAdvanceが整数値でなく取り回しがしづらいためです。

    image

    リレーションを変更して1レコードに対しCreatedAtからStartAtまでの日付を持てるようになったら、予約と取消の発生をそれぞれカウントさせる式を作ります。単に予約が発生したら(=CreatedAtの日に)1を加算、取消が発生したら1を減算しています。

    image

    これにより、日毎に予約と取消が分かるようになります。

    image

    あとはこの2つを足し合わせて累計を取れば、予約をカウントしつつキャンセルになればその時点から除外することができます。ついでに未経過の部分はグラフを表示しないようにします。

    image

    ここまでで指定した日付のグラフを作ることができます。残るは指定した日の1年前・1ヶ月前・1週間前のグラフを重ねる件です。ひとつの日付を指定しつつ他の日付を​取るというのを単純なフィルタで実現することはできませんので、パラメータを併用します。指定日をパラメータで決めるようにし、OR条件を使ってその1年前などの他の日もビュー上で使用できるようにします。しかし、単に1年前の日付も含めるようにするだけでは見分けがつかなくなりますから、見分けるためのフィールドも同時に作成します。

    image

    image

    あとはこれまで作成したフィールドを使ってビューを構築します。​累計の表計算の順序などはビューの並べ替えなども影響しますので、これはご自身の作り方に沿って適宜調整が必要になります。

    image

0/9000