Record.FieldValuesとRecord.ToListを比べてみた｜Power Query

全く同じにしか見えない二つの関数について調べた行きがかり上、記事にしました。
やはり違いは見出せないです･･･。:expressionless:

##元となるレコード
大小、データ型などばらばらにしてみる。

```pq:RecordSource
let
    Source = [A=10,C=3,G=Json.FromValue({1..100}),B=1,E={1..20},F=[],D=11]
in
    Source
```
↓プレビューの様子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/4b465084-c800-7f84-3253-639c4c0f3327.png)



##テストするためのクエリ
###Record.FieldValues
ログ出力をかませてありますが、なくても関係なさそうです。

```pq:Values
let
    Source = RecordSource,
    Custom3 = Diagnostics.Trace(TraceLevel.Information,
                                "Execute_FiledValues",//自由に出力したい文字列を書ける。
                                ()=> Record.FieldValues(Source),//とにかく、関数の形にすればよい。
                                true
              )
in
    Custom3
```

###Record.ToList
構造は同様。

```pq:ToList
let
    Source = RecordSource,
    Custom2 = Diagnostics.Trace(TraceLevel.Information,
                                "Execute_ToList",
                                ()=>Record.ToList(Source),true
              )
in
    Custom2
```


##単純出力結果
同じなわけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/5cfda607-4024-5a17-79c6-5080467e97a2.png)


##実行時間
診断機能で6回ログを取り、その平均値を求めてみました。
1回で2クエリを更新するため、前半3回と後半3回とで、クエリの更新順序は入れ替えました。

###Power BIの診断機能を準備する
管理者としての実行で、Power BIを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/e5e221ce-aebc-010d-b8ec-3942c4355c1e.png)


↓実行すると、こんな具合にログを読むクエリが自動で作られる。（1回で2つのクエリができる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/bffa5dcc-8630-1748-5982-42b99016cd88.png)

###結果を抽出したクエリ
当初は自動生成されるクエリを#sectionを使って、集計すればいいかな、と思ったんですが、Power BIのデータモデルにロードできませんでした。
なので、自分で集計するクエリを書きました。Jsonファイルもきれいで、技術的には新しいものはないですね。

```
let
    InFolder =Folder.Files(ログフォルダ),
    #"Filtered Rows" = Table.SelectRows(InFolder, each ([Extension] = ".json")),
    //診断の都度、Jsonが3種類作成されるが、そのうちの1個でいいので名前を絞り込み。
    #"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each Text.StartsWith([Name], "Diagnostics_Aggregated")),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows1",{"Content", "Date created"}),
    #"Added Custom" = Table.AddColumn(#"Removed Other Columns", "JSON変換後", each 
                                        Table.FromRecords(Json.Document([Content]))
                      ),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Content"}),
    //combineでないので、各データのテーブル列名を統合しておきました。
    Names =List.Distinct(
                List.Combine(
                    List.Transform(#"Removed Columns"[JSON変換後],Table.ColumnNames)
                )
           ),
    #"Expanded {0}" = Table.ExpandTableColumn(#"Removed Columns", "JSON変換後", Names, Names),
    //実施日が一緒なので、時刻だけを取る。
    #"Extracted Time" = Table.TransformColumns(#"Expanded {0}",{{"Date created", DateTime.Time, type time}}),
    //集計前にデータ型を規定する。
    #"Changed Type" = Table.TransformColumnTypes(#"Extracted Time",{{"ExclusiveDuration", type duration}}),
    //
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Date created", "Query", "Step"}, {
                            {"合計秒数", each Duration.Seconds(List.Sum([ExclusiveDuration])),type number}
                    　})
in
    #"Grouped Rows"
```

###結果
取れたデータは下記の通り。

|Date created|Query|Step|合計秒数|
|---|---|---|---|
|15:27|Values|Custom3|1.096082|
|15:27|Values|Source|0.0166865|
|15:27|ToList|Custom2|0.038083|
|15:27|ToList|Source|0.0280941|
|15:28|Values|Custom3|0.1193354|
|15:28|Values|Source|0.0163969|
|15:28|ToList|Custom2|0.0251825|
|15:28|ToList|Source|0.0152157|
|15:30|Values|Custom3|0.043262|
|15:30|Values|Source|0.022095|
|15:30|ToList|Custom2|0.0362267|
|15:30|ToList|Source|0.0200129|
|16:41|ToList|Custom2|0.0543803|
|16:41|ToList|Source|0.0385302|
|16:41|Values|Custom3|0.0765213|
|16:41|Values|Source|0.0316931|
|16:43|ToList|Custom2|0.065703|
|16:43|ToList|Source|0.0267765|
|16:43|Values|Custom3|0.0298695|
|16:43|Values|Source|0.0240801|
|16:44|ToList|Custom2|0.0478038|
|16:44|ToList|Source|0.0283888|
|16:44|Values|Custom3|0.0465215|
|16:44|Values|Source|0.0247305|

レポートで平均を求めると、こんな具合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/c992eb7d-356e-1c75-d1d3-00c0abe8162f.png)

一応、データ数を10万件にして同様のテストしてみましたが、ほぼ同じ。要は差がない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/370992/0e05ea3b-8af3-52e0-8413-ed32b75e8d34.png)