入力や閲覧の容易さから、このようなアプリを作ることはありませんでしょうか? 


例えばここでは担当者ごとの月別の予算を1レコードで管理するアプリをイメージしています。



このアプリでは、一覧ページで担当者ごとの予算がこのように見えます。見やすくていいですね。

ただ、この状態だと月ごとの集計をしたり、グラフを出したいと言ったときに困ってしまいます。そのような場合に活用できるのが、Job Runnerの「レコードの列を行に変換する」です。



アプリ構成

やりたいことはあるレコードの列をレコード、つまり行に変換したいわけですが、「列を行に変換する」、と言っても文字にすると分かりにくいので、まずは結果をご紹介します。 先程の担当者ごとのレコードが、列を行に変換するとこのようになります。「営業部予算(月次)」という別のアプリに変換した結果です。




変換先のフォームの設定はこのようになっています。1担当者1レコードのアプリの、ひと月分を1レコードとして表現している形になります。年度や月、予算のフィールドはすべて数値フィールドになっています。



これらに加えて、「実績」「更新用キー」というフィールドが追加されています。更新用キーには「値の重複を禁止する」を設定しています。これについては後述します。


カスタマイズの内容

カスタマイズの内容は以下のとおりです。こちらはJob Runnerの定期実行タスクで作成しましたが、Webhookでもよいと思います。

このカスタマイズの重要な部分は以下のとおりです。


  • 3番で変換処理を実施する対象のレコードを取得しています。ここでは仮に当日の年度のレコードを取得しています。

  • 4番で列を行に変換しています。後ほど詳しく解説します。

  • 5番では「キーの値をもとにレコードを更新または追加する」を使って、変換した結果をレコードに出力しています。この「キー」がポイントになります。



「レコードの列を行に変換する」の設定内容

レコードの列を行に変換する」でセットするパラメータを解説します。カスタマイズの画像およびドキュメントの表記と合わせてご確認ください。

変換元レコード

列を行に変換する、変換元のレコードを取得したアクションを選択します。ここでは3番のアクションになります。

変換する列となるフィールド

この設定が、変換を実行する際の一番基本的なパラメーターで、変換対象のフィールドを選択することになります。


ここでは変換元の1月〜12月のフィールドをすべて選択しています。この選択したフィールドが列→行になるイメージです。

変換先アプリ

変換先アプリは、最終的に変換結果を書き出すアプリを選択します。初めの結果の箇所で記載したとおり、ここでは「営業部予算(月次)」というアプリになります。

列名の変換先フィールド

先程設定した「変換する列となるフィールド」の変換先のフィールドを選択します。

ここでは変換先の「月」フィールドを選択しています。これにより、


  1. 先程変換元の1月〜12月のフィールドを選択し

  2. その変換先は「月」のフィールドにする


という設定をしていることになります。

ここまでで、変換先のフィールドは決まりましたので、次のマッピングで実際の値を入れる設定に進みます。

列名のマッピング

ここでは「変換する列となるフィールド」で選択したそれぞれの値に、変換後の値をセットしていきます。

ここでは列名の変換先フィールドが「月」なので、その値としては数値で1から12を入れていけばよい形になります。

列の値の変換先フィールド

「変換する列となるフィールド」で1月〜12月のフィールドを選択しましたが、その値を入れるフィールドを選択します。列を行に変換しますので、複数の1−12月のフィールドの変換先を1つだけ指定する形になります。


ここでは、「予算」というフィールドを選択しています。これで列が行(レコード)に変換される、というわけです。

言い方を変えますと、1月〜12月のフィールドが、12レコードのそれぞれの予算が入ったレコードになる、ということです。

変換列以外のマッピング

ここでは、今まで設定した変換以外のフィールドについて、マッピングできます。

元のレコードから引き継いでおくべき値、例えば「営業担当」「上司」「該当年度」のパラメータをここではセットしています。

結果の出力について

ここまでで、列を行(レコード)に変換されました。最後にこの結果を書き出します。条件は「レコード1行が準備できた時」で、1行変換されるごとに結果をレコードに書き出すようにします。


書き出し方法はどのような方法でもよいのですが、ここでは「キーの値をもとにレコードを更新または追加する」を使って、更新または追加(いわゆるUpsert)することにします。


ここで、Upsertするためのキーが問題になってきます。アプリ構成の部分で触れましたが、「更新用キー」、つまり何をもってこの更新先レコードを一意に特定するか、ということが問題になります。


ここでは、変換先の結果を使って、「年度」「月」「営業担当のログイン名」で変換結果を一意に特定できますので、これをキーとして利用することにします。ここで間違ってもレコード番号をキーとして利用しないよう、ご注意ください。


(また画面のカスタマイズで、営業担当を複数選択できないようにしておくのも良いと思います。「項目を1件以上選択しているならば」でエラーチェックを実施することで、簡単に実現可能です。)


「キーの値をもとにレコードを更新または追加する」の「キーの値」のパラメータは、具体的には以下のようになります。


= $4[0].年度 & $4[0].月 & $4[0].営業担当.code


「マッピング」のパラメータも、「他のアクションの結果」(= 変換結果)を使ってセットする値を記述してください。このとき各変換結果と合わせて、「更新用キー」もセットし忘れないようにご注意ください。



これで設定は完了です。ジョブを生成し、実行してみてください。

まとめ

「レコードの列を行に変換する」を使うと、1レコードに複数フィールドで入力の容易さ、一覧でのみやすさを担保しつつ、グラフ化・集計や実績入力は別アプリで単位を分けてやりやすく、ということが簡単に実現可能です。

またアプリが分かれることによって、アプリに対する権限を別々に設定することもできますので、より柔軟な運用が可能になると思います。


設定は若干分かりにくい部分があるかもしれませんが、動かしてみるとよく分かると思いますので、お手元の環境でぜひお試しください!