Record.FieldValuesとRecord.ToListを比べてみた|Power Query
全く同じにしか見えない二つの関数について調べた行きがかり上、記事にしました。
やはり違いは見出せないです・・・。
元となるレコード
大小、データ型などばらばらにしてみる。
let
Source = [A=10,C=3,G=Json.FromValue({1..100}),B=1,E={1..20},F=[],D=11]
in
Source
テストするためのクエリ
Record.FieldValues
ログ出力をかませてありますが、なくても関係なさそうです。
let
Source = RecordSource,
Custom3 = Diagnostics.Trace(TraceLevel.Information,
"Execute_FiledValues",//自由に出力したい文字列を書ける。
()=> Record.FieldValues(Source),//とにかく、関数の形にすればよい。
true
)
in
Custom3
Record.ToList
構造は同様。
let
Source = RecordSource,
Custom2 = Diagnostics.Trace(TraceLevel.Information,
"Execute_ToList",
()=>Record.ToList(Source),true
)
in
Custom2
単純出力結果
実行時間
診断機能で6回ログを取り、その平均値を求めてみました。
1回で2クエリを更新するため、前半3回と後半3回とで、クエリの更新順序は入れ替えました。
Power BIの診断機能を準備する
↓実行すると、こんな具合にログを読むクエリが自動で作られる。(1回で2つのクエリができる)
結果を抽出したクエリ
当初は自動生成されるクエリを#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 |
Author And Source
この問題について(Record.FieldValuesとRecord.ToListを比べてみた|Power Query), 我々は、より多くの情報をここで見つけました https://qiita.com/tanuki_phoenix/items/296b6944dfa31c185b30著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .