やりたいこと
- パラメータの値を特定のカラムが含む行のみを表示する(パラメータがなければすべて選択)
- コントロールには、1の特定のカラムの値をドロップダウンとして表示し、ユーザがフィルタリングできるようにする
例
パラメータ名: DefaultShopID(文字列)
パラメータ値: "4860"
カラム: shop_name_id(文字列)
カラムの値例:
-
"テスト店舗(4567)"
-
"テスト店舗2(4678)"
-
"テスト店舗3(4860)"
ポイント
- 1または2どちらか一方であれば、実装可能であると理解しています
- 1のみの場合は、計算フィールドを追加しそのフィールドでフィルター追加
- 2のみの場合は、shop_name_idカラムをフィルター追加しコントロールに追加
- ユーザに見せたいドロップダウンの表示は、「
テスト店舗(4567)」など店舗名を含む”shop_name_id”カラムの値を表示したい一方で、パラメータとしてダッシュボード初期表示時にフィルタリングする場合にパラメータとして渡すのは”4860”などの店舗IDだけを渡したい(パラメータに店舗名を含みたくない)です
- パラメータをコントロールにそのまま追加してしまうと、パラメータで指定した”4860”がそのままコントロールに表示されてしまいます
- (パラメータで”4860”を指定したら、ダッシュボード初期表示時にはコントロールには
「テスト店舗3(4860)」が選択されており、”4860”の店舗データだけを表示したい)
こちら実現することは可能でしょうか?
ytakahr
2
@candemina さん、ご質問ありがとうございます。
ご要望を正確に理解したいのですが、例えば以下のようなデータがあった場合、コントロールには shop_name_id のフィールド内の値と同じく「テスト店舗(xxxx)」の形式で表示したいが、実際にパラメータに渡す値はID(xxxx)だけにしたいということでしょうか?
上記の例は、コントロールをデータセット内の shop_name_id フィールドとリンクすることで実際の値をドロップダウンに表示しています。パラメータを紐づける際には、コントロールで選択した値がパラメータにそのまま渡ることになり、特定の部分(xxxx)だけ渡すということはできません。
パラメータにID部分だけ渡したい理由が、そのパラメータを他の計算フィールドで利用しているから、ということでしたら、その計算フィールド側で文字列操作を行うことでIDだけ取り出すというやり方になるかと思います。
認識齟齬があればご指摘ください。その際、実際のダッシュボードの画面ショットなどを添えていただけると助かります。
ytakahr
3
もしくは、以下のご要件が妥協できるようでしたら、データセット側の計算フィールドでIDだけを抽出しておき、コントロールで利用することも可能です。
ユーザに見せたいドロップダウンの表示は、「テスト店舗(4567) 」など店舗名を含む”shop_name_id”カラムの値を表示したい
IDのみを取り出す計算フィールドの例
substring({shop_name_id}, locate({shop_name_id}, '(') +1, strlen({shop_name_id}) - locate({shop_name_id}, '(') - 1)
@ytakahr
迅速なご返信ありがとうございます!とても感謝しています。
ご認識の通りでございます。
添付していただいた画像のように、ドロップダウンフィルターには「店舗名(1001)」のようなユーザフレンドリーな表示をさせたい一方で、パラメータとしては店舗IDだけを渡したい、という要件になります。
パラメータにID部分だけ渡したい理由としては、
- クライアントから埋め込みURLを表示する際のパラメータとしては店舗IDしか渡すことができない(店舗名情報は持っていない)
からになります。
なお、データセットには、shop_idというカラムがあり値として”1000”, “1001“, “1002“…を持っています。また、shop_nameというカラムに店舗名だけの値をもっているカラムもございます。
そうなのですね。承知いたしました。
それでは、対応策としてはパラメータに「店舗名(1001)」というような店舗名を含む値を指定するしかないようですね。。
ご提案いただいて申し訳わけないのですが、こちらの要件は妥協できないです。
ユーザの目に入るところなので、IDだけでは何のことかわからないからです。
パラメータ側を”テスト店舗(4567)”にするしかなさそうですね。。
ytakahr
6
@candemina さん、実現したいことが理解できました。
この場合、埋め込み用のパラメータとコントロール用のパラメータを2つ用意しておき、計算フィールドでそれぞれを評価し、その計算フィールドをフィルターの対象とすることでご要望が実現できます。
手順
-
埋め込み用のパラメータ「DefaultShopID」を作成
既に作成済みかと思いますので、その場合はスキップしてください。
-
コントロール用のパラメータ「ControlShopID」を作成
静的デフォルト値は「default」にしておきます。後で計算フィールドで利用します。
-
コントロール用のパラメータ「ControlShopID」からコントロールを作成
フィールド時には shop_name_id を指定します。
-
フィルター用の計算フィールド「IsSelected」を作成
ifelse(
isNotNull(${DefaultShopID}) AND ${ControlShopID} = 'default' AND {shop_id} = ${DefaultShopID}, 'y' , // 埋め込みのURLパラメータで指定した店舗IDに該当する場合
${ControlShopID} <> 'default' AND {shop_id} = substring(${ControlShopID}, locate(${ControlShopID}, '(') +1, strlen(${ControlShopID}) - locate(${ControlShopID}, '(') - 1), 'y', // コントロールで指定した店舗IDに該当する場合
isNull(${ControlShopID}), 'y', // コントロールで「すべて選択」を明示的に選択した場合
'n' // 何も該当しない場合
)
-
「IsSelected」フィールドに対しフィルターを設定
以上の手順で、埋め込みで最初に遷移した場合はURLパラメータで指定した店舗IDを、ユーザーがコントールを操作した場合にはその店舗IDを、ユーザーが明示的に「すべて選択」を選択した場合にはすべての店舗IDを表示する動きとなります。
URLパラメータは以下のように2つのパラメータを指定することが条件となる点にご注意ください。
※ControlShopIDの方は「default」で固定です。
- 形式:#p.DefaultShopID=<店舗ID>&p.ControlShopID=default
- 例: #p.DefaultShopID=1000&p.ControlShopID=default
以下は実際の例です。(shop_id と IsSelected はデモンストレーションのため表示していますが、テーブルから外しても問題ありません)
▼ URLパラメータで店舗IDを指定した場合(店舗ID = 1000)
▼ コントロールで店舗IDを選択した場合(店舗ID = 1003)
▼ すべて選択を選んだ場合
1 Like
@ytakahr
詳細にありがとうございます!!
お示しの手順で実装したところ、実現できました!
isSelectedは
ifelse(
isNotNull(${DefaultShopID}) AND ${ControlShopID} = 'default' AND {shop_id} = ${DefaultShopID}, 'y' , // 埋め込みのURLパラメータで指定した店舗IDに該当する場合
${ControlShopID} <> 'default' AND ${ControlShopID} = {shop_name_id}, 'y', // コントロールで指定した店舗IDに該当する場合
isNull(${ControlShopID}), 'y', // コントロールで「すべて選択」を明示的に選択した場合
'n' // 何も該当しない場合
)
としました。
ちなみに、後学のためにお聞きするのですが、URLパラメータとしてControlShopID=defaultを指定しておく必要がなぜあるのでしょうか?(パラメータの静的デフォルト値として、「default」を指定しているので、URLパラメータでdafaultと指定する場合と何が違うのか気になりました)
省略して試してみたのですが、今のところ同じように動作している印象があります。
ytakahr
8
@candemina さん、早々にご確認ありがとうございます。
無事実現できたとのことで何よりです。
コントロールで選択した値がキャッシュされ、再度埋め込みURLから遷移した際にその値が効いてしまうことを危惧してあえてdefaultを指定していたのですが、確かに無くても問題無さそうですので、こちらはご放念ください。
上記の回答を以て Solution とさせていただきます。