Office 365 감사 로그를 Excel에서 쉽게 성형하려면

Power BI Desktop 및 Excel 쿼리 편집기를 사용하면 JSON 형식으로 작성된 데이터를 쉽게 분석할 수 있습니다. 여기서는 Office 365 감사 로그(csv)를 빠르게 Excel 테이블로 변환해 봅니다. 요점은 JSON 형식의 AuditData 열을 구문 분석하는 것입니다. 또한 Office 365 감사 로그의 AuditData 열은 제공된 서비스별로 검색할 수 있는 필드(열)가 다릅니다. 그래서 로그를 얻고 싶은 서비스별로 내보내는 것은 해결책을 단순화하는 방법이지만, 여전히 AuditData 열에서 필요한 값을 참조하기위한 "열 분할"이 어렵거나 스마트하지는 않습니다. 생각합니다.

제20회 Office 365 공부회 의 LT로 조금 만졌습니다만 그 보충입니다.

Office 365 감사 로그



감사 로그를 참조할 수 있는 유저는 한정되기 때문에 그 설 등의 해설은 하지 않는다.
  • 감사 로그를 검색하고 Office 365에서 사용자 및 관리자 활동 확인 - Office 365
  • Office 365 보안 센터 및 컴플라이언스 센터에서 감사 로그를 검색하는 Office 지원
  • Office 365 감사 로그의 자세한 속성 - Office 365

  • Office 365 감사 로그를 Excel 테이블로 가져오기



    우선 가져오기




    1 - 해당 로그 파일(csv)을 가져옵니다.
    2 - 유니코드인 것 등 자동으로 인식되지만 다르면 조정한다. 편집에서 쿼리 편집기로.

    AuditData 열 구문 분석




    3 - AuditData 열 선택
    4 - [해석] → [JSON]



    구문 분석된 AuditData 열에서 참조




    5 - 맞춤 열 추가
    6 - "새 열 이름"과 "사용자 지정 열 식"을 설정합니다. 식은 "=[AuditData][Workload]"


    AuditData 열에서 필드 Workload 값을 추출할 수 있습니다. 동일한 절차로 필드 ResultStatus를 추출합니다.


    7 - 동일한 절차로 ResultStatus를 추출합니다. 식은 "=[AuditData][ResultStatus]"


    AuditData 에 필드 ResultStatus 가 존재하지 않는 경우는 Error 가 되므로,
    8 - 수식을 "= [AuditData][Workload]?"로 수정



    필드 액세스의 "[]"에 "?"를 붙이면, 필드가 존재하는 경우는 해당의 값을, 필드가 존재하지 않는 경우 null 를 돌려준다.


    9 - AuditData 열 선택
    10 - 열 삭제

    Excel 테이블에 로드




    11 - 쿼리 편집기 닫기 및 로드

    다중값이 있는 필드 참조




    JSON에 퍼스 한 곳에서 시작해 보자.


    RecordType이 15인 필터를 적용하는 필터 적용


    ExtendedProperties 열을 사용자 지정 열 추가로 추출
    각각의 값은 record 의 list인 것을 확인할 수 있다. 그리고 그 요소수가 다르다.


    record 형의 값 리스트는 table 로 변환
    Name - Value 의 조합을 나타내는 테이블이 된다


    행과 열을 바꾸고,


    첫 번째 줄을 열 이름으로


    반드시 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
    



    table 형의 값은 열의 전개를 할 수 있지만, 이 경우는 감사 로그에 존재하는 프로퍼티만이 되므로 용도에 맞추어 사용하면 된다.

    정보


  • Office 365 Management Activity API schema | MSDN

  • 기타


  • Power BI 스터디 - connpass
  • Power BI Desktop을 사용하려면
  • Excel에서 Power Query를 사용하려면
  • Japan Office365 Users Group
  • 좋은 웹페이지 즐겨찾기