なんでもエクセル(Nandemo Excel)

何でもエクセルでやってしまう そこのあなた。ようこそ

Power Query:型リストから型レコードへの変換

タイプリストからタイプレコードへの変換。あるいはタイプレコードからタイプリストへの変換。これってどうやるんだろうと色々試してみた。

    TypeList = {
        {"日付", Date.Type},
        {"テキスト", Text.Type},
        {"数値", Int64.Type}
    }

例えばこんなリストがあるとして、これをレコードに加工したい場合。

    TypeRecord = [
        a = List.Transform(TypeList, each _{0}),
        b = List.Transform(TypeList, each {_{1}, false}),
        c = List.Transform(b, each Record.FromList(_, {"Type", "Optional"})),
        d = Type.ForRecord(Record.FromList(c, a), false)
    ][d]

最初はこんな感じで考えてみた。ただなんかどうもしっくりこない。変換しまくりで不格好な気がする。List.Transoformだらけなのも気に食わない。

あきらめが悪いので色々考えてみた結果、いっそ空のテーブルに一度変換してからレコードを取り出したらどうだろうかと思い付いた。

    TypeRecord = [
        a = #table(List.Transform(TypeList, each _{0}),{}),
        b = Table.TransformColumnTypes(a, TypeList),
        c = Type.TableRow(Value.Type(b))
    ][c]

こっちのほうが幾分かすっきりする。

次は反対に、レコードからリストに変換してみる。

    TypeList = [
        a = Type.RecordFields(TypeRecord),
        b = Record.FieldNames(a),
        c = List.Transform(Record.FieldValues(a), each [Type]),
        d = List.Zip({b, c})
    ][d]

なんとなくまだ納得できてない。