会社の事務データ処理を行ってみる
この記事を読んでいただきたい方
* Excel で事務データ処理を行っている人
* 事務データ処理の手順を開発している人
* 事務データ処理のための基幹システムの責任者
* 事務データ処理のための基幹システムを開発している人
* ALZETA でのデータ処理に興味を持っている人
前回は,ALZETA でデータ分析を行いましたが,今回は予告通り業務データ処理を行ってみます.データ分析は,会社では経営目標策定や実績確認,業務改善を目的に行われ,データ分析が滞ったり,少々の誤差や取りこぼしがあっても直ちに会社の経営に影響があるわけではありません.今回扱うのはそうではなく,会社運営に不可欠な事務データ処理で,例えば,顧客との取引データから請求金額を算出する,というようなものです.
1. 事務データ処理の難しさ
事務データ処理が滞ったり,処理に誤りがあったりするのは会社にとって許されず,確実で正確な処理が求められます.このため,
1) 高価なホストコンピューター上に高額をかけて事務データ処理の基幹システムプログラムを開発,運用する
2) 人海戦術で,データ入力,計算,確認を念を入れて行う
といったことが行われます.
一方で,会社の競争力を維持するためには,例えば期間限定割引制度や会員ポイント制度を導入するなど,柔軟に新しい制度を導入したり,またその内容を調整したりすることが必要です.その新しい制度,調整が入るたびに,事務データ処理のルールを変更しなければなりませんが,1),2) ともに,そういったルール変更とは相性が良くありません.
2) の場合は言わずもがなです.多数の人間にルールの変更を周知させ,もれなく新ルールを適用してもらうというのは,難しいことです.
1) の場合は,プログラムを新しいルールに適応させなければなりません.このため
* ルールの変更のためのプログラム(改)を開発できるかどうかの検討
* プログラム(改)設計
* プログラム(改)開発
* プログラム(改)影響調査とテスト計画策定
* プログラム(改)テスト
* プログラム(改)適用
というステップが必要になります.プログラムの開発は外部業者に委託している場合がほとんどですから,上記手順を外部業者に依頼した時の費用は高額になりますし,そもそも一連のステップ完遂までに相当な時間(数ヶ月単位)がかかってしまいます.ルールを週単位でコントロールしたいのに,プログラムがこれでは全く役に立ちません.ただし,DX された会社であれば,この 1) の問題は華麗に解決されていると思いますので,この先を読んでいただく必要はないかもしれません.
2. 例題 - ガソリン会員割引額の計算
前置きが長くなりました.例題として,ガソリン会員割引額の計算をやってみましょう.
石油元売A社は,他社ブランドのガソリンスタンドとの差別化のために,自社ブランドのガソリンスタンドユーザーのための会員制度を運営しています.会員特典は,前々月の利用額に応じて,当月の給油についてリッター単価を割引するというものです.リッター単価割引額は以下のように階段状に設定します.
ただし,リッター単価割引が適用される当月給油量は 150L が上限です.元データは,ガソリンスタンドのシステムから自動収集された以下のようなデータです.2021年1月1日〜2021年3月31日の売上データ約107万件です.
この割引額計算事務は以下の ALZETA JOB で行えます.
(1) で「売上日時」から部分文字列を取って,新項目「売上月」を作成しています("2021-01-01 00:00:04" から最初の7文字 "2021-01" を取得)
(2) で「売上月」が "2021-01" のレコードを「前々月売上」というファイルに,"2021-03" のレコードを「当月売上」というファイルに分別します
(3) 以下は「前々月売上」に対して行う操作です.
(3) で「顧客番号」ごとの集計を行うための前処理として「顧客番号」で全レコードをソートします
(4) で「顧客番号」ごとに「売上金額」を集計します
(5) で集計された売上金額の値によって,新項目「割引単価」をセットします
(5) の設定内容はこのようになっています.全表示できないので,一部を掲載していますが,このように「売上金額 >= 10000」and「売上金額 < 20000」ならば値として "2" をセットすると設定できます.(他の金額レンジとセット値についても同様に設定します)
(5) までで作成されたデータをプレビューすると,以下のようになります.「売上金額」の値に応じて適切な「割引単価」がセットされています.
一方,(6) 以下は (2) で分別した「当月売上」に対する操作です.
(6) で「顧客番号」ごとの集計を行うための前処理として,「顧客番号」で全レコードをソートします.
(7) で「顧客番号」ごとに「数量」(給油量)を集計します
(8) で集計された数量の値によって,新項目「割引対象数量」に値を入れます
(8) の設定内容はこのようになっています.「演算」PM の三項演算子を使い『「数量」の値が 150 未満ならば「数量」の値をそのまま,そうでなければ "150" という値を入れる』という操作にしています.(三項演算子が使い慣れなければ,「条件分類」PM を使用して同じことを行うこともできます)
(8) までで作成されたデータをプレビューすると,以下のようになります.
「数量」が 150L 未満ならばその値がそのまま「割引対象数量」に入り,150L 以上ならば,"150" が「割引対象数量」に入っていることがわかります.
(5) で顧客ごとに割引単価が,(8) で顧客ごとに割引対象数量が決定しましたので,これらを合わせると割引金額が計算できます.
(9) で (5) と (8) のデータを「外部結合」していますが,その前に,(5) と (8) の PM で以下の通り出力ファイルの名前をわかりやすく変えておきます.(変更前は,ランダムな英数字文字列になっています)
(5) の出力は,「(顧客別)割引単価」とします.
(8) の出力は,「(顧客別)当月割引対象数量」とします.
こうしておくと,(9) の外部結合で,「主データ」「副データ」の設定がやりやすくなります.今回はあくまで「当月の売上に適用する割引金額の計算」ですから,「主データ」は「当月の売上(給油量)」です.したがって,(9) の外部結合は以下のように設定します.
また,「欠損値の代替文字」欄には "0" を指定します.前々月の利用がなく(当月の利用はある)顧客はそもそも副データである「(顧客別)割引単価」にデータがありませんが,そういう顧客については割引単価を 0円に設定するという目的で,ここで "0" を指定しています.
(9) で作成されるデータをプレビューしてみましょう.
各顧客について「割引対象数量」と「割引単価」が揃いましたので,あとは (10) の「演算」PM でそれらを掛算して所望の割引金額を得,(11) の「CSV 出力」で CSV ファイルに出力します.事務としては,この CSV ファイルを請求システムにアップロードして,完了ということになるでしょう.
3. さらに望ましい事務データ処理とは
さて,一旦「ガソリン会員割引額の計算」という事務処理が ALZETA で実現できることはご覧いただけましたが,実は今回お見せした JOB(データフロー)は ALZETA の良いところをあまり活用できていませんし,この JOB をどう発展させて企業活動に競争力をもたらせることができるかー例えば,どうやって短いスパンでビジネスルールを変更できるかーのご説明もできていません.
次回は「データでデータをコントロールする」という我々の考えを盛り込んだ JOB にしてみたり,ALZETA の機能をもっと多く活用して,運用しやすい JOB にしてみたり,というところをご説明していきます.