날짜 시간을 나타내는 열은 "날짜"와 "시간"을 나타내는 열로 분해하는 것이 좋습니다.

3651 단어 PowerBI
퍼포먼스는 전혀 신경쓰지 않고, 용량적인 문제는 모두 💰로 해결하고. 라고 말하면 그대로 괜찮다.

무슨 일이야



이런 일


DateTime


2020-05-13 10:00:00

2020-05-13 10:15:00

2020-05-13 10:30:00



Date
시간


2020-05-13
10:00:00

2020-05-13
10:15:00

2020-05-13
10:30:00




대량 데이터라도 신속하게 처리되도록 가능한 한 정리를 해주기 바란다.
데이터 모델에 데이터가 로드될 때 좋은 느낌으로 데이터를 정리하는 구조를 가지고 있지만, 그 관리 단위는 "열". 특히 날짜 시간의 값은 테이블의 열 중에서 독특한 값이 되는 경향이 높고, 정리는 되지만 그 효과가 낮다. 효과가 낮기 때문에 데이터 모델의 용량이 커져 큰 메모리를 소비하게 되고, 결과적으로 집계의 성능이 저하되는 경향이 된다.

"yyyy-MM-dd hh-mm-ss"를 "yyyy-MM-dd"와 "hh-mm-ss"로 나누고 각 열에 정리하면 행에서 날짜 시간을 표현하면서 데이터를 정리해 둘 수 있다.

다른 표현을 하면 이런 일이지만,


Date
시간


2020-05-13 00:00:00
1899-12-30 10:00:00

2020-05-13 00:00:00
1899-12-30 10:15:00

2020-05-13 00:00:00
1899-12-30 10:30:00


정수 부분과 소수 부분을 나누는 것에 대해서는, 초절에 행수가 많은 데이터 모델로 검토하는 것이 있는 수단이다. 하지만 날짜 시간에 대해서는 타임 인텔리전스 함수를 사용할 수 있게 된다는 것도 있다.

구체적으로 일어나는 일



극단적인 예에서
2020-01-01 00:00:00에서 2020-12-31 23:59:59까지의 연속 날짜 시간을 가진 31,622,400 행
Table1 : 열 "DateTime"만
Table2 : 열 "Date"및 "Time"
// RowCount
31622400 meta [
    IsParameterQuery=true,
    Type="Number",
    IsParameterQueryRequired=true
]

// TimeStampList
let
    Source = List.DateTimes(
        #datetime( 2020, 1, 1, 0, 0, 0 ),
        RowCount,
        #duration( 0, 0, 0, 1 )
    )
in
    Source

// Table1
let
    Source = Table.FromColumns( { TimeStampList }, { "DateTime" } ),
    ChangedType = Table.TransformColumnTypes(
        Source,
        {"DateTime", type datetime}
    )
in
    ChangedType

// Table2
let
    Source = Table.FromColumns(
        { TimeStampList, TimeStampList },
        { "Date", "Time" }
    ),
    ChangedType = Table.TransformColumnTypes(
        Source,
        {
            {"Date", type date},
            {"Time", type time}
        }
    )
in
    ChangedType

DAX Studio의 Vertipaq Analyzer
DMV를 딱딱하게 참조하는 것이 좋지만 유용한 도구를 사용합니다.

테이블과 각 열이 소비하는 메모리 크기를 살펴보면 [Cardinality]는 열에 포함되는 고유 값의 수를 나타내며 [Col Size] [Data] [Dictionary] [Hier Size] 캡처에서는 끊어져 버렸다 그러나 [User Hier Size] [Rel Size]와의 합계는 [Table]입니다.
Table1 : 열 "DateTime"에서만 1.8GB
Table2 : 열 "Date"및 "Time"의 경우 90MB
와 자리 차이의 소비가 된다. 반으로 끝나는 용량의 행수가 되었다고 해도 너무 소비한다고 생각해야 할 것입니다. 데이터 모델에는 더 많은 열이 포함되어야합니다. Table1만의 데이터 세트 스토리지 크기(대개 pbix 파일의 크기)는 300MB가 되어야 한다.

고려하고 싶은 것


  • 날짜 수준 집계만 필요한 경우 날짜 시간 값은 "날짜"(yyyy-MM-dd 00:00:00으로 반올림)로.
  • 시간별 집계가 필요한 경우 초 단위/분 단위/시간 단위와 같은 집계 단위로 반올림 처리가 필요합니다
  • 반올림 처리는 로드되는 데이터에 대해 수행되어야 한다

  • 생각했어요🙄



    부주의하게 Power BI Pro에서 허용되는 최대 데이터 세트 크기(1GB)의 많은 점유 가능성을 생각하면 필수에 가깝다고 생각합니다.

    기타


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