玉ちゃんの文科系IT入門 > ERP(SAP R/3) > 顧客別損益把握(3)

顧客別損益把握(3)

農薬事業部が言うところの損益把握は、

・売上高
・都度戻し精算金

これで、変動利益が出る。

さらに、期末精算金

これで、得意先ごとの限界利益を算出したいのだという。

本来は、ここに運送費が入ると思うが、運送費はカウントしないという。

確かに、化学品と違って、利益に占める運賃の比率は、約10分の一であるから。

得意先別にこれらを把握するためには、得意先別にデータが揃っていないといけない。

問題は、会計FI伝票から起票される、期末値引きである。


期末値引きは、全農が「仕入先」になるらしい。お金を全農に支払うからだ。

だが、期末精算金の内訳は、各県連ごとに明細があって、県連ごとに個別入力は可能ということらしい。

来農年度(2010年10月〜)から個別に入力するのだが、予算も同じメッシュでやりたいという。

今回の販売予算からということで、もう取り掛からねば間に合わない。

で、BI的にはどうするか?


期末精算金は、ERPのGLPCAという損益明細のテーブルに入っている。


これを抽出して、得意先別にまとめなければいけない。

だが、こんな格好をしている。

会計年度|期間(月)|勘定コード|得意先|仕入先|金額|


勘定コードのところが各期末精算金の項目になるのだ。

この期末精算金、何でこんなに種類が多いのか?

まるで新党乱立の昨今の政界の様に、名前がなくなりそうな勢いだ。

本所条件推進協力費?

本所条件技術推進協力費?

特別重点対策費?

・・・・

これらを得意先(県連または卸商営業所)別に整形しなければいけない。

データを

会計年度|期間(月)|得意先|仕入先|精算金1|精算金2|・・・・


こう並べなければいけない。

はあ・・・クロス集計だ。


Dr.Sumで集計できるだろうか?


クロス集計は、Dr.SumのDatalizerではお手の物の集計だけど、
今回は、データ加工時にこの作業が入るので、SQL文でやらねばならない。

最近、Dr.Sumの関数を見ることが多いのだが、SQLserverよりもOracleに似ている気がする。

で、ネットでOracleのクロス集計を調べていたら、使えそうなものがあった。

こんな形で関数を使えるのか・・・・、やってみよう。

早速試してみた。

-----------------------------------------------------------
SELECT
年月 AS 年月,得意先 AS 得意先,地域,
SUM(DECODE(勘定コード,'xxxx110000',会社コード通貨金額,0)) AS "運送費_原価要素",
SUM(DECODE(勘定コード,'xxxx900001',会社コード通貨金額,0)) AS "値引_FI計上",
SUM(DECODE(勘定コード,'xxxx110000',会社コード通貨金額,0)) AS "値引_現物",
SUM(DECODE(勘定コード,'xxxx900010',会社コード通貨金額,0)) AS "商系価格精算金_前農年分",
SUM(DECODE(勘定コード,'xxxx900011',会社コード通貨金額,0)) AS "商系価格精算金_当農年分",
SUM(DECODE(勘定コード,'xxxx900019',会社コード通貨金額,0)) AS "商系その他",
SUM(DECODE(勘定コード,'xxxx900020',会社コード通貨金額,0)) AS "系統本所条件_推進協力費",
SUM(DECODE(勘定コード,'xxxx900021',会社コード通貨金額,0)) AS "系統本所条件_技術推進協力",
SUM(DECODE(勘定コード,'xxxx900022',会社コード通貨金額,0)) AS "系統本所条件_特別重点育成",
SUM(DECODE(勘定コード,'xxxx900023',会社コード通貨金額,0)) AS "系統本所条件_残量対策費",
SUM(DECODE(勘定コード,'xxxx900030',会社コード通貨金額,0)) AS "系統事業所条件_前農年分",
SUM(DECODE(勘定コード,'xxxx900031',会社コード通貨金額,0)) AS "系統事業所条件_当農年分",
SUM(DECODE(勘定コード,'xxxx900040',会社コード通貨金額,0)) AS "系統県直条件_前農年分",
SUM(DECODE(勘定コード,'xxxx900041',会社コード通貨金額,0)) AS "系統県直条件_当農年分",
SUM(DECODE(勘定コード,'xxxx900050',会社コード通貨金額,0)) AS "系統JA直条件_前農年分",
SUM(DECODE(勘定コード,'xxxx900051',会社コード通貨金額,0)) AS "系統JA直条件_当農年分",
SUM(DECODE(勘定コード,'xxxx900090',会社コード通貨金額,0)) AS "系統その他"
FROM
(select MID(伝票の転記日付,1,6) AS 年月,
NVL(得意先コード,仕入先または債権者の勘定コード) AS 得意先,
勘定コード,会社コード通貨金額
from 損益計算書
where 会社コード = '1010'
and 事業領域 = '0120'
and RY_会計年度 = '2009'
and 参照処理 <> 'AUAK'
and 勘定コード in ('xxxx110000','xxxx900001','xxxx110000',
'xxxx900010','xxxx900011','xxxx900019','xxxx900020','xxxx900021',
'xxxx900022','xxxx900023','xxxx900030','xxxx900031','xxxx900040',
'xxxx900041','xxxx900050','xxxx900051','xxxx900090')
) s
left join 得意先マスター on 得意先マスター.得意先コード = s.得意先

GROUP BY 年月,得意先,地域
ORDER BY 年月,得意先,地域
-----------------------------------------------------

DECODE関数とはOracleの関数だが、Dr.Sumでも使える。
「勘定コード」が、xxxxだったら、会社コード通貨金額を持ってきて、それ以外は0にして、
項目名を「○○○精算金」にしてね、という使い方。

NVL関数もOracleにあり、得意先コードが、得意先と仕入先のどっちかに存在するので、
あるほうを取ってね、という意味だ。

これで、集計をかけると、Dr.Sumでも動作した。

じゃあ、これをDataspiderに持っていこう。

そんでもって、予算のフォーマットと実績のフォーマットにテーブル読込して、予実算対比ができる。