Office 365 감사 로그를 Excel에서 쉽게 성형하려면
8949 단어 Office365ExcelPowerQuery
제20회 Office 365 공부회 의 LT로 조금 만졌습니다만 그 보충입니다.
Office 365 감사 로그
감사 로그를 참조할 수 있는 유저는 한정되기 때문에 그 설 등의 해설은 하지 않는다.
Office 365 감사 로그를 Excel 테이블로 가져오기
우선 가져오기
![](https://s1.md5.ltd/image/26edeba6a6a633505e903088161939c4.png)
1 - 해당 로그 파일(csv)을 가져옵니다.
2 - 유니코드인 것 등 자동으로 인식되지만 다르면 조정한다. 편집에서 쿼리 편집기로.
AuditData 열 구문 분석
![](https://s1.md5.ltd/image/3c7b9621158e184f1ef438d5d1ef78e0.png)
3 - AuditData 열 선택
4 - [해석] → [JSON]
![](https://s1.md5.ltd/image/4f417c952c8081a609e1bc9e3ddff84f.png)
구문 분석된 AuditData 열에서 참조
![](https://s1.md5.ltd/image/94de6779f8b543b3a053393a5cd651e8.png)
5 - 맞춤 열 추가
6 - "새 열 이름"과 "사용자 지정 열 식"을 설정합니다. 식은 "=[AuditData][Workload]"
![](https://s1.md5.ltd/image/9bd5bf6d022a9ff9d1826529763ed205.png)
AuditData 열에서 필드 Workload 값을 추출할 수 있습니다. 동일한 절차로 필드 ResultStatus를 추출합니다.
![](https://s1.md5.ltd/image/68a17eb789346479d62e1542013c7643.png)
7 - 동일한 절차로 ResultStatus를 추출합니다. 식은 "=[AuditData][ResultStatus]"
![](https://s1.md5.ltd/image/25c9f60a418462f10c00e0abc5d545fb.png)
AuditData 에 필드 ResultStatus 가 존재하지 않는 경우는 Error 가 되므로,
8 - 수식을 "= [AuditData][Workload]?"로 수정
![](https://s1.md5.ltd/image/e14dd6d92069a6039a2c1fdc148951ec.png)
![](https://s1.md5.ltd/image/e19199346e437f2833676e87030c17e9.png)
필드 액세스의 "[]"에 "?"를 붙이면, 필드가 존재하는 경우는 해당의 값을, 필드가 존재하지 않는 경우 null 를 돌려준다.
![](https://s1.md5.ltd/image/432e7d4434d1288521462fc9ab420bba.png)
9 - AuditData 열 선택
10 - 열 삭제
Excel 테이블에 로드
![](https://s1.md5.ltd/image/a713c6ab6cf81ceb38a82fbe0458a144.png)
11 - 쿼리 편집기 닫기 및 로드
다중값이 있는 필드 참조
![](https://s1.md5.ltd/image/11ed4aa2817e106df7d50e136a146dd0.png)
JSON에 퍼스 한 곳에서 시작해 보자.
![](https://s1.md5.ltd/image/603a62ca97ff12f591caa5d8d0899e6a.png)
RecordType이 15인 필터를 적용하는 필터 적용
![](https://s1.md5.ltd/image/8cc1f87e2ad20599b46edd746820e19a.png)
ExtendedProperties 열을 사용자 지정 열 추가로 추출
각각의 값은 record 의 list인 것을 확인할 수 있다. 그리고 그 요소수가 다르다.
![](https://s1.md5.ltd/image/ece756ed9dd93e1ce786e36a83552dd7.png)
record 형의 값 리스트는 table 로 변환
Name - Value 의 조합을 나타내는 테이블이 된다
![](https://s1.md5.ltd/image/b3201bfedeb2679959a8de6837d6b8ea.png)
행과 열을 바꾸고,
![](https://s1.md5.ltd/image/a264057b48354e6d29b820db67b360b5.png)
첫 번째 줄을 열 이름으로
![](https://s1.md5.ltd/image/f0cd4ffbe598668a1147cfcca847a66c.png)
반드시 1행의 테이블이 되므로 record 로 변환한다. 이렇게하면 필드 값을 쉽게 참조 할 수 있습니다.
let
FullName = "hogehoge\AuditLog_0000-00-00_0000-00-00.csv",
Source = Csv.Document(
File.Contents(FullName),
[Delimiter=",", Columns=4, Encoding=65001, QuoteStyle=QuoteStyle.None]
),
#"Promoted Headers" = Table.PromoteHeaders(
Source,
[PromoteAllScalars=true]
),
#"Changed Type" = Table.TransformColumnTypes(
#"Promoted Headers",
{
{"CreationDate", type datetime}
, {"UserIds", type text}
, {"Operations", type text}
, {"AuditData", type text}
}
),
#"Parsed JSON" = Table.TransformColumns(
#"Changed Type"
, {
{"AuditData", Json.Document}
}
),
Custom1 = Table.SelectRows(
#"Parsed JSON"
, each [AuditData][RecordType] = 15
),
Custom2 = Table.AddColumn(
Custom1
, "ExtendedProperties"
, each [AuditData][ExtendedProperties]
),
Custom3 = Table.TransformColumns(
Custom2
, {"ExtendedProperties", each Table.FromRecords(_)}
),
Custom4 = Table.TransformColumns(
Custom3
, {"ExtendedProperties", each Table.Transpose(_)}
),
Custom5 = Table.TransformColumns(
Custom4
, {"ExtendedProperties", each Table.PromoteHeaders(_)}
),
Custom6 = Table.TransformColumns(
Custom5
, {"ExtendedProperties", each _{0}}
)
in
Custom6
![](https://s1.md5.ltd/image/55cdda12d9159af1ce82fae3f1e4b436.png)
table 형의 값은 열의 전개를 할 수 있지만, 이 경우는 감사 로그에 존재하는 프로퍼티만이 되므로 용도에 맞추어 사용하면 된다.
정보
![](https://s1.md5.ltd/image/11ed4aa2817e106df7d50e136a146dd0.png)
JSON에 퍼스 한 곳에서 시작해 보자.
![](https://s1.md5.ltd/image/603a62ca97ff12f591caa5d8d0899e6a.png)
RecordType이 15인 필터를 적용하는 필터 적용
![](https://s1.md5.ltd/image/8cc1f87e2ad20599b46edd746820e19a.png)
ExtendedProperties 열을 사용자 지정 열 추가로 추출
각각의 값은 record 의 list인 것을 확인할 수 있다. 그리고 그 요소수가 다르다.
![](https://s1.md5.ltd/image/ece756ed9dd93e1ce786e36a83552dd7.png)
record 형의 값 리스트는 table 로 변환
Name - Value 의 조합을 나타내는 테이블이 된다
![](https://s1.md5.ltd/image/b3201bfedeb2679959a8de6837d6b8ea.png)
행과 열을 바꾸고,
![](https://s1.md5.ltd/image/a264057b48354e6d29b820db67b360b5.png)
첫 번째 줄을 열 이름으로
![](https://s1.md5.ltd/image/f0cd4ffbe598668a1147cfcca847a66c.png)
반드시 1행의 테이블이 되므로 record 로 변환한다. 이렇게하면 필드 값을 쉽게 참조 할 수 있습니다.
let
FullName = "hogehoge\AuditLog_0000-00-00_0000-00-00.csv",
Source = Csv.Document(
File.Contents(FullName),
[Delimiter=",", Columns=4, Encoding=65001, QuoteStyle=QuoteStyle.None]
),
#"Promoted Headers" = Table.PromoteHeaders(
Source,
[PromoteAllScalars=true]
),
#"Changed Type" = Table.TransformColumnTypes(
#"Promoted Headers",
{
{"CreationDate", type datetime}
, {"UserIds", type text}
, {"Operations", type text}
, {"AuditData", type text}
}
),
#"Parsed JSON" = Table.TransformColumns(
#"Changed Type"
, {
{"AuditData", Json.Document}
}
),
Custom1 = Table.SelectRows(
#"Parsed JSON"
, each [AuditData][RecordType] = 15
),
Custom2 = Table.AddColumn(
Custom1
, "ExtendedProperties"
, each [AuditData][ExtendedProperties]
),
Custom3 = Table.TransformColumns(
Custom2
, {"ExtendedProperties", each Table.FromRecords(_)}
),
Custom4 = Table.TransformColumns(
Custom3
, {"ExtendedProperties", each Table.Transpose(_)}
),
Custom5 = Table.TransformColumns(
Custom4
, {"ExtendedProperties", each Table.PromoteHeaders(_)}
),
Custom6 = Table.TransformColumns(
Custom5
, {"ExtendedProperties", each _{0}}
)
in
Custom6
![](https://s1.md5.ltd/image/55cdda12d9159af1ce82fae3f1e4b436.png)
table 형의 값은 열의 전개를 할 수 있지만, 이 경우는 감사 로그에 존재하는 프로퍼티만이 되므로 용도에 맞추어 사용하면 된다.
정보
기타
Reference
이 문제에 관하여(Office 365 감사 로그를 Excel에서 쉽게 성형하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/PowerBIxyz/items/1505592951af25c614c8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)