Power Query 추적 로그를 Power Query에서 구문 분석하려고했습니다.
6298 단어 PowerBIExcelPowerQuery
Power Query 있어요, 저것은 마법의 지팡이니까 수업하지 않고 사용할 수 있게 되지 않아요. htps // t. 코/9gy8g↑이 GQ #PowerBI #PowerQuery #PBIJP — Takeshi Kagata (@PowerBIxyz) 2019년 4월 4일
Power BI Desktop에 "쿼리 진단"기능이 추가되었습니다.
Power Query 편집기에서 진단 시작부터 종료, 구문 분석 된 파일 (JSON)에서 로그 등을 볼 수 있습니다
파서 본체
추적 로그 출력 대상은 [Power Query Editor] ⇒ [옵션 및 설정] ⇒ [진단]
트레이스 시작은 [트레이스 활성화]를 ON
분석, 리팩토링 등을 좋아합니다.let
Source = Folder.Contents(" << >> "),
FilteredRows = Table.SelectRows(Source, each Text.Lower([Extension]) = ".log"),
Content = List.Combine(List.Transform(FilteredRows[Content], Lines.FromBinary)),
TableFromContent = Table.FromColumns({Content}, {"Value"}),
SplitColumnByDelimiter1 = Table.SplitColumn(
TableFromContent,
"Value",
Splitter.SplitTextByEachDelimiter(
{":"},
QuoteStyle.None,
false
),
{"Value.1", "Value.2"}
),
SplitColumnByDelimiter2 = Table.SplitColumn(
SplitColumnByDelimiter1,
"Value.2",
Splitter.SplitTextByEachDelimiter(
{":"},
QuoteStyle.None,
false
),
{"Value.2", "Value.3"}
),
TryParseJSON = Table.TransformColumns(
SplitColumnByDelimiter2,
{
"Value.3",
each List.Last(
List.Generate(
()=>[SourceText = _, Condition = true, Limit = 0],
each [Condition] and [Limit] <= 5,
each [
Limit = [Limit] + 1,
_try = try Json.Document([SourceText]),
Condition = _try[HasError],
_field = Text.BetweenDelimiters(_try[Error][Message], "'", "'"),
_SourceText = Text.Split([SourceText], """" & _field & """"),
SourceText = Text.Combine(
List.Combine(
List.Zip(
{
_SourceText,
List.Transform(
{1 .. List.Count(_SourceText) - 1},
each """" & _field & Text.From(_) & """"
)
}
)
)
)
],
each [SourceText]
)
)
}
),
ParsedJSON = Table.TransformColumns(
TryParseJSON,
{"Value.3", Json.Document}
),
RemovedErrors = Table.RemoveRowsWithErrors(ParsedJSON),
// ここで展開するフィールドを調整
ExpandedValue3 = Table.ExpandRecordColumn(
RemovedErrors,
"Value.3",
{"Start", "Action", "Duration", "Message", "RequestUri"},
{"Start", "Action", "Duration", "Message", "RequestUri"}
),
ChangedType = Table.TransformColumnTypes(
ExpandedValue3,
{
{"Start", type text},
{"Action", type text},
{"Duration", type text},
{"Message", type text}
}
),
SortedRows = Table.Sort(ChangedType,{{"Start", Order.Ascending}}),
AddedIndex = Table.AddIndexColumn(SortedRows, "Index", 1, 1)
in
AddedIndex
거친 주석
let
Source = Folder.Contents(" << >> "),
FilteredRows = Table.SelectRows(Source, each Text.Lower([Extension]) = ".log"),
Content = List.Combine(List.Transform(FilteredRows[Content], Lines.FromBinary)),
TableFromContent = Table.FromColumns({Content}, {"Value"}),
SplitColumnByDelimiter1 = Table.SplitColumn(
TableFromContent,
"Value",
Splitter.SplitTextByEachDelimiter(
{":"},
QuoteStyle.None,
false
),
{"Value.1", "Value.2"}
),
SplitColumnByDelimiter2 = Table.SplitColumn(
SplitColumnByDelimiter1,
"Value.2",
Splitter.SplitTextByEachDelimiter(
{":"},
QuoteStyle.None,
false
),
{"Value.2", "Value.3"}
),
TryParseJSON = Table.TransformColumns(
SplitColumnByDelimiter2,
{
"Value.3",
each List.Last(
List.Generate(
()=>[SourceText = _, Condition = true, Limit = 0],
each [Condition] and [Limit] <= 5,
each [
Limit = [Limit] + 1,
_try = try Json.Document([SourceText]),
Condition = _try[HasError],
_field = Text.BetweenDelimiters(_try[Error][Message], "'", "'"),
_SourceText = Text.Split([SourceText], """" & _field & """"),
SourceText = Text.Combine(
List.Combine(
List.Zip(
{
_SourceText,
List.Transform(
{1 .. List.Count(_SourceText) - 1},
each """" & _field & Text.From(_) & """"
)
}
)
)
)
],
each [SourceText]
)
)
}
),
ParsedJSON = Table.TransformColumns(
TryParseJSON,
{"Value.3", Json.Document}
),
RemovedErrors = Table.RemoveRowsWithErrors(ParsedJSON),
// ここで展開するフィールドを調整
ExpandedValue3 = Table.ExpandRecordColumn(
RemovedErrors,
"Value.3",
{"Start", "Action", "Duration", "Message", "RequestUri"},
{"Start", "Action", "Duration", "Message", "RequestUri"}
),
ChangedType = Table.TransformColumnTypes(
ExpandedValue3,
{
{"Start", type text},
{"Action", type text},
{"Duration", type text},
{"Message", type text}
}
),
SortedRows = Table.Sort(ChangedType,{{"Start", Order.Ascending}}),
AddedIndex = Table.AddIndexColumn(SortedRows, "Index", 1, 1)
in
AddedIndex
생각했어요🙄
Power BI Desktop 의 로그는 Excel 로, Excel 의 로그는 Power BI Desktop 로 바라보는 것이 편할지도.
어디까지 세세하게 파악할 수 있을지는 모른다. 로그 체재는 언젠가 변화할지도 모르고다. 그렇지만, 어떻게 처리가 되는지 힌트를 얻는 것은 가능하지 않을까. Diagnostics.Trace에 대해 별도로 게시할까요?
기타
Reference
이 문제에 관하여(Power Query 추적 로그를 Power Query에서 구문 분석하려고했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/PowerBIxyz/items/d32807275fa73afebd8c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)