버스 요금표를 테이블로 변환
4623 단어 PowerBIExcelPowerQuery
낭비에 긴 감이 있고, 완패입니다.
다른 답변 예 등, 코멘트하실 수 있으면 기쁩니다.
※2019/6/30 추기:쿼리 예 그 2를 넣었습니다.
요금표의 예
예를 들어 아래의 코드를 상세 편집기에 붙이면 테이블이 됩니다.
원래 요금표
let
Source = "vZK7DsIwDEX/xXMH5+mmK59BGdqmmQpMmRD/jpsCSnhULHSxfBRF58bx/gK78xSPJwENtNEI27fRkqy5H0hwld60kaR16XTgSkJCdb8moZGID1JM5km6IFOQLYigUYjXKgtzitOUSTibIyPbWGvtlmyQW7GwYmHF71amNWuOahmQ934eRG3gVyEWwvVnvghz1IvfBvY76/ibFPapBpX6kPoBtkiSo1mCOUm8J0Z1/EeOwsdt+WuIHO3bxjgUnEyPiHNK28E2KXKkFEqPfl5gFRCuhxs=",
Custom1 = Binary.Decompress(Binary.FromText(Source),Compression.Deflate),
Custom2 = Table.FromRecords(Json.Document(Custom1))
in
Custom2
요금표의 모습
변환할 쿼리: 1
당초 생각해 낸 안입니다.
코드
let
Source = 元の料金表,
#"Filled Down" = Table.FillDown(Source,Table.ColumnNames(Source)),
#"Reversed Rows" = Table.ReverseRows(#"Filled Down"),
Custom1 = Table.ToColumns(#"Reversed Rows")&
{{"発駅"} & List.RemoveFirstN(List.Reverse(Record.ToList(#"Reversed Rows"{0})),1) },
Custom2 = Table.FromColumns(Custom1),
#"Promoted Headers" = Table.PromoteHeaders(Custom2, [PromoteAllScalars=true]),
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Promoted Headers", {"発駅"}, "着駅", "料金"),
合成前 = Table.SelectRows(#"Unpivoted Other Columns", each Value.Type([料金]) = type number),
Custom3 = List.Transform(Table.ToRows(合成前),each {_{1},_{0},_{2}}),
Custom4 = Table.FromRows(
List.Distinct(Table.ToRows(合成前)& Custom3),
type table[発駅=text,着駅=text,料金=Int64.Type]
)
in
Custom4
처리 도중 이미지
Reversed Rows
Custom1
Custom2
Unpivoted Other Columns
완성도
변환할 쿼리: 2
다시 생각한 안입니다. 오이타 깨끗했습니다.
코드
let
Source = 元の料金表,
各行をリストにしてNull除去 = List.Transform(Table.ToRows(Source),each List.RemoveNulls(_)),
駅リスト = List.Transform( 各行をリストにしてNull除去,each _{0} ),
片側データ =List.Combine(
List.Transform( 各行をリストにしてNull除去,each
[発=_{0},
着= List.RemoveFirstN(駅リスト,List.PositionOf(駅リスト,発)+1),
料金=List.RemoveFirstN(_,1),
料金一覧 =List.Zip({List.Repeat({発},List.Count(着)),着,料金})
][料金一覧]
)
),
逆データ =List.Transform(片側データ,each {_{1},_{0},_{2}}),
テーブル化 =Table.FromRows( 片側データ& 逆データ,type table[発=text,着=text,料金=Int64.Type] )
in
テーブル化
해설
요점은 "한쪽 데이터"의 위치에서 "착용"목록을 얻는 것입니다. 예를 들자.
역 목록 뒤에 삽입
x=各行をリストにしてNull除去{2}{0}, //・・・"川内"が返って来ます
y=List.PositionOf(駅リスト,x), //・・・2が返ります。(0始まりで数える)
z=List.RemoveFirstN(駅リスト,y+1), //・・・川内より後の駅リストが返ります。
테스트 코드를 본 코드에 삽입해 시험하면, 카와우치보다 후의 4 역이 잡혀 있는 것을 알 수 있습니다.
Reference
이 문제에 관하여(버스 요금표를 테이블로 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tanuki_phoenix/items/3466a60979a36092d761텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)