Hikari
1
DatasetがMonthly cutでの保存方法になっていて、Dataset day が8月であれば全日数08/01/2025 (8/2, 8/3であっても08/01/2025表記になる)のようになっています。
この場合QS上でfilterを追加すると、8月の1日以外の日数も選べるようになってしまい、ユーザーが8月1日以外の日を選択してしまうと8月分のデータが表示されなくなります。
Monthly cut datasetに対して月単位でのフィルターを追加したい場合どのようにするのがベストですか
@Hikari さん、ご質問ありがとうございます。
現在は月の粒度でTRUNCした日付型フィールドに対しフィルターを設定しており、コントロールでの日付の選択が以下のようにカレンダー形式になっているため、ユーザーが「1日」以外を選択した場合にデータが表示されないものと理解しました。認識齟齬があればご指摘ください。
この場合、対応策としてはお持ちの日付型フィールドを基に、「YYYY-MM」のような文字列型の計算フィールドを作成し、フィルターに利用することが検討できます。
例えば、Dateというフィールドに対し以下のような計算フィールドを定義します。
left(toString(Date), 7)
このフィールドに対しフィルターリスト型のフィルターを設定し、コントロールに追加したうえで、コントロールををドロップダウンに設定します。
以上で、年月の単位で選択できるフィルターができます。
※上記の例はフィルターを直接コントロールに配置するフィルターコントロールを利用していますが、パラメータを利用することも可能です。その場合、計算フィールドを分析ではなくデータセット内に定義しておくことで、パラメータの値を計算フィールドとリンクさせることが可能です。
以上、ご確認よろしくお願いします。
Hikari
3
ご回答ありがとうございました。例えばユーザーが直近12か月にデータを絞りたい場合、Date picker filter(スクショ)のように単純に数字を打ち込むだけで直近12か月分のデータに絞れたりするような機能をこちらの方法でも追加可能なのでしょうか?
@Hikari さん、上記でご紹介した方法はあくまで単月を選択するコントロールです。コントロールオプションを「ドロップダウン - 複数選択」にすれば複数月を選択できるようになりますが、数字を入力して直近Nか月を選択する機能を併せ持たせることはできません。
もしそのようなコントロールが必要な場合には、お持ちの日付型フィールドに対し、投稿いただいたような相対日付でのフィルターおよびコントロールを別途配置する必要があります。
なお、複数のフィルターはAND(論理積)もしくは OR(論理和)での連結しかできず、どちらか一方のフィルタ条件が先に合致したらもう一方は評価しない、といった制御はデフォルトではできません。
そのため、実際には複数のフィルターを作るのではなく、指定月と直近Nか月の2つのパラメータの値を評価して表示するか否かを決める計算フィールドを定義し、このフィールドに対しフィルターを適用することで2つのコントロールを上手く併存させることができます。
▼手順
-
2つのパラメータを作成しそれぞれコントロールに配置
specificMonth … 単月指定用パラメータ
※上記投稿の計算フィールド Date_フィルタ用 をデータセット側で定義し値をリンクする
numberOfPreviousMonths … 直近Nか月用パラメータ
-
計算フィールド isMatch を定義
※この例では二つのコントロールに値が入っている場合、直近Nか月の方を優先しています
ifelse(
isNull(${numberOfPreviousMonths}), ifelse({Date_フィルタ用(分析)} = ${specificMonth}, TRUE, FALSE),
ifelse(dateDiff(Date, now(), 'MM') < ${numberOfPreviousMonths}, TRUE, FALSE)
)
-
isMatch に対するフィルターを作成
出来上がったものは以下です。
二つのコントロールが併存しており、指定月のみを入れている場合はその月を、直近Nか月を入れている場合はそちらを優先してNか月分を表示しているのがお分かりいただけるかと思います。
こちらでご希望の挙動となっているか、ご確認お願いします。