【Power Query】Table.FromRowsでtype指定するときにはまったこと

この記事ではハマったこと注意点は記載していますが、解決策はわかっていないです。
わかる方いたらコメント頂けると泣いて喜びます。

# やりたいこと

やりたいことは[<b>Table.FromRows</b>](https://docs.microsoft.com/ja-jp/powerquery-m/table-fromrows#example-2)の公式サイトに載っている下記のコートで、
型(type)を指定する際に変数に入れてから指定したいと思っています。

```vb:公式サイトの内容
Table.FromRows(
    {
        {1, "Bob", "123-4567"},
        {2, "Jim", "987-6543"}
    },
    type table [CustomerID = number, Name = text, Phone = text]
)
```

上記の内容を下記のように変更する場合はまだ正常に動きます。

```vb:少し変更した形
let
    recode_type = type table [CustomerID = number, Name = text, Phone = text],
    table = Table.FromRows(
        {
            {1, "Bob", "123-4567"},
            {2, "Jim", "987-6543"}
        },
        recode_type
    )
in
    table
```

ここからレコードと`type table`を切り分けるとエラーが発生します。


```vb:エラー発生するコード

let
    recode = [CustomerID = number, Name = text, Phone = text],
    recode_type = type table recode,
    table = Table.FromRows(
        {
            {1, "Bob", "123-4567"},
            {2, "Jim", "987-6543"}
        },
        recode_type
    )
in
    table
```

![2020-12-22_05h48_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/5d4a7e31-0f8d-f113-11b0-671d6b195142.png)


# なぜレコードとtype tableを分けたいのか？

テーブル作成後に1列だけ変更処理を行った後に同じデータ型で戻すのに必要だからです。
こんな感じで指定列だけ変更を加えた場合に

```
let
    テーブル = Table.FromRows(
        {
            {1, "Bob", "123-4567"},
            {2, "Jim", "987-6543"}
        },
        type table [CustomerID = number, Name = text, Phone = text]
    ),

    func = (x as text) => x & "_add_text",
    func2 = (x as record) => Record.ToList(Record.RemoveFields(x, "Name")),

    テーブル2 = 
    Table.FromRows(
        Table.TransformRows(テーブル, (row) => List.Combine({{func(row[Name])}, func2(row)}))
    )
in
    テーブル2
```

![2020-12-22_06h13_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/a6fb49ce-d20f-38d2-4428-2415ee9baf87.png)

何もつけないと上記のようにColumn1,2,3という項目名でany型になります。

かといって

```
type table [Name = text, CustomerID = number, Phone = text]
```
と全ての項目名を指定するのは項目名が多くなるのと面倒ですし、汎用的にはならないのです。

そこで下記のように変更までのレコードを取得しておきたいと思います。

```
let
    テーブル = Table.FromRows(
        {
            {1, "Bob", "123-4567"},
            {2, "Jim", "987-6543"}
        },
        type table [CustomerID = number, Name = text, Phone = text]
    ),

    func = (x as text) => x & "_add_text",
    func2 = (x as record) => Record.ToList(Record.RemoveFields(x, "Name")),

    columns = Table.Schema(テーブル),
    record_type= Record.FromList(columns[Kind], columns[Name])

in
    record_type
```

![2020-12-22_06h20_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/428239/59f99371-cea9-7d23-40ed-60b466599b76.png)

これにtype tableを付けるとエラーになります。

```
let
    テーブル = Table.FromRows(
        {
            {1, "Bob", "123-4567"},
            {2, "Jim", "987-6543"}
        },
        type table [CustomerID = number, Name = text, Phone = text]
    ),

    func = (x as text) => x & "_add_text",
    func2 = (x as record) => Record.ToList(Record.RemoveFields(x, "Name")),

    columns = Table.Schema(テーブル),
    record_type = type table Record.FromList(columns[Kind], columns[Name])

in
    record_type //エラー
```

これを実現できる方法を探しています。