저널 CSV로 변환 (예) | Power Query
6173 단어 ExcelPowerQuery
개인적으로는 Power Query로 끝내는 것이 사안마다의 커스터마이즈가 쉽고, 좋아합니다.
하고 싶은 일
아래 이미지와 같습니다. 행마다 대차를 치지 않고, 차변은 집계치로 분개하고 싶다고 하는 케이스입니다.
※실제로는, 그 회계 시스템마다의 열 정의가 있는 것입니다만, 여기에서는 적당하게 그것 같은 것을 창작했습니다.
샘플 데이터
아래 코드를 Power Query 고급 편집기에 복사하여 이름을 지정하고 별도의 쿼리로 만듭니다.
위 그림의 "어떤 데이터"와 "저널 열 정의"와 같은 데이터가 가능합니다.
t_매출
let
Source = "lZRNjsMgDIXvwroj2WDzk0PMBZpZpEnYdpXVqHcfm66mBESk6Cnix3x6PHP/NfPheef5oH2LZjIWLH6BfN7cZI5zCrICIcs/Uvx+msmWCVpRFTbZNB8OAqvGRZUeqoylhOcA85FwzWYKZavjKOflBc1EDnQo4SbVUiSp5gDhdWuDpYtgfn+DVTDxE8ZhBWMp9mDQNmHwFIbEn+icl9XZrg2XKjCkCgzRdsG4CeZOwZZNdQfVdQSJayQLXaRriYorqUshZD1loQqJB64PmbtI7Sx1XXKqWypeDYCFGsz1wWw7V+chpwIWSw+qb2OBT3X3BaIuGF10bOhZ8J9gkqSL6bLtdJ2DNZ8FV+XqpPug2332aq6GnoV3iv7dX00mQ/D6+QM=",
Custom1 = Binary.FromText(Source),
Custom2 = Binary.Decompress(Custom1,Compression.Deflate),
Custom3 = Json.Document(Custom2),
Custom4 = Table.FromRecords( Custom3 ),
#"Changed Type" = Table.TransformColumnTypes(Custom4,{{"日付", type date}, {"得意先No", Int64.Type}, {"品名", type text}, {"数量", Int64.Type}, {"単価", Int64.Type}, {"金額", Int64.Type}})
in
#"Changed Type"
t_열 정의
let
Source = "jZGxDsMgDET/hTkDDhjsrnSv1I5NhwTIHzBV/feaTkiFKMtJWHcPn/x8q6XgDF7U6qQu8jQ6UdVofqrVJENaQYZodi+ex+2uNajP1Ek7zLgUmxMNcnM/hxr2mt54KZ4TiLqc/xnX8dctgijFali5jzixBUPdgsmmPsL0ERQ3OlMkjIu0iKMiYVykRRwVCeMizqL4iAkGl5Tc6ws=",
Custom1 = Binary.FromText(Source),
Custom2 = Binary.Decompress(Custom1,Compression.Deflate),
Custom3 = Json.Document(Custom2),
Custom4 = Table.FromRecords( Custom3 ),
#"Changed Type" = Table.TransformColumnTypes(Custom4,{{"列名", type text}, {"記号", type text}})
in
#"Changed Type"
코드
완제품
let
Source = t_売上,
仕訳日 = Date.EndOfMonth(Source[日付]{0}),
//やりやすい方法で
摘要入れ = Table.AddColumn(Source, "摘要", each Text.Format("#[品名]@#[単価]x#[数量].",_) & Date.ToText([日付],"M/d"),Text.Type),
#"Removed Columns" = Table.RemoveColumns(摘要入れ,{"品名", "数量", "単価","日付"}),
貸方科目類入れ = Table.AddColumn(#"Removed Columns", "科目セット", each [貸方科目=500,貸方補助=0]),
#"Expanded {0}" = Table.ExpandRecordColumn(貸方科目類入れ, "科目セット", {"貸方科目", "貸方補助"}, {"貸方科目", "貸方補助"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded {0}",{{"金額", "貸方金額"}}),
得意先別まとめ = Table.Group(#"Renamed Columns", {"得意先No"}, {{"借方金額", each List.Sum([貸方金額]), type nullable number},{"tbl",each _}}),
#"Sorted Rows" = Table.Sort(得意先別まとめ,{{"得意先No", Order.Ascending}}),
借方科目入れ = Table.AddColumn(#"Sorted Rows", "借方科目", each 135),
#"Renamed Columns1" = Table.RenameColumns(借方科目入れ,{{"得意先No", "借方補助"}}),
//ポイント1
fx_接着 =(つける物 as record,BaseTbl as table)=>[
最初の行_rec = つける物 & BaseTbl{0},
最初の行_tbl = Table.FromRecords({最初の行_rec}),
その後の行 = Table.RemoveFirstN(BaseTbl,1),
result =Table.Combine({最初の行_tbl,その後の行})
],
貸借の接着 = Table.TransformRows(#"Renamed Columns1",each
fx_接着(
Record.RemoveFields(_,{"tbl"}),
[tbl]
)[result]
),
debug_貸借の接着 = Table.TransformRows(#"Renamed Columns1",each fx_接着(Record.RemoveFields(_,{"tbl"}),[tbl]) ){1},
単純合体 =Table.Combine(貸借の接着),
ヘッダの接着 = fx_接着([ヘッダ="*",日付=仕訳日],単純合体)[result],
debug_ヘッダの接着 = fx_接着([ヘッダ="*",日付=仕訳日],単純合体),
//ポイント2
できあがり確認 = Table.SelectColumns( ヘッダの接着,t_列定義[列名] ),
//数値だとCSV出力に不向きの場合があるので、よくやる。
#"Changed Type1" = Table.TransformColumnTypes(できあがり確認,{{"日付", type text}}),
//出来上がりに問題なければ最終的にはCSV用ヘッダ置換後で出力する
置換後 =Table.RenameColumns(#"Changed Type1",Table.ToRows(t_列定義)),
完成=#"Changed Type1"
in
完成
약간의 해설
포인트 1
반복해서 같은 것을 써도 괜찮습니다만, 커스텀 함수를 정의해 처리하고 있습니다.
모색하면서 쓰는 경우,
record
기법으로 쓰고, 도중 경과를 들여다 보도록 해 가면 하기 쉬울까라고 생각하고 있습니다.여기에서는, 전처리가 끝난 것을 「result」라고 명명하고 있습니다. 이 명칭이나 쓴 순서는 처리에 관계 없습니다.
↓함수 결과가
record
로서 나오는 모습포인트 2
1대로 처리한(라고 생각한) 개소에서, 열의 재정렬 처리를 넣어 주면(자), 처리 잊어버린 열이 있거나, 표기 오류가 있으면, 열의 재정렬의 개소에서 에러가 나오므로, 확인할 수 있습니다.
참고
record
정보htps : // / cs. mic로소 ft. 코 m / 자 jp / 푸 r 쿠 ry m / 에 xp 뻬시 온 s ゔ ぅ 에 s an d ぇ t 에 xp 뻬시 온 # 레코 rd
Text.Format
함수htps : // / cs. 미 c 로소 ft. 코 m / 쟈 jp / 뽀 r 쿠 ry m / xt fu rma t
Table.TransformRows
함수htps : // / cs. 미 c 로소 ft. 코 m / 쟈 jp / 포 r 쿠 ry m / 타 b ぇ t 란 s 후 rm 로 ws
구현 환경
Excel365(버전 2101)
Power Query 2.88.201.0 64비트
※특히 새로운 함수를 사용하고 있지 않으므로, Excel2010・2013의 애드인판에서도 같을 수 있을 것이라고는 생각합니다.
Reference
이 문제에 관하여(저널 CSV로 변환 (예) | Power Query), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanuki_phoenix/items/3035c1988c167b756aa7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)