Qlik Document Chainingで選択状態を引き継いで別のアプリを開く(その2)

こんにちは!Yokoです。
文字起こし機能があっちこっちで実装されてきて便利になりましたよね。
昨日、気づいたらスマホに留守電が入っていたんですが、留守電も文字起こしされ、バッジで表示されていました。
「〇〇(不動産管理会社)のAです。大家さんから連絡がありまして、親父の件でご相談したいので折り返しお電話いただけますか?」
親父???
Aさんはは東京オフィスの管理会社の方なのですが、大家さんと僕の父は何も関係ないはずだけどなあ…
留守電を聞いてみました。
親父=お家賃のことでした(笑)
家主さんが値上げしたいっていうことらしいです。
もうーーっ!何かと思いましたわ!!
文字起こしも、これが限界ですかね。

ということで、今回はQlik Document Chainingで選択状態を引き継いで別のアプリを開く(その1)の続きでございます。

目次

Qlik Document Chainingで発生した問題

Qlik Document Chainingで選択状態を引き継いで別のアプリを開く(その1)の仕様で、アプリに顧客IDのフィルターパネルを追加して、顧客IDを選択して、別のアプリを開いてみます。

うまくいきました。
この例では、顧客IDを5つ選んでいるのですが、7つ選んでボタンを押してみると…

あれっ?
選択状態が引き継がれません。これはなぜでしょう?

GetCurrentSelectionsの仕様を調べてみる

はい、原因はGetCurrentSelections関数の問題です。
顧客IDを1〜6まで選んだ時と、1〜7を選んだ時のGetCurrentSelectionsの結果は以下のとおりでした

GetCurrentSelectionsでは選択値が6つを超えると“7 of 10281”というように、値を取得せずに選択された値の数を返す仕様のようです。
つまり、7つ選んだ場合のURLは以下のように設定されてしまい、選択状態は引き継がれなかったということです。

https://hoge.jp.qlikcloud.com/sense/app/<アプリID>/sheet/<シートID>/state/analysis/select/顧客ID/7 of 10281

ではどうするか…
ボタンを押下した時の「ウェブサイトのURL」を以下のように変更します。

=’https://hoge.jp.qlikcloud.com/sense/app/<アプリID>/sheet/<シートID>/state/analysis/select/’ & GetCurrentSelections(‘/select/’,’/’,’;’,1000)

これで、1000個まで選択値を取得できるようになります。

限界はないのか?

一応、GetCurrentSelectionで行けそうだということはわかったものの、実際にどれくらいの選択状態まで耐えうるのか実験してみます。
まず、顧客IDを1〜1000までの選択して別のアプリを開くまでの時間を確認しましたところ、1分近くかかりました。
うーーーーん…
次に、顧客IDで検索窓から”<=1000″と入力して確認しましたところ、10秒以内で別のアプリを開くことができました。その時のURLは以下のように指定されていましたので、数式で指定するのは問題ないようです。

https://hoge.jp.qlikcloud.com/sense/app/<アプリID>/sheet/<シートID>/state/analysis/select/顧客ID/<=1000

では、どれくらいまで行けるのか…
GetCurrentSelectionsの選択の最大を10,000まで拡張し、”<=5000″で選択して試してみたところ、1,000個だけしか引き継がれませんでした。あれれ…
GetCurrentSelectionsの選択の最大は実運用を考慮すると1,000に抑えておいたほうが良いようです。
因みに、5,000個の顧客IDを選択して試してみましたところ、こんな画面が表示されてしまいました。
また違う問題が発生してしまったようです。

URLの長さの制限がある

上で表示されているエラーは、「URI(Uniform Resource Identifier)が大きすぎるよ」というエラーですから、URLの長さが問題になっているようです。
URLの長さはQlikの制約ではなくて、ブラウザ側での制約ですね。
各種OS/ブラウザでの長いフラグメントのあるURLの長さを調べてみました。
@nwtgck(Ryo Ota)さんが各種OS/ブラウザでの長いフラグメントのあるURLの長さを調べてみましたで調べてくれていますね。それをまとめますと、ブラウザ毎に以下のような制限があるようです。

  • Chrome  10,000
  • Safari    4,096
  • Edge    2,083

ユーザの環境がEdgeである可能性も踏まえ、URLは2,083文字以内に抑えるべきでしょう。
というわけで、2,083文字を超えないように、ボタンのチャートの有効化の設定を行います。

  • チャートの有効化
    • チャートを有効にする条件:ON
    • 条件:=Len(‘https://lhoge.jp.qlikcloud.com/sense/app/<アプリID>/sheet/<シートID>/state/analysis/select/’ & GetCurrentSelections(‘/select/’,’/’,’;’,1000))<=2083

これで、URLの長さが2,083以内の場合のみ、ボタンが押せるようになります。

まとめ

GetCurrentSelectionsを使って、選択条件を別のアプリに引き継ぐ場合は、以下の2つの点に留意しましょう。

  • GetCurrentSelectionsの選択の最大値は1,000に抑えておく
  • URLの長さは2,083以内の抑える必要があるので、ボタンの有効化の設定しておく

こんな感じで実装しておけば、無難でしょう。
「絞り込み値の選択」で顧客IDを選択させるなどの場合は使えない可能性がありますが…
また、別アプリの開く場合のパフォーマンスは、項目の選択値が多くなると比例して遅くなります(URLの長さではありません)。

ということで、Qlik Document Chainingで選択状態を引き継いで別のアプリを開く場合の留意点を解説しました。
ではまた!

Document Chainingの関連記事はこちら
Qlik Document Chainingで選択状態を引き継いで別のアプリを開く(その1)
Qlik Document Chainingで選択状態を引き継いで別のアプリを開く(その3)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次