Excel에서는 수백만 개의 행이 포함된 데이터 모델을 만든 다음 이러한 모델에 대해 강력한 데이터 분석을 수행할 수 있습니다. 데이터 모델은 파워 피벗 추가 기능을 사용하거나 사용하지 않고 만들 수 있으며, 동일한 통합 문서의 피벗 테이블, 차트 및 Power View 시각화를 지원할 수 있습니다.
Excel에서 거대한 데이터 모델을 쉽게 빌드할 수 있지만 여러 가지 이유가 없습니다. 첫째, 많은 테이블과 열을 포함하는 대형 모델은 대부분의 분석에 비해 과잉이며 번거로운 필드 목록을 만듭니다. 둘째, 대형 모델은 중요한 메모리를 사용하여 동일한 시스템 리소스를 공유하는 다른 애플리케이션 및 보고서에 부정적인 영향을 줍니다. 마지막으로 Microsoft 365 SharePoint Online과 Excel Web App은 모두 Excel 파일의 크기를 10MB로 제한합니다. 수백만 개의 행을 포함하는 통합 문서 데이터 모델의 경우 10MB 제한이 매우 빠르게 실행됩니다. 데이터 모델 사양 및 제한을 참조하세요.
이 문서에서는 작업하기 쉽고 메모리를 적게 사용하는 긴밀하게 구성된 모델을 빌드하는 방법을 알아봅니다. 효율적인 모델 디자인에서 모범 사례를 알아보는 데 시간을 할애하면 Excel, SharePoint Online, Microsoft 365Office Web Apps Server 또는 SharePoint에서 보는 등 사용자가 만들고 사용하는 모든 모델에 대한 여정이 마무리됩니다.
통합 문서 크기 최적화 프로그램을 실행하는 것도 좋은 방법입니다. 이 프로그램은 Excel 통합 문서를 분석하여 가능한 경우 추가로 압축합니다. 통합 문서 크기 최적화 관리자를 다운로드합니다.
이 문서의 내용
압축 비율 및 메모리 내 분석 엔진
Excel의 데이터 모델은 메모리 내 분석 엔진을 사용하여 데이터를 메모리에 저장합니다. 엔진은 스토리지 요구 사항을 줄이기 위해 강력한 압축 기술을 구현하여 원래 크기의 일부가 될 때까지 결과 집합을 축소합니다.
평균적으로 데이터 모델은 원본 지점에서 동일한 데이터보다 7~10배 작을 것으로 예상할 수 있습니다. 예를 들어 SQL Server 데이터베이스에서 7MB의 데이터를 가져오는 경우 Excel의 데이터 모델은 1MB 이하일 수 있습니다. 실제로 달성되는 압축 정도는 주로 각 열의 고유 값 수에 따라 달라집니다. 고유한 값이 많을수록 메모리를 저장하는 데 더 많은 메모리가 필요합니다.
압축 및 고유한 값에 대해 이야기하는 이유는 무엇인가요? 메모리 사용량을 최소화하는 효율적인 모델을 빌드하는 것은 압축 최대화에 관한 것이고, 가장 쉬운 방법은 특히 이러한 열에 많은 수의 고유 값이 포함된 경우 실제로 필요하지 않은 열을 제거하는 것입니다.
: 개별 열에 대한 스토리지 요구 사항의 차이는 엄청납니다. 경우에 따라 고유 값 수가 많은 하나의 열이 아닌 고유 값 수가 적은 여러 열을 갖는 것이 좋습니다. Datetime 최적화에 대한 섹션에서는 이 기술을 자세히 설명합니다.
메모리 사용량이 적은 경우 존재하지 않는 열을 능가하는 것은 없습니다.
가장 메모리 효율적인 열은 처음에 가져오지 않은 열입니다. 효율적인 모델을 빌드하려면 각 열을 살펴보고 수행하려는 분석에 기여하는지 스스로에게 물어봅니다. 확실하지 않거나 확실하지 않은 경우 그대로 둡니다. 필요한 경우 나중에 언제든지 새 열을 추가할 수 있습니다.
항상 제외해야 하는 열의 두 가지 예
첫 번째 예제는 데이터 웨어하우스에서 시작된 데이터와 관련이 있습니다. 데이터 웨어하우스에서는 웨어하우스에서 데이터를 로드하고 새로 고치는 ETL 프로세스의 아티팩트 를 찾는 것이 일반적입니다. 데이터가 로드될 때 "날짜 만들기", "업데이트 날짜" 및 "ETL 실행"과 같은 열이 만들어집니다. 이러한 열은 모델에 필요하지 않으며 데이터를 가져올 때 선택 취소되어야 합니다.
두 번째 예제에는 팩트 테이블을 가져올 때 기본 키 열을 생략하는 작업이 포함됩니다.
팩트 테이블을 포함한 많은 테이블에는 기본 키가 있습니다. 고객, 직원 또는 판매 데이터가 포함된 테이블과 같은 대부분의 테이블의 경우 모델에서 관계를 만드는 데 사용할 수 있도록 테이블의 기본 키를 사용할 수 있습니다.
팩트 테이블은 다릅니다. 팩트 테이블에서 기본 키는 각 행을 고유하게 식별하는 데 사용됩니다. 정규화를 위해 필요하지만 분석 또는 테이블 관계를 설정하는 데 사용되는 열만 사용하려는 데이터 모델에서는 유용하지 않습니다. 이러한 이유로 팩트 테이블에서 가져올 때 기본 키는 포함하지 않습니다. 팩트 테이블의 기본 키는 모델에서 엄청난 양의 공간을 사용하면서도 관계를 만드는 데 사용할 수 없으므로 아무런 이점을 제공하지 않습니다.
: 데이터 웨어하우스 및 다차원 데이터베이스에서는 대부분 숫자 데이터로 구성된 큰 테이블을 "팩트 테이블"이라고 합니다. 팩트 테이블에는 일반적으로 조직 단위, 제품, 시장 세그먼트, 지리적 지역 등에 집계되고 정렬되는 판매 및 비용 데이터 요소와 같은 비즈니스 성과 또는 트랜잭션 데이터가 포함됩니다. 비즈니스 데이터를 포함하거나 다른 테이블에 저장된 데이터를 상호 참조하는 데 사용할 수 있는 팩트 테이블의 모든 열은 데이터 분석을 지원하기 위해 모델에 포함되어야 합니다. 제외하려는 열은 팩트 테이블의 기본 키 열로, 팩트 테이블에만 있고 다른 곳에는 없는 고유한 값으로 구성됩니다. 팩트 테이블은 매우 거대하기 때문에 모델 효율성의 가장 큰 이력 중 일부는 팩트 테이블에서 행 또는 열을 제외하는 것에서 파생됩니다.
불필요한 열을 제외하는 방법
효율적인 모델에는 통합 문서에 실제로 필요한 열만 포함됩니다. 모델에 포함된 열을 제어하려면 Power Pivot 추가 기능의 테이블 가져오기 마법사를 사용하여 Excel의 "데이터 가져오기" 대화 상자 대신 데이터를 가져와야 합니다.
테이블 가져오기 마법사를 시작하면 가져올 테이블을 선택합니다.
각 테이블에 대해 미리 보기 & 필터 단추를 클릭하고 실제로 필요한 테이블 부분을 선택할 수 있습니다. 먼저 모든 열의 선택을 취소한 다음, 분석에 필요한지 여부를 고려한 후 원하는 열을 확인하는 것이 좋습니다.
필요한 행만 필터링하는 것은 어떨까요?
회사 데이터베이스 및 데이터 웨어하우스의 많은 테이블에는 오랜 기간 동안 누적된 기록 데이터가 포함되어 있습니다. 또한 관심 있는 테이블에는 특정 분석에 필요하지 않은 비즈니스 영역에 대한 정보가 포함될 수 있습니다.
테이블 가져오기 마법사를 사용하여 기록 또는 관련 없는 데이터를 필터링하여 모델에 많은 공간을 절약할 수 있습니다. 다음 이미지에서 날짜 필터는 필요하지 않은 기록 데이터를 제외하고 현재 연도의 데이터가 포함된 행만 검색하는 데 사용됩니다.
열이 필요한 경우 어떻게 해야 할까요? 여전히 공간 비용을 줄일 수 있나요?
열을 압축할 수 있는 더 나은 후보로 만들기 위해 적용할 수 있는 몇 가지 추가 기술이 있습니다. 압축에 영향을 주는 열의 유일한 특징은 고유 값의 수입니다. 이 섹션에서는 고유 값 수를 줄이기 위해 일부 열을 수정하는 방법을 알아봅니다.
Datetime 열 수정
대부분의 경우 Datetime 열에는 많은 공간이 소요됩니다. 다행히 이 데이터 형식에 대한 스토리지 요구 사항을 줄이는 방법에는 여러 가지가 있습니다. 이 기술은 열을 사용하는 방법과 SQL 쿼리를 빌드할 때의 편안함 수준에 따라 달라집니다.
날짜/시간 열에는 날짜 부분과 시간이 포함됩니다. 열이 필요한지 묻는 경우 Datetime 열에 대해 동일한 질문을 여러 번 합니다.
-
시간 부분이 필요한가요?
-
시간 수준에서 시간 파트가 필요한가요? 분? 초? 밀리초?
-
데이터 간 차이를 계산하거나 연도, 월, 분기 등을 기준으로 데이터를 집계하려고 하므로 Datetime 열이 여러 개 있나요?
이러한 각 질문에 답변하는 방법은 Datetime 열을 처리하기 위한 옵션을 결정합니다.
이러한 모든 솔루션에는 SQL 쿼리를 수정해야 합니다. 쿼리를 더 쉽게 수정하려면 모든 테이블에서 하나 이상의 열을 필터링해야 합니다. 열을 필터링하여 쿼리 생성을 약어 형식(SELECT *)에서 정규화된 열 이름을 포함하는 SELECT 문으로 변경하면 훨씬 쉽게 수정할 수 있습니다.
사용자를 위해 만들어진 쿼리를 살펴보겠습니다. 테이블 속성 대화 상자에서 쿼리 편집기로 전환하고 각 테이블에 대한 현재 SQL 쿼리를 볼 수 있습니다.
테이블 속성에서 쿼리 편집기를 선택합니다.
쿼리 편집기는 테이블을 채우는 데 사용되는 SQL 쿼리를 보여줍니다. 가져오는 동안 열을 필터링한 경우 쿼리에 정규화된 열 이름이 포함됩니다.
반면 열을 선택 취소하거나 필터를 적용하지 않고 테이블을 전체적으로 가져온 경우 쿼리는 "에서 * 선택"으로 표시되므로 수정하기가 더 어려워집니다.
|
SQL 쿼리 수정
이제 쿼리를 찾는 방법을 알게 되었으므로 모델 크기를 더 줄이기 위해 쿼리를 수정할 수 있습니다.
-
통화 또는 10진수 데이터가 포함된 열의 경우 소수 자릿수가 필요하지 않은 경우 이 구문을 사용하여 10진수를 제거합니다.
"SELECT ROUND([Decimal_column_name],0)... .”
센트가 필요하지만 센트의 일부가 아닌 경우 0을 2로 바꿉니다. 음수를 사용하는 경우 단위, 수십, 수백 등으로 반올림할 수 있습니다.
-
dbo라는 Datetime 열이 있는 경우 Bigtable. [날짜 시간] 시간 파트가 필요하지 않습니다. 구문을 사용하여 시간을 제거합니다.
"SELECT CAST(dbo. Bigtable. [날짜 시간] 날짜) AS [날짜 시간]) "
-
dbo라는 Datetime 열이 있는 경우 Bigtable. [날짜 시간] 및 Date 및 Time 파트가 모두 필요합니다. 단일 Datetime 열 대신 SQL 쿼리에서 여러 열을 사용합니다.
"SELECT CAST(dbo. Bigtable. [날짜 시간] as date ) AS [Date Time],
datepart(hh, dbo. Bigtable. [날짜 시간]) [날짜 시간 시간]으로,
datepart(mi, dbo. Bigtable. [날짜 시간]) [날짜 시간 분]으로,
datepart(ss, dbo. Bigtable. [날짜 시간]) [날짜 시간 초]로,
datepart(ms, dbo. Bigtable. [날짜 시간]) As [Date Time Milliseconds]"
각 파트를 별도의 열에 저장하는 데 필요한 만큼 열을 사용합니다.
-
시간 및 분이 필요하고 한 번 열로 함께 사용하는 것이 좋습니다. 구문을 사용할 수 있습니다.
Timefromparts(datepart(hh, dbo. Bigtable. [날짜 시간]), datepart(mm, dbo. Bigtable. [날짜 시간])) as [Date Time HourMinute]
-
[시작 시간] 및 [종료 시간]과 같은 두 개의 datetime 열이 있고 [Duration]이라는 열로 초 단위로 시간 차이가 필요한 경우 목록에서 두 열을 모두 제거하고 다음을 추가합니다.
"datediff(ss,[Start Date],[End Date]) as [Duration]"
ss 대신 ms 키워드를 사용하는 경우 시간(밀리초)이 표시됩니다.
열 대신 DAX 계산 측정값 사용
이전에 DAX 식 언어로 작업한 경우 계산된 열이 모델의 다른 열을 기반으로 새 열을 파생하는 데 사용되고 계산 측정값은 모델에서 한 번만 정의되지만 피벗 테이블 또는 다른 보고서에서 사용할 때만 평가된다는 것을 이미 알고 있을 수 있습니다.
한 가지 메모리 절약 기술은 일반 또는 계산 열을 계산된 측정값으로 바꾸는 것입니다. 클래식 예제는 단가, 수량 및 합계입니다. 세 가지가 모두 있는 경우 2개만 유지하고 DAX를 사용하여 세 번째 를 계산하여 공간을 절약할 수 있습니다.
유지해야 하는 열은 2개인가요?
위의 예제에서 수량 및 단가를 유지합니다. 이 두 값은 Total보다 적습니다. 합계를 계산하려면 다음과 같은 계산 측정값을 추가합니다.
"TotalSales:=sumx('Sales Table','Sales Table'[Unit Price]*'Sales Table'[Quantity])"
계산 열은 둘 다 모델의 공간을 차지한다는 의 일반 열과 같습니다. 반면 계산된 측정값은 즉석에서 계산되며 공간을 차지하지 않습니다.
결론
이 문서에서는 보다 메모리 효율적인 모델을 빌드하는 데 도움이 되는 몇 가지 방법에 대해 설명했습니다. 데이터 모델의 파일 크기 및 메모리 요구 사항을 줄이는 방법은 전체 열 및 행 수와 각 열에 표시되는 고유 값 수를 줄이는 것입니다. 여기서 다루는 몇 가지 기술은 다음과 같습니다.
-
물론 열을 제거하는 것이 공간을 절약하는 가장 좋은 방법입니다. 실제로 필요한 열을 결정합니다.
-
경우에 따라 열을 제거하고 테이블에서 계산된 측정값으로 바꿀 수 있습니다.
-
테이블의 모든 행이 필요하지 않을 수 있습니다. 테이블 가져오기 마법사에서 행을 필터링할 수 있습니다.
-
일반적으로 단일 열을 여러 개의 개별 부분으로 나누는 것은 열의 고유 값 수를 줄이는 좋은 방법입니다. 각 파트에는 고유한 값이 적고 결합된 합계는 원래 통합 열보다 작습니다.
-
대부분의 경우 보고서에서 슬라이서로 사용할 고유 부분도 필요합니다. 적절한 경우 시간, 분 및 초와 같은 부분에서 계층 구조를 만들 수 있습니다.
-
여러 번 열에는 필요한 것보다 더 많은 정보가 포함되어 있습니다. 예를 들어 열이 10진수를 저장하지만 모든 소수 자릿수를 숨기도록 서식을 적용한 경우를 가정해 보겠습니다. 반올림은 숫자 열의 크기를 줄이는 데 매우 효과적일 수 있습니다.
이제 통합 문서의 크기를 줄이기 위해 수행할 수 있는 작업을 완료했으므로 통합 문서 크기 최적화 프로그램도 실행하는 것이 좋습니다. 이 프로그램은 Excel 통합 문서를 분석하여 가능한 경우 추가로 압축합니다. 통합 문서 크기 최적화 관리자를 다운로드합니다.