ラジカルブリッジは、ITの力でお客様の課題を解決する北海道・札幌の会社です

krewDataでkintoneに存在しないレコードを生成する方法

2020年8月12日

krewData-00.png

こちらのkintoneブログもなかなか更新が捗っていませんが、夏休み期間を利用して久々にネタを投下したいと思います。


今回はkintone連携サービスとして定評のあるグレープシティー社のkrewDataを用い、kintoneアプリに存在しないレコードを生成する方法をまとめてみました。シナリオとしては、売上アプリがあるとして、売上の無い日にも実績が0円の売上レコードを自動的に生成した上で、日次売上のグラフを表示させてみようというものです。


krewDataをご存知無い方のために、krewDataが何者かということを予め掲載しておきます。


krewDataヘルプページ「krewDataについて」
より
『krewDataは、複数のkintoneアプリのデータを集計・加工し、新しいkintoneアプリを作成したり、既存アプリのデータを更新することができるプラグインです。krewDataで作成したアプリは、通常のkintoneアプリとして使用することもできます。また、これらの処理をあらかじめ設定したスケジュールで定期的に実行することができます。』




さて、kintoneには便利な集計・グラフ機能があります。例えば、以下のようなシンプルな売上アプリがあるとします。

krewData-01.png
日付(日付フィールド)と売上(数値フィールド)のみのシンプルなアプリです。日々、売上が発生したタイミングで日付と売上金額を入力してレコードを作成していくものとなります。それぞれのビジネスにもよりますが、毎日売上が発生するわけではないケースもあると思いますし、休業日には売上が発生しないケースは多々あるかと思います。例えば8月の売上が以下のような実績だとします。

krewData-02.png
同じ日(8/3)に複数の売上があるケースもありますし、売上が全く無い日もあります。このようなケースでkintone標準の日次売上実績グラフを表示させてみると、以下のようなグラフとなります。

krewData-03.png
kintone標準の集計・グラフでは、同一日の売上を合計することは問題なくできるのですが、ご覧の通り、売上の存在しない日はグラフとして現れてきません。そう、kintoneでは"存在しないレコード"は集計・グラフ化することができないのです。上図の場合、日付間隔がバラバラであるにも関わらず、各グラフの見た目上の間隔が同一となっているため、日付毎の売上実績の傾向といったものもわかりづらくなってしまいます。

これを解決するには、売上の無い日は売上0円のレコードを作成すれば良いのですが、これを1レコードずつ手動で作成したり、CSVで読み込ませるのは非常に手間がかかります。今回はこのような0円レコードをkrewDataで自動生成することにより、課題を解決してみたいと思います。


最初に、求めているグラフの結果イメージを以下に掲載します。

krewData-04.png
8月の全ての日付を横軸としたグラフとなっていることがわかるかと思います。


これをkrewDataを用いて実現するために必要なアプリは以下の4つとなります。

  1. 売上アプリ
  2. 日付テンプレートアプリ
  3. 日次売上アプリ
  4. krewDataアプリ


1.の売上アプリは最初にご覧いただいた日付と売上のみのシンプルなアプリそのままです。

2.の日付テンプレートアプリは日付フィールドのみのアプリで、初期レコードとして2020年1月1日~2020年1月31日までの31レコードを登録しておきます。詳細は後述しますが、売上0円レコードを生成するために必要なアプリになります。

krewData-05.pngkrewData-06.png
1, 2の2つのアプリはkrewDataへの入力アプリとなります。

3.の日次売上アプリはkrewDataの出力アプリとなり、このアプリに売上0円レコードも含めた日次売上実績レコードを自動生成していきます。アプリ構成は1.売上アプリと同じです。

krewData-07.png
4.krewDataアプリはkrewDataの設定を行うアプリで、krewDataを利用するにあたり必ず必要となるものです。krewDataプラグインはこのアプリで利用できるようにしておきます。

早速、krewDataの設定内容を以下に示します。

krewData-08.png
一番左の「売上」アプリと「日付テンプレート」アプリ(入力アプリコマンドと言います)からスタートし、右方向に矢印の順番にデータの加工や集計を行っていき、最終的に「日次売上」アプリ(出力アプリコマンドと言います)に結果レコードを反映するフローとなります。


まず「日付テンプレート」の流れを説明します。「日付テンプレート」の次に「今月の日付に変換」というパーツ(データ編集コマンド)があります。このコマンドの設定内容は以下となります。「日付テンプレート」に存在している2020年1月1日~2020年1月31日までの31レコードを、krewDataの実行時の月の日付に変換するものとなります。

krewData-09.png
「3.編集内容を設定」の数式が見えないので、以下に示します。

=EDATE(日付,DATEDIF("2020-01-01",TODAY(),"M"))


この数式の詳細は解説しませんが、DATEDIF()で2020/1/1と今日の日付の間の月数の差を計算し(2020年8月であれば7となる)、更にEDATE()で「日付テンプレート」の各レコードの日付にその月数を足し込む(2020/1/14→2020/8/14となる)ということをしています。


ただ、この変換だけでは不都合が生じます。今回は1月の各日付から8月の各日付への変換なので問題ないのですが、30日までしかない6月への変換の場合、この計算式だけでは以下のような変換となってしまい、2020/6/30が2つ出てきてしまいます。(2月の場合はその年によりますが2/28や2/29が複数出てきてしまいます)

krewData-10.png
これを整えるのが次のパーツ「日付の重複削除」(重複の削除コマンド)です。こちらの設定はシンプルで、重複を削除したいフィールド(重複を検査するフィールド)を設定するだけです。

krewData-11.png
この設定により、30日以下しか持たない月であっても、正しい日付リストが得られるようになります。


次はいよいよ売上アプリと日付リストとの結合になります。これは「アプリ結合」というコマンドを利用します。設定内容は下図のようになります。

krewData-12.png
「1.元になるアプリの条件フィールドを選択」では、これまで設定してきたフローの直前のパーツ「日付の重複削除」を選択し、フィールドは「日付」を選択します。「2.結合するアプリの条件フィールドを選択」では「売上」アプリそのものを選択し、フィールドはやはり「日付」を選択します。これは、両アプリで「日付」が同じレコード同士を結合することを指定しています。中間にある「左外部結合」とはなんでしょうか?これはデータベースを操作するSQLという言語を扱った方であれば馴染みのある言葉だと思いますが、ここではこの図から見て左側、つまり「日付の重複削除」のレコードを優先して結合レコードを生成するものと理解いただければと思います。


これまでの例では「売上」アプリには日付が飛び飛びの5レコードしか存在していませんでした。「日付の重複削除」の方は、8月であればその日付の数だけのレコード(31レコード)が存在します。「左外部結合」を指定していますので、8月の日付レコード31レコードを優先的に残し、日付が合致する売上レコードだけその売上を結合レコードに反映されることになります。だんだんと難しくなってきたかもしれませんが、この「アプリ結合」コマンドの結果は以下のようになります。(一部抜粋)

krewData-13.png
売上アプリの5レコードの日付(8/3, 8/3, 8/6, 8/11, 8/14)のところにだけ売上が設定されていて、他の日付の売上は空欄になっていることがわかるかと思います。が、せっかくですので空欄には「0円」を埋めてみようと思います。次の「空の売上を0に置換」パーツ(データ編集コマンド)で、「売上」フィールドが空欄の場合のみ「売上」に「0」を設定するという数式を設定しています。

krewData-14.png
「3.編集内容を設定」の数式は、Excel等でもよく見る形式のものだと思います。

=IF(ISBLANK(売上),0,売上)


ISBLANK()で売上の値が入っているかどうかをチェックし、売上の値が入っていなければ0を、入っていればその売上の値そのものを売上にセットするという式になります。結果は以下のようになります。(一部抜粋)

krewData-15.png
売上の空欄部分が0円で埋められていることがわかるかと思います。いよいよ最終段階に近づいていますが、2020/8/3の行が2行になっています。同一日の売上はkrewDataの段階でまとめてしまいましょう。次の「日付毎にグループ化(集計)」(グループ化パーツ)で同一日の売上をまとめます。

krewData-16.png
同一日の売上を集計してまとめますので、「1.グループ化する項目フィールドを選択」には「日付」を、「2.集計する値が保存されているフィールド選択」には「売上」を選択し、「3.集計した値を保存するフィールド名を入力」には改めて「売上」という名称を入力します。「4.集計方法を選択」はもちろん「合計」です。結果は以下のようになります。

krewData-17.png
2020/8/3の行が一つになり、売上が合計されていることがわかるかと思います。


ようやく最後の段階となりました。これまでに整形されたレコードを「日次売上」アプリに出力します。出力アプリコマンドの設定内容は以下のようになります。

krewData-18.png


これまでのデータ編集フローで生成された日付、売上の各フィールドを「日次売上」アプリの日付、売上の各フィールドに紐付けます。また、krewData実行時にまだレコードに存在しない日付であれば新規追加、既にある日付であれば更新となるように、「●更新」を選択し、「更新または追加」にもチェックを入れます。また、日付フィールドの「更新キー」にもチェックを入れます。また、これまでのフローでは日付の順番が降順になっていましたので、ここで昇順に並べ替えておきましょう。


以上がkrewDataの設定となります。早速このフローを実行してみましょう。実行が完了すると、「日次売上」アプリに以下のように8月分の31レコードが自動生成されています。(日付の昇順でレコード追加していますが、その結果を更新日時の降順で表示させているので、見た目は相変わらず日付の降順となっています)

krewData-19.png
これを縦棒グラフで表示すると、求めていたグラフが表示されます。

krewData-04.png

いかがだったでしょうか?今回は存在しない日付のレコードをkrewDataで生成するということをやりましたが、このようなケースは様々な場面で必要となるのではないでしょうか?同様の課題を抱えている皆様に今回の記事が参考になれば幸いです。


尚、ラジカルブリッジでは、kintone業務アプリ構築サービス「ベストチーム365」という対面開発サービスを展開しておりますが、kintoneアプリだけではなく、krewDataのようなkintone連携プラグインやサービスの設定も対面にて実施することが可能です。関心のある方はぜひお問い合わせいただければと思います。


ラジカルブリッジでは、チームワークを強化するオリジナルkintone業務アプリ構築サービス「ベストチーム365」を提供しています。89,890円の《わくわくプラン》と252,500円の《にこにこプラン》の2プランで、使いやすいオリジナルkintoneアプリを早く・安くご提供します。kintoneを活用した業務効率化やチームワークの強化に関心のある方は、ぜひ当社までお問い合わせください。

ベストチーム365

カレンダーPlus