날짜 시간을 나타내는 열은 "날짜"와 "시간"을 나타내는 열로 분해하는 것이 좋습니다.
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 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가 되어야 한다.
고려하고 싶은 것
// 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
생각했어요🙄
부주의하게 Power BI Pro에서 허용되는 최대 데이터 세트 크기(1GB)의 많은 점유 가능성을 생각하면 필수에 가깝다고 생각합니다.
기타
Reference
이 문제에 관하여(날짜 시간을 나타내는 열은 "날짜"와 "시간"을 나타내는 열로 분해하는 것이 좋습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/PowerBIxyz/items/c12416169f13093f6e8a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)