0

큐브를 만드는 데 사용할 SQL Server 2012의 데이터웨어 하우스 DB를 디자인하고 있습니다. 원래 관계형 DB에 3 개의 테이블이 있다고 가정합니다.SSAS의 관계형 데이터베이스에서 팩트 테이블을 디자인하는 가장 좋은 방법은 무엇입니까

Supplier (SupplierId, SupplierName .....) 
Invoice (InvoiceId, SupplierId, InvoiceCode, InvoiceName, InvoiceTotal ...) 
InvoiceLineItem (InvoiceLineItemId, Description, InvoiceId, Rate, Count, Total) 

웨어 하우스 데이터베이스로 변환하고 싶습니다. 그래서 3 차원과 2 개의 팩트 테이블을 만들었습니다.

DimSupplier (SupplierId, SupplierName .....) 
DimInvoice (InvoiceId, InvoiceCode, InvoiceName ....) 
FactInvoice (InviceId, SupplierId, InvoiceTotal) 
DimInvoiceLineItem (InvoiceLineItemId, Description) 
FactInvoiceLineItem (InvoiceLineItemId, InvoiceId, SupplierId, Rate, Count, Total) 

제 문제는 외래 키를 사용하는 것이 가장 좋은 방법인지 잘 모르겠습니다. 그래서 다음 사실이 DimInvoice 또는 DimInvoiceLineItem보고에서이 정보를 알아낼 수, 각각 DimInvoiceDimInvoiceLineItemFactInvoiceFactInvoiceLineItem에서 공급 업체 ID 키를 이동해야합니다. 가장 좋은 방법은 무엇입니까? 가능한 한 평평하게 유지하는 것이 가장 좋습니다. 데이터 분석을 처음 접했을 때 어떤 도움이 필요합니까?

+0

어떤 이벤트 또는 프로세스를 분석하고 싶습니까? –

답변

1

나는 FactInvoice 테이블이 전혀 필요 없다고 생각합니다. 제공하는 유일한 것은 InvoiceTotal이며, 이는 FactInvoiceLineItem.Total의 합계 여야합니다. 이 테이블을 생략하면 단순한 팩트 테이블과 세 개의 차원만으로도 구조가 간단 해집니다.

제쳐두고 : 날짜 측정 기준이 표시되지 않습니다. 이것을 현재 위치와 분리 된 차원으로 추출하는 것은 아마도 의미가 있습니다. 아마도 DimInvoice입니다. 사용자 요구에 따라 "요일", "주 숫자를 연도"등 "달", "분기", "연도"와 같은 "날짜 그룹 필드"를 추가하는 것이 좋습니다.

+0

필자는 Date Dimension을 보유하고 있고 FactInvoice는 더 많은 측정 값을 가지고 있습니다. 여기서 보여주는 것은 제 큐브의 작은 하위 집합입니다. 나는 차원과 사실, 특히 참조 된 차원을 설정하는 최상의 방법을 아는 데 관심이 있습니다. 그것을 중첩하거나 사실 테이블에서 직접 참조하는 것이 더 나은가? – fenix2222

+1

@ fenix2222 필자는 모델을 단순하게 유지하기 위해 참조 된 치수를 피하는 경향이 있습니다. 그러나 다른 측면도 있습니다. 대부분의 클라이언트 도구는 차원별로 그룹화 된 계층 구조를 표시합니다. 사용자는 속성/계층 구조를 어디에서 찾을 수 있습니까? 성능상의 이점은 있지만 (쿼리 런타임은 증가합니다.) 참조 된 차원 만 변경된 경우 사실 데이터를 다시 처리 할 필요가 없습니다. 그러나 실제로,이 특정 상황 (참조 된 차원 변경, 그러나 나머지 데이터는 변경되지 않음)이 매우 자주 발생할 것으로 기대하지는 않습니다. – FrankPl

관련 문제