Looker 7:「order_by_field」パラメータで任意の条件並べ替えを実現する #looker
2020年01月末にリリースされた「Looker 7」。
そのバージョン「7.4」では、便利になった様々な新機能がリリースされています。
当エントリでは、その中から「order_by_field」パラメータによる任意の条件並べ替えについて、内容を紹介していきたいと思います。
目次
「order_by_field」パラメータによる任意の条件並べ替えについて
order_by_fieldはLookMLのフィールド定義で利用可能なパラメータです。
既定の並び替え順序ではなく、任意のディメンション、ディメンショングループ、またはメジャーからの並び替え順序を設定出来ます。order_by_fieldパラメータによって参照されるフィールドは、親フィールドのフィールドタイプと一致する必要があります。
また、この設定を誤って使用するとユーザーが混乱する可能性がありますので使用には気をつける必要があります。
ディメンジョンまたはディメンジョン・グループとorder_by_fieldパラメータで参照されるフィールドとの間には 1:1 の関係があり、両方のフィールドのグループ化特性がまったく同じになるようにする必要があります。これを確実に行わないと、並べ替えがユーザにランダムに見えることがあります。
パラメータ活用実践
このパラメータを使ってないのと使うのでどの様に挙動が変わってくるのか、実際に試してみたいと思います。
下記はブログ投稿における「著者マスタ」の項目設定の一部です。「著者ID(author_id)」は英数字で構成されているID情報、「入社日(join_date)」は日付・タイムスタンプ型データです。
view: m_authors { sql_table_name: cmdevio.m_authors ;; dimension: author_id { label: "著者ID" type: string sql: ${TABLE}.author_id ;; } : dimension_group: join { label: "入社日" type: time timeframes: [ raw, time, time_of_day, hour, hour_of_day, date, week, day_of_week, month, month_num, month_name, day_of_month, quarter, quarter_of_year, fiscal_quarter, year ] convert_tz: no datatype: date sql: ${TABLE}.join_date ;; } : : }
これらの項目を使った簡単なExploreを下記に用意しました。ここで「著者ID」の列ヘッダーをクリックすると、
著者IDを構成する文字列で、昇順・降順の並び替えを行います。これが通常の挙動です。
ではここで、今回のポイントであるorder_by_fieldパラメータを以下のような形で追記してみます。「著者ID(author_id)」を指定した時の並び替えの挙動が「入社日(join_date)」基準になる、という内容です。
view: m_authors { sql_table_name: cmdevio.m_authors ;; dimension: author_id { label: "著者ID" type: string sql: ${TABLE}.author_id ;; order_by_field: join_date } : dimension_group: join { label: "入社日" type: time timeframes: [ raw, time, time_of_day, hour, hour_of_day, date, week, day_of_week, month, month_num, month_name, day_of_month, quarter, quarter_of_year, fiscal_quarter, year ] convert_tz: no datatype: date sql: ${TABLE}.join_date ;; } : : }
改めて同じデータを用意、同じ操作(「著者ID」の列ヘッダーをクリック)を行うと...
先程の挙動とは異なり、今度は「入社日の昇順・降順」でデータの並び替えが行われるようになりました!
まとめ
という訳で、Looker7で新しく利用出来るようになったLookMLパラメータ「order_by_field」の紹介でした。
"業務仕様的にカスタマイズされた挙動を実現したい"という場合、今回紹介したこのパラメータが利用出来るかと思います。使い所を見極めて活用したいですね。