Power Query에서 반복 열 일괄 처리
5921 단어 ExcelPowerQuery
옛날 재료로 만든 이것의 대응에 대해 쓰고 싶습니다.
htps : // wm 훗 x 세 l. 코 m / 2019 / 05 / 13 / sp ぃ t-Set l 콘텐트 ts - 세 파라 데 바이 - ぃr 쿠에 ry 파 rt-2 / # 누레 16516
포인트로서
열의 분할과 같은 처리는 열명 지정이 필요하고 그대로라면 열이 많으면 처리수도 늘어나,
열 수가 불확실한 데이터라면 대응이 어렵습니다.
이것을 열수 제한을 받기 어려운 「피벗 해제」와 「열의 피벗화」를 전후에 사용
처리열을 1열로 나란히 처리해 복구하는 처리를 합니다
대상
따라서 셀에 개별적으로 구분 된 여러 데이터가 들어 있습니다.
여러 번 반복하면 처리하는 방법에 대한 이야기
원본 데이터
item과 value가 연속한 데이터를
item
value
item2
value3
aaaa/bb/cc
11/22/333
dd/hh
77/44
dd/ee
44/55
ff/qq
11
ff/g
66
ss/rr
22/33
ee
7
nn/pp/cc
55/99
aaa/bbbb/cc
74/35
① 인덱스 열 추가
목적은 최종 단의 피벗 화에
1. 원행 번호
2. 셀 내 구분 위치
으로 구분하기 위해 여기에 원행 번호를 추가합니다.
이것이 없으면 여덟 번째로 오류가 발생합니다.
② 피벗 해제
색인을 선택한 상태에서 '기타 열 피벗 해제'
해제 열을 선택하고 피벗 해제도 비선택 열을 사용하여 "기타 열을 ~"
라는 코드가 생성되므로 어느 쪽이라도 좋다,
목적이 명확하기 때문에 "기타 ~"를 사용
행 추가시 피벗 해제에서 제거하려면
'선택한 열만 피벗 해제'를 선택해야 함
③열 분할
열 분할로 문자와 숫자를 분할. 열 병합 헤더에 사용
④열분할
값 열을 '/'로 열 분할
여기서 열로 분할을 열 방향 지정으로 분할하는 것이 이번 키모
헤더의 중복된 열은 UI가 자동으로 일련번호해 주므로 셀내의 단락 위치 기호로서 재이용합니다
분할 수는 크게 선택하면 큰 데이터가 들어갈 때 사라지지 않으므로 권장
사용되지 않는 열은 ⑦의 피벗 해제로 사라집니다.
⑤정수 나눗셈
[속성.2] 열에 정수 나누기
이번 데이터라면 2를 선택
Power Query에서 헤더를 지정한 것은 1부터 시작하기 때문에
전단에 가산으로 +1을 붙이는 것
⑥열 병합
원래 열 순서에 맞추기 위해
속성 .1과 속성 .2를 열 병합
⑦ 피벗 해제
열 병합을 한 행을 선택하여 2단째의 피벗 해제
⑧열 피벗
⑥로 만든 병합 열을 선택하고
값 열: 값, 고급 옵션: 집계하지 않음
에서 실시
값 열의 선택을 변경하면 고급 옵션의 내용이 변경되므로주의
이 후 불필요한 열을 삭제하고 종료
모든 쿼리 (원래 데이터 포함)
고급 편집기에 복사합니다. 어쩌면 움직일 것입니다.
let
// 元データ取り出し部
ソース = "VZDJDoMwDET/xWckKxsR/ZW6B5ZQKqWIpfRS8e91SkEmt0xmnuO5fuDxCk+4QMmHsKoI6xoyeJdxCSwrRag1oTGG1eTVrDYNYdftNsOK94TWwpodwOQJQaCsJXROUNqWcBwlRSlJSO93AchzEZ5nwmmS4e2bEnAa70W47wmHQa6aAM4RFoUA9EuMB2C77IR/W+e+fkXwlsbBevsC",
a1 = Binary.FromText(ソース),
a2 = Binary.Decompress(a1,Compression.Deflate),
a3= Table.FromRecords(Json.Document(a2,932)),
//
// ここから処理
//
追加されたインデックス = Table.AddIndexColumn(a3, "インデックス", 1, 1),
ピボット解除された他の列 = Table.UnpivotOtherColumns(追加されたインデックス, {"インデックス"}, "属性", "値"),
文字の移行による列の分割 = Table.SplitColumn(ピボット解除された他の列, "属性", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"属性.1", "属性.2"}),
// ここの「詳細設定>分割後の行数」を多めに指定するとよい
区切り記号による列の分割 = Table.SplitColumn(文字の移行による列の分割, "値", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"値.1", "値.2", "値.3", "値.4", "値.5"}),
変更された型 = Table.TransformColumnTypes(区切り記号による列の分割,{{"属性.2", Int64.Type}}),
// 属性から分割した数字を使って列方向の位置を生成
整数除算済みの列 = Table.TransformColumns(変更された型, {{"属性.2", each Number.IntegerDivide(_, 2), Int64.Type}}),
結合された列 = Table.CombineColumns(Table.TransformColumnTypes(整数除算済みの列, {{"属性.2", type text}}, "ja-JP"),{"属性.2", "属性.1"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"結合済み"),
ピボット解除された他の列1 = Table.UnpivotOtherColumns(結合された列, {"結合済み", "インデックス"}, "属性", "値"),
ピボットされた列 = Table.Pivot(ピボット解除された他の列1, List.Distinct(ピボット解除された他の列1[結合済み]), "結合済み", "値"),
// 削除列の意味の説明
#"名前が変更された列 " = Table.RenameColumns(ピボットされた列,{{"インデックス", "行番号"}, {"属性", "行内区切り位置"}}),
削除された列 = Table.RemoveColumns(#"名前が変更された列 ",{"行番号", "行内区切り位置"})
in
削除された列
Reference
이 문제에 관하여(Power Query에서 반복 열 일괄 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/olt_yt/items/b634e5cb888bb6d200a3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
item과 value가 연속한 데이터를
item
value
item2
value3
aaaa/bb/cc
11/22/333
dd/hh
77/44
dd/ee
44/55
ff/qq
11
ff/g
66
ss/rr
22/33
ee
7
nn/pp/cc
55/99
aaa/bbbb/cc
74/35
① 인덱스 열 추가
목적은 최종 단의 피벗 화에
1. 원행 번호
2. 셀 내 구분 위치
으로 구분하기 위해 여기에 원행 번호를 추가합니다.
이것이 없으면 여덟 번째로 오류가 발생합니다.
② 피벗 해제
색인을 선택한 상태에서 '기타 열 피벗 해제'
해제 열을 선택하고 피벗 해제도 비선택 열을 사용하여 "기타 열을 ~"
라는 코드가 생성되므로 어느 쪽이라도 좋다,
목적이 명확하기 때문에 "기타 ~"를 사용
행 추가시 피벗 해제에서 제거하려면
'선택한 열만 피벗 해제'를 선택해야 함
③열 분할
열 분할로 문자와 숫자를 분할. 열 병합 헤더에 사용
④열분할
값 열을 '/'로 열 분할
여기서 열로 분할을 열 방향 지정으로 분할하는 것이 이번 키모
헤더의 중복된 열은 UI가 자동으로 일련번호해 주므로 셀내의 단락 위치 기호로서 재이용합니다
분할 수는 크게 선택하면 큰 데이터가 들어갈 때 사라지지 않으므로 권장
사용되지 않는 열은 ⑦의 피벗 해제로 사라집니다.
⑤정수 나눗셈
[속성.2] 열에 정수 나누기
이번 데이터라면 2를 선택
Power Query에서 헤더를 지정한 것은 1부터 시작하기 때문에
전단에 가산으로 +1을 붙이는 것
⑥열 병합
원래 열 순서에 맞추기 위해
속성 .1과 속성 .2를 열 병합
⑦ 피벗 해제
열 병합을 한 행을 선택하여 2단째의 피벗 해제
⑧열 피벗
⑥로 만든 병합 열을 선택하고
값 열: 값, 고급 옵션: 집계하지 않음
에서 실시
값 열의 선택을 변경하면 고급 옵션의 내용이 변경되므로주의
이 후 불필요한 열을 삭제하고 종료
모든 쿼리 (원래 데이터 포함)
고급 편집기에 복사합니다. 어쩌면 움직일 것입니다.
let
// 元データ取り出し部
ソース = "VZDJDoMwDET/xWckKxsR/ZW6B5ZQKqWIpfRS8e91SkEmt0xmnuO5fuDxCk+4QMmHsKoI6xoyeJdxCSwrRag1oTGG1eTVrDYNYdftNsOK94TWwpodwOQJQaCsJXROUNqWcBwlRSlJSO93AchzEZ5nwmmS4e2bEnAa70W47wmHQa6aAM4RFoUA9EuMB2C77IR/W+e+fkXwlsbBevsC",
a1 = Binary.FromText(ソース),
a2 = Binary.Decompress(a1,Compression.Deflate),
a3= Table.FromRecords(Json.Document(a2,932)),
//
// ここから処理
//
追加されたインデックス = Table.AddIndexColumn(a3, "インデックス", 1, 1),
ピボット解除された他の列 = Table.UnpivotOtherColumns(追加されたインデックス, {"インデックス"}, "属性", "値"),
文字の移行による列の分割 = Table.SplitColumn(ピボット解除された他の列, "属性", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"属性.1", "属性.2"}),
// ここの「詳細設定>分割後の行数」を多めに指定するとよい
区切り記号による列の分割 = Table.SplitColumn(文字の移行による列の分割, "値", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"値.1", "値.2", "値.3", "値.4", "値.5"}),
変更された型 = Table.TransformColumnTypes(区切り記号による列の分割,{{"属性.2", Int64.Type}}),
// 属性から分割した数字を使って列方向の位置を生成
整数除算済みの列 = Table.TransformColumns(変更された型, {{"属性.2", each Number.IntegerDivide(_, 2), Int64.Type}}),
結合された列 = Table.CombineColumns(Table.TransformColumnTypes(整数除算済みの列, {{"属性.2", type text}}, "ja-JP"),{"属性.2", "属性.1"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"結合済み"),
ピボット解除された他の列1 = Table.UnpivotOtherColumns(結合された列, {"結合済み", "インデックス"}, "属性", "値"),
ピボットされた列 = Table.Pivot(ピボット解除された他の列1, List.Distinct(ピボット解除された他の列1[結合済み]), "結合済み", "値"),
// 削除列の意味の説明
#"名前が変更された列 " = Table.RenameColumns(ピボットされた列,{{"インデックス", "行番号"}, {"属性", "行内区切り位置"}}),
削除された列 = Table.RemoveColumns(#"名前が変更された列 ",{"行番号", "行内区切り位置"})
in
削除された列
Reference
이 문제에 관하여(Power Query에서 반복 열 일괄 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/olt_yt/items/b634e5cb888bb6d200a3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let
// 元データ取り出し部
ソース = "VZDJDoMwDET/xWckKxsR/ZW6B5ZQKqWIpfRS8e91SkEmt0xmnuO5fuDxCk+4QMmHsKoI6xoyeJdxCSwrRag1oTGG1eTVrDYNYdftNsOK94TWwpodwOQJQaCsJXROUNqWcBwlRSlJSO93AchzEZ5nwmmS4e2bEnAa70W47wmHQa6aAM4RFoUA9EuMB2C77IR/W+e+fkXwlsbBevsC",
a1 = Binary.FromText(ソース),
a2 = Binary.Decompress(a1,Compression.Deflate),
a3= Table.FromRecords(Json.Document(a2,932)),
//
// ここから処理
//
追加されたインデックス = Table.AddIndexColumn(a3, "インデックス", 1, 1),
ピボット解除された他の列 = Table.UnpivotOtherColumns(追加されたインデックス, {"インデックス"}, "属性", "値"),
文字の移行による列の分割 = Table.SplitColumn(ピボット解除された他の列, "属性", Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9"}, c), {"0".."9"}), {"属性.1", "属性.2"}),
// ここの「詳細設定>分割後の行数」を多めに指定するとよい
区切り記号による列の分割 = Table.SplitColumn(文字の移行による列の分割, "値", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"値.1", "値.2", "値.3", "値.4", "値.5"}),
変更された型 = Table.TransformColumnTypes(区切り記号による列の分割,{{"属性.2", Int64.Type}}),
// 属性から分割した数字を使って列方向の位置を生成
整数除算済みの列 = Table.TransformColumns(変更された型, {{"属性.2", each Number.IntegerDivide(_, 2), Int64.Type}}),
結合された列 = Table.CombineColumns(Table.TransformColumnTypes(整数除算済みの列, {{"属性.2", type text}}, "ja-JP"),{"属性.2", "属性.1"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"結合済み"),
ピボット解除された他の列1 = Table.UnpivotOtherColumns(結合された列, {"結合済み", "インデックス"}, "属性", "値"),
ピボットされた列 = Table.Pivot(ピボット解除された他の列1, List.Distinct(ピボット解除された他の列1[結合済み]), "結合済み", "値"),
// 削除列の意味の説明
#"名前が変更された列 " = Table.RenameColumns(ピボットされた列,{{"インデックス", "行番号"}, {"属性", "行内区切り位置"}}),
削除された列 = Table.RemoveColumns(#"名前が変更された列 ",{"行番号", "行内区切り位置"})
in
削除された列
Reference
이 문제에 관하여(Power Query에서 반복 열 일괄 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/olt_yt/items/b634e5cb888bb6d200a3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)