1

BI 도구 (예 : PowerBI)가 여러 날을 초과하는 날짜 범위를 선택할 수있는 스타 스키마의 데이터를 모델링하는 올바른 방법은 무엇입니까?별도의 날짜 및 시간 차원이있는 별표 스키마에서 일 경계를 넘나들며 데이터 선택

나는 현재 별도의 날짜 및 시간 차원이있는 팩트 테이블을 얻었습니다. 내 시간 해상도는 초로, 날짜 해상도는 하루입니다.

관심 데이터가 같은 날 또는 여러 개의 완전한 날짜 인 경우 집계를 수행하는 것이 현재 매우 쉽지만, 말하자면 12 시간의 롤링 창을 요구할 때 더욱 복잡해집니다. 자정 경계를 넘는다.

예, 해당 날짜 전체에 대한 모든 행을 먼저 추출한 다음 실제 날짜 시간을 사실 테이블의 필드로 저장하여 SQL 문을 작성하여 실제 데이터까지 추가로 필터링 할 수 있습니다 관심있는 시간 범위 BI보고 도구에서 할 수있는 일은 간단하지 않거나 경우에 따라 가능하지 않습니다.

그러나 이것은 데이터웨어 하우스에서 자주 발생하는 시나리오 여야합니다 ... 어떻게해야합니까?

예는 2017/월/02 1600 2017 년/월/03 0400

주문이 fact_orders 테이블에 개별적으로 저장되는 사이에 나에게 fact_orders 테이블에서 주문한 항목의 수를 줄 것이다.

내 실제 시나리오에서는 Azure SQL 데이터베이스를 사용하고 있지만 일반적인 디자인 문제에 가깝습니다.

감사합니다.

답변

1

첫 번째 옵션은 SQL 쿼리에 계산 된 열 (날짜 + 시간)을 포함시킨 다음 BI 도구에서 시간 부분을 필터링하는 것입니다.

그래도 문제가 해결되지 않으면 동일한 효과를 얻기 위해 데이터베이스에보기를 만들 수 있습니다. 가장 쉬운 방법은 BI 도구에서 사용할 전체 fact + dimensions SQL 쿼리를 가져 와서 뷰에 날짜 - 시간 열을 추가하는 것입니다.

인덱스 사용을 허용하려면 날짜 필드 자체를 필터링하십시오. 당신의 슬라이딩 윈도우를위한 그래서 그 때문에 데이터 볼륨을 충분히 수행하지 않는 경우, 매개 변수를 설정하고 별도의 테이블을 유지 할 수 있습니다,

WHERE Date between 2017/Jan/02 AND 2017/Jan/03 AND DateTime between 2017/Jan/02 1600 and 2017/Jan/03 0400

같은 것 또는 따라 (보기를 구체화 DB 및 ETL 옵션)에서 시간 차원의 작은 차원 범위 (지난 주 또는 부분 일 보고서에 관심있는 기간 만)와 함께 시간 차원의 데카르트 조인을 수행 한 다음 사실 테이블을 조인합니다.

DateTimeWindow 테이블/뷰는 DateTime 열에 인덱싱되고 DateKey 및 TimeKey라는 두 개의 추가 열만 있습니다. 내부 키를 두 키를 사용하여 팩트 테이블에 조인하면 BI 도구가 datetime 범위를 제공 할 때 원하는 창을 정확히 가져와야합니다.

1

쉽게 모델링되지 않습니다. 해결책은 날짜 + 시간이있는 추가 차원을 작성하는 것입니다. 물론 이것은 시간 차원의 세밀도를 심각하게 제한해야 함을 의미합니다.

10 년의 시간 단위 : 365 * 10 * 24 = 87600 행

십년 분 단위 : 365 * 10 * 24 * 60 = 5,256,000 행

당신은 바로이 차원, 또는 사용할 수 있습니다 (더 나은) 그것을 추가하고 모든 사용자에게 보여주지 마십시오. 그것은 사실 테이블의 추가 키를 의미합니다 : FT가 거대하지 않은 경우 큰 문제는 아닙니다.