에서 약점이있는 간단한 테이블 형식의 모델이 있습니다. 20mio. 레코드 (판매 트랜잭션) 및 약 600.000 개의 레코드 (고객)가있는 차원 테이블이 있습니다.Excel에서 상위 N을 효율적으로 표시하는 방법 SSAS 테이블 형식 모델
일반적인보고 시나리오는 팩트 테이블에서 상위 10 위 고객을 얻는 것입니다. 다른 기준 (일반적으로 기간, 제품 등)에 의해 필터링 될 수 있습니다.
Excel의 경우 20mio의 모든 데이터를 집계합니다. 총 판매 금액을 반환하는 기록은 즉시입니다. 그러나 일단 고객별로 그룹화를 시도하면 모든 데이터를 검색하는 데 약간의 시간 (15-20 초)이 소요됩니다. 이는 상당히 많은 고객 (600.000)이 표시되어야하므로 의미가 있습니다.
이제 Excel에서 값 필터를 적용하여 상위 10 위 고객 만 얻으면 결과를 반환하는 데 약 15-20 초가 걸리지 만 내 사용자에게는 받아 들일 수 없습니다 (즉각적으로보고 싶어하는 사용자). 제품, 시간 등의 다른 속성을 슬라이싱하는 동안 상위 10 위 고객).
내부적으로 Excel은 값 필터를 사용하여 테이블 형식의 모델을 쿼리 할 때 TOPCOUNT
MDX 함수를 사용합니다.
이러한 종류의 쿼리 속도를 높이려면 표 형식 모델에서 수행 할 수있는 작업이 있습니까?
이 나는 시도했다 :
- 는 차원 테이블에 계산 된 열을 만들기 각 고객의 총 판매 금액을 포함. 성능이 더 좋지만,이 열의 값은 사실의 다른 속성으로 분리 할 수 없기 때문에 이동하는 방법이 아니며, 열에 분명히 많은 별개의 값 (테이블 형식의 나쁜 값)이 포함되어 끝납니다.
- DAX
RANKX
함수를 제안 된대로 사용하여 팩트 테이블에서 계산 된 계수 만들기 here. 이로 인해 테이블 인스턴스가 손상되었습니다 (차원 테이블에 너무 많은 레코드가 있음) - DAX
TOPN
함수를 사용하여 테이블 형식 모델에서 간단한 DAX 문을 직접 실행합니다. 이것은TOPCOUNT
MDX 방식보다 3-4 배 더 느립니다.
나는 해결책이 확실하지 않지만 곧 PowerPivot을 사용하여 게임을 시작할 계획입니다. xl 32 비트 또는 64 비트를 사용하고 있습니까? 이 데이터를 처리하기 위해 어떤 램을 사용하고 있습니까? – whytheq
우리는 PowerPivot을 사용하지 않습니다. 우리는 SQL Server Analysis Services를 테이블 형식 모드로 사용하고 있습니다 (기본적으로는 동일하지만 서버 환경에 배포됩니다). 문제의 서버는 32GB의 RAM을 가지고 있는데,이 모델은이 모델에 충분합니다.이 메모리는 처리 된 후 약 1GB의 메모리 만 차지합니다. – Dan
TopCustomers라는 옵션이 별도의 차원으로 생성됩니까? ETL에서 계산 된 열로 상위 X 고객을 미리 계산 한 다음이 값을 Excel/MDX 쿼리에서 ROWS로 사용하고 열에서 측정 값으로 사용합니까? 위에 언급 한 것처럼 좋은 성능을 얻을 수 없다면 하드웨어를 가지고 TopCustomers와 차원을 만들어가는 것이 최선의 방법 일 것입니다 ... – Mez