顧客別損益把握(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に持っていこう。
そんでもって、予算のフォーマットと実績のフォーマットにテーブル読込して、予実算対比ができる。


顧客別損益把握(2)
ご連絡はこちらまでどうぞ