Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Henric CronströmのBusiness Discoveryブログの日本語訳をご紹介いたします。
オリジナルの英文ブログへのリンク
http://community.qlik.com/blogs/qlikviewdesignblog/2014/02/17/canonical-date
Henric Cronströmの経歴を詳しく知りたい方はこちらのリンク(英文)もご参照ください。
http://community.qlik.com/people/hic
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
QlikViewのデータモデル内に取り込むデータ項目の中に、複数の日付項目が含まれているのは、よくおきるケースだと思います。たとえば、以下のような、Order(注文概要)テーブルに、OrderDateとRequired Dateの項目があり、Order Line(注文明細)テーブルに、ShippedDateの項目が存在するケースです。
データの関連性をリストボックスで確認してみると、この例では、単一のOrderID(注文番号)で、単一のOrderDateとRequiredDateが存在し、複数のShippedDateが存在しています。
このケースでは、どのようにマスタ・カレンダとのリンクを作成したらいいでしょうか?
この質問の仕方は誤解をうんでしまう聞き方かもしれません。実は、このケースでは、単一のマスタ・カレンダを利用するべきではないからです。この場合には、個別の項目に対応する3つのカレンダを作成することをおすすめします。
理由は、それぞれの日付項目は、個々に異なる属性(attributes )を持つことができ、その属性を統一することは、かえってスクリプトの構成を煩雑なものにしてしまうからです。これにより、例えば、「4月に注文をうけて、6月に配送された注文はどれか」という選択ができるようになります。なぜマスタ・カレンダを複数回利用するかの詳細については、こちらのポストも参考にしてください。
http://community.qlik.com/blogs/qlikviewdesignblog/2012/08/30/master-table-with-multiple-roles.
3つのマスタ・カレンダを作成したデータモデルは、以下のようになります。
しかしながら、複数のカレンダを作成することで全ての問題が解決できるわけではありません。なぜなら、同じチャートオブジェクトのグラフのなかで、共通の日付項目を用いて、Ordered Amount(注文金額)やShipped Amount(出荷金額)を検索することができないからです。この問題に対応するために、3つの日付項目を代表する項目として、Canonical Date(共通日付)を作成してみましょう。
最初に、個々の日付項目が一意にひもづけできるテーブルを特定します。この例では、OrderLinesテーブルが明細単位で作成されており、3つの日付に対してユニークになります。一方、Orderテーブルでは、OrderDate とRequiredDate,は、一意になりますがShippedDateは、複数存在しています。したがって、OrderLineテーブルを利用することにしましょう。
このテーブルを新しく作成するテーブルDataBridgeとリンクさせることによって、3つの日付項目と、個別のカレンダーマスタ項目との一意の関連づけを行います。
この追加により、以下のようなデータモデルが作成されます。
DateBridge テーブルを作成するためのスクリプト例:
DateBridge:
Load OrderLineID, Applymap('OrderID2OrderDate',OrderID,Null()) as Date, 'Order' as DateType
Resident OrderLines;
Load OrderLineID, Applymap('OrderID2RequiredDate',OrderID,Null()) as Date, 'Required' as DateType
Resident OrderLines;
Load OrderLineID, ShippedDate as Date, 'Shipped' as DateType
Resident OrderLines;
もし、チャート内で注文金額と出荷金額を比較して分析したい場合には、canonical calendar の項目を軸として定義し、以下の2つの数式をSet分析の手法を用いて、作成します。
Sum( {$<DateType={'Order'}>} Amount )
Sum( {$<DateType={'Shipped'}>} Amount )
このCanonical calenderの項目は、上記のような例で、チャート内の軸項目として定義する際には、最適な方法です。ただし、リストボックスを用いた選択条件の作成の際には、かえってわかりずらい動きになる恐れがありますので、そのような場合には、個別のマスタ・カレンダーの項目を利用してください。
まとめ:
最後に、Rob Wunderlichによって、ポストされているこの問題の対応のための別のソリューションに関連するCommunityの記事もご紹介しておきます。
http://community.qlik.com/docs/DOC-5834.
Rob、インスピレーションに富んだ記事と、ディスカッションをありがとう。
HIC