2017-10-31 15 views
0

컨텍스트 : directquery 모드에서 MAX (날짜)를 효율적으로 처리하는 방법은 무엇입니까?

  • 극적 장면 및 SQL RDBMS와 SSAS 테이블 형식 (SQL 서버 2016)의 데이터
  • 비정규 테이블에 대해 프렘에 전원 BI 보고서 서버. 현재 약 100m 기록.

과제 :

애널리스트는 MAX이 directquery 모드에서 DAX 가능하지 않는 것

(datecol)가 필요 계산을한다, 그래서 ETL이 다시 밀려 추가 한 MaxDate 열.

이제 큰 테이블이되어 하루가 갈수록 커졌습니다. DTA는 열 스토어 색인을 제안했으며 이는 나에게 의미가 있습니다. 그러나 인덱스 추천은 SELECT 쿼리를 기반으로했습니다. 또한 삽입 및 삭제 (매일 배치)을해야합니다, 그리고 그들은 다음에해야 할 것 :

UPDATE table SET MaxDate = MAX(Datecol) 

내 직감이가 columnstore 인덱스와 좋은 재생되지 않습니다하지만 테스트하지 않아도된다는 것입니다 그것. 아마도 클러스터 된 또는 클러스터되지 않은 경우에 따라 달라질 수 있습니까?

MaxDate는 ETL에서 처리해야한다고 말하면 맞습니까? DirectQuery 모드에서 DAX를 수행하면 오류가 발생합니다.

컬럼 스토어 색인으로주의를 기울여야한다는 점을 고치겠습니다. 아니면 인덱스 재구성이 필요하기 때문에 아마 전혀 이해가되지 않을까요?

나는 감각을 발휘하고 문제를 피할 수있는 길을 찾고 있습니다.

+0

최근에 한 남자가 칼럼 스토어 색인에 대한 이야기를 나눈 회의에 참석하여 트윗을 시도하고 질문을 보도록 요청할 수 있습니다. https://twitter.com/SQLStijn – Tanner

+0

Tableau에서 최대 값을 처리하지 않는 이유는 무엇입니까? – scsimon

+0

일일 배치의 크기는 얼마입니까? –

답변

0

MAXA() 기능을 사용하여 측정 값을 정의하십시오. DirectQuery 모드에서 Tabular 2016을 사용하여이 작업을 수행 할 수 있습니다.

Max Date:=MAXA(table[datecol]) 

SQL 서버에 발행 된 쿼리는 다음과 같다 : 당신이 열에로 값이 필요한 경우, 다음이에서 (직접 쿼리 모드에서 MAXA()를 사용하는 것은 불가능합니다

SELECT MAX([t0].[DateCol]) AS [a0] FROM ((SELECT * FROM table)) AS [t0] 

순간) 그래서 직접 테이블 참조 대신 소스로 쿼리를 사용하도록 테이블을 수정하는 것이 좋습니다.

SELECT table.*, 
     max_date= (SELECT MAX(datecol) FROM dbo.table) 
    FROM dbo.table 
원하는 경우는 다음 계산 열을 만들 수 있습니다

: 엔진이 쿼리를 구성 할 때마다

days_offset = DATEDIFF(table[datecol], table[max_date], DAY) 

이 *가 하위 쿼리에서 사용되는대로 세미콜론으로 문을 종료 할 수 없습니다 귀하의 데이터베이스에.

MAX(datecol)을 가져 오는 하위 쿼리는 테이블에 열 저장소 인덱스가 있거나 열에 클러스터되지 않은 행 저장소 인덱스가있는 경우 매우 효율적이어야합니다. 매일 새로운 최대 날짜로 테이블의 모든 행을 업데이트하는 것보다 훨씬 효율적입니다.

+0

흥미 롭습니다. 그러나 나는 여전히 척도를 정의하는 것이 나를 돕는 지 아직 확실하지 않다. MaxDate는 첫 단계입니다. 그런 다음 DaysOffset (DateCol - MaxDate)이 있고 사용자가 PowerBI에서 DaysOffset을 필터링하려고합니다. MAXA()로 계산 된 열을 만들 수 있다는 말씀입니까? –

+0

업데이트 된 답변을 참조하십시오. – mendosi