Views: 149
Tidy dataとXBRL-CSVの折鶴モデル
Nobuyuki SAMBUICHI
ISO/TC295 Audit data services/SG1 Semantic model Convener
1. 仕訳日記帳の正規化
こちらの記事 『デジタル会計帳簿の Tidy data (整頓されたデータ)アプローチ』で紹介したTidy dataについて例を用いて解説します。
2024年4月3日、〇〇商店から用紙を1,500円で購入しました。標準税率でしたので、消費税10%です。合計で1650円を法人カードで支払いました。
この仕訳は次の表で表現されますが、重複したデータが繰り返されています。
仕訳番号 |
行番号 |
日付 |
摘要 |
借方金額 |
貸方金額 |
科目番号 |
科目名 |
補助科目名 |
補助科目番号 |
補助科目 |
943-8-477 |
1 |
2024-04-03 |
〇〇商店 用紙 |
1,500 |
754 |
事務用消耗品費 |
部門 |
D10 |
札幌 |
|
943-8-477 |
2 |
2024-04-03 |
〇〇商店 用紙 |
150 |
250 |
仮払消費税等 |
部門 |
D10 |
札幌 |
|
943-8-477 |
2 |
2024-04-03 |
〇〇商店 用紙 |
250 |
仮払消費税等 |
税区分 |
S |
標準税率 |
||
943-8-477 |
3 |
2024-04-03 |
〇〇商店 用紙 |
1,650 |
111 |
未払金 |
部門 |
D00 |
共通部門 |
|
943-8-477 |
3 |
2024-04-03 |
〇〇商店 用紙 |
111 |
未払金 |
カード |
F02 |
AAカード |
通常こうしたデータを整理するには、Codd博士の正規化を行います。
仕訳入力の入力単位のデータと明細行のデータを分けることから始めます。
取引の仕訳入力の操作単位は「〇〇商店 用紙」に関する2024-04-03の取引ですので、このデータを取り出して別の表として定義します。
仕訳番号(PK) |
日付 |
摘要 |
943-8-477 |
2024-04-03 |
〇〇商店 用紙 |
詳細が記載された明細行には、参照先の仕訳入力と付き合わせるために仕訳番号だけを残して、その他の重複データの欄を削除します。
このテーブルの主キーは、仕訳番号 + 行番号です。
仕訳番号(PK) |
行番号(PK) |
借方金額 |
貸方金額 |
科目番号 |
科目名 |
補助科目名 |
補助科目番号 |
補助科目 |
943-8-477 |
1 |
1,500 |
754 |
事務用消耗品費 |
部門 |
D10 |
札幌 |
|
943-8-477 |
2 |
150 |
250 |
仮払消費税等 |
部門 |
D10 |
札幌 |
|
943-8-477 |
2 |
250 |
仮払消費税等 |
税区分 |
S |
標準税率 |
||
943-8-477 |
3 |
1,650 |
111 |
未払金 |
部門 |
D00 |
共通部門 |
|
943-8-477 |
3 |
111 |
未払金 |
カード |
F02 |
AAカード |
明細行の表にはまだ勘定科目の重複が残っていますので、これを重複がない形にするため、科目と金額を含んだ表と明細行に対応した補助科目を記載している表に分けます。
仕訳番号(PK) |
行番号(PK) |
借方金額 |
貸方金額 |
科目番号 |
科目名 |
943-8-477 |
1 |
1,500 |
754 |
事務用消耗品費 |
|
943-8-477 |
2 |
150 |
250 |
仮払消費税等 |
|
943-8-477 |
3 |
1,650 |
111 |
未払金 |
明細行ごとに定義されている補助科目には、異なった情報源からのコードが混在しています。
仕訳番号(PK) |
行番号(PK) |
補助科目名 |
補助科目番号(PK) |
補助科目 |
943-8-477 |
1 |
部門 |
D10 |
札幌 |
943-8-477 |
2 |
部門 |
D10 |
札幌 |
943-8-477 |
2 |
税区分 |
S |
標準税率 |
943-8-477 |
3 |
部門 |
D00 |
共通部門 |
943-8-477 |
3 |
カード |
F02 |
AAカード |
この表をそれぞれの情報源に対応した形に整理します。
明細行の仕分けと原価部門を管理するための表
仕訳番号(PK) |
行番号(PK) |
補助科目名 |
補助科目番号(PK) |
補助科目 |
943-8-477 |
1 |
部門 |
D10 |
札幌 |
943-8-477 |
2 |
部門 |
D10 |
札幌 |
943-8-477 |
3 |
部門 |
D00 |
共通部門 |
課税区分毎に仮払消費税を整理するための表
仕訳番号(PK) |
行番号(PK) |
補助科目名 |
補助科目番号(PK) |
補助科目 |
943-8-477 |
2 |
税区分 |
S |
標準税率 |
カード会社毎に未払金を管理するための表
仕訳番号(PK) |
行番号(PK) |
補助科目名 |
補助科目番号(PK) |
補助科目 |
943-8-477 |
3 |
カード |
F02 |
AAカード |
こうして、リレーショナルテーブルで定義する複数の表として、次の表が定義でき、プログラム操作の対象にすることができるようになります。
-
Table1 仕分け
-
Table2 仕分け明細
-
Table3 原価部門
-
Table4 消費税
-
Table5 未払金
用途別の表から取引金額や取引先を確認するには、リレーショナルテーブルの複数の表をそれぞれの表のキーを利用して結合操作します。
例えば、仮払消費税の集計計算をした際に、2024年4月3日、〇〇商店から用紙を購入した取引を確認しようとすると、 Table1 仕分け テーブルを検索して、2024年4月3日、〇〇商店から用紙を購入した取引を検索します。
仕訳番号(PK) |
日付 |
摘要 |
943-8-477 |
2024-04-03 |
〇〇商店 用紙 |
仕分け番号が 943-8-477 だと分かりますので、この仕分け番号をキーとして、Table2から2行目の仕分け明細、およびそこに記載されている行番号2からTable4の2行目に記載されている消費税を検索すると、
仕訳番号(PK) |
行番号(PK) |
借方金額 |
貸方金額 |
科目番号 |
科目名 |
943-8-477 |
2 |
150 |
250 |
仮払消費税等 |
仕訳番号(PK) |
行番号(PK) |
補助科目名 |
補助科目番号(PK) |
補助科目 |
943-8-477 |
2 |
税区分 |
S |
標準税率 |
仮払消費税150円が標準税率で支払われたことが確認できます。
2. 正規化された表の問題点
取引を正規化した表には、そのコードを定義しているマスター表があります。
税区分 S が標準税率10%であることを登録している税区分マスターと付き合わせて初めて、その内容が確認できます。 業務ソフトで日々の業務を遂行している時にはこれで問題ないのですが、保存された過去のデータを確認し検証しようとすると次のような問題に直面します。
税区分マスターを例にとると、消費税が 8% から10%に改訂されたのは、平成31年(2019年)10月1日からです。それ以前の記録を確認する際には標準税率は 8%と解釈しなければいけません。
記録データとしては、その時点のマシターデータを復元することなく、その時点の情報がそのデータだけで詳細に確認することができることが重要です。
部門コードや取引先コードなども時とともに変遷を重ねていますので、確認に必要な情報は、他のマスターを参照することなくそのデータだけで確認できることが不可欠です。
3. Tidy data
Wickham[1] は、表に表示される値の基本的なセマンティクスを記述するTidy data(整頓されたデータ)を定義しています。
Tidy data(整頓されたデータ)では:
— 各 変数 が列を形成します。
— 各 観測 値が行を形成します。
— 観測 の種類ごとに表が形成されます。
Tidy data形式のxBRL-CSVでは、変数をデータの次元を定義する主キーを定義する変数と、観測対象となる変数に分けて定義することから始めます。
表 |
表名称 |
表の主キー |
Table1 |
仕分け |
d仕訳番号 |
Table2 |
仕分け明細 |
d行番号 |
Table3 |
原価部門 |
d原価部門1 ⇐ 補助科目番号 |
Table4 |
消費税 |
d税区分 ⇐ 補助科目番号 |
Table5 |
未払金 |
dカード会社 ⇐ 補助科目番号 |
補助科目番号欄には、異なる種類のマスターのコードが記載されていますので種類別に主キーを再定義します。
次に、変数を取り出します。補助科目名の欄には、異なる意味の情報が混在していますので、こちらも種類毎に再定義します。
-
日付
-
摘要
-
借方金額
-
貸方金額
-
科目番号
-
科目名
-
原価部門名 ⇐ 補助科目名
-
税区分名 ⇐ 補助科目名
-
カード会社名 ⇐ 補助科目名
4. 論理モデルの階層構造での定義
XMLなどでお馴染みの階層構造で定義するとこの表は次のような形です。
# |
階層 |
繰り返し |
項目名 |
1 |
0 |
0…n |
仕分け |
2 |
1 |
1..1 |
⚪︎ 仕訳番号(PK) |
3 |
1 |
1..n |
⚪︎ 明細行 |
4 |
2 |
1..1 |
⚪︎⚪︎ 行番号(PK) |
5 |
2 |
1..1 |
⚪︎⚪︎ 借方金額 |
6 |
2 |
1..1 |
⚪︎⚪︎ 貸方金額 |
7 |
2 |
1..1 |
⚪︎⚪︎ 勘定科目 |
8 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 科目番号 |
9 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 科目名 |
10 |
2 |
1..1 |
⚪︎⚪︎ 部門 |
11 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 原価部門ID |
12 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 原価部門名 |
13 |
2 |
1..1 |
⚪︎⚪︎ 税区分 |
14 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 課税区分ID |
15 |
3 |
1..1 |
⚪︎⚪︎⚪︎ 課税区分名 |
16 |
2 |
1..1 |
⚪︎⚪︎ カード |
17 |
3 |
1..1 |
⚪︎⚪︎⚪︎ カード会社ID |
18 |
3 |
1..1 |
⚪︎⚪︎⚪︎ カード会社名 |
5. Tidy data形式のxBRL-CSV
xBRL-CSVでは、2.で求めた変数を使用して、対応する箇所にデータを埋め込みます。次元を記載する変数には、先頭に d をつけて区別しています。
d仕訳番号 |
d行番号 |
d原価部門 |
d税区分 |
dカード会社 |
日付 |
摘要 |
借方金額 |
貸方金額 |
科目番号 |
科目名 |
原価部門名 |
税区分名 |
カード会社名 |
943-8-477 |
2024-04-03 |
〇〇商店 用紙 |
|||||||||||
943-8-477 |
1 |
1,500 |
754 |
事務用消耗品費 |
|||||||||
943-8-477 |
1 |
D10 |
札幌 |
||||||||||
943-8-477 |
2 |
150 |
250 |
仮払消費税等 |
|||||||||
943-8-477 |
2 |
D10 |
札幌 |
||||||||||
943-8-477 |
2 |
S |
標準税率 |
||||||||||
943-8-477 |
3 |
1,650 |
111 |
未払金 |
|||||||||
943-8-477 |
3 |
F02 |
AAカード |
この表は、見慣れない形で違和感を持たれるかもしれませんが、XBRLタクソノミでディメンション(次元)を定義し、表示リンクで表示順を定義しておくと階層構造に復元できます。
XMLで表現された立体を折鶴に例えてみます。
外側から見えている箇所を黒く塗りつぶし
元の折り紙に広げてみると色のついた箇所が散らばっていることがお分かりだと思います。
Tidy data xBRL-CSVは、見慣れない形ですがXBRLタクソノミで折りたたむと元の形に復元でき、XBRLフォーミュラを使用したデータの検証や報告データへの集約計算も可能です。
この形式のCSVをXBRL-GLの次世代型として、xBRL Glanurar Data, XBRL-GDと名付けています。