2010-03-24 25 views
11

Tôi đang xây dựng một kho dữ liệu. Mỗi thực tế có dấu thời gian của nó. Tôi cần phải tạo báo cáo theo ngày, tháng, quater nhưng theo giờ quá. Loking tại các ví dụ tôi thấy rằng ngày có xu hướng được lưu trong tabels kích thước. alt starexample http://etl-tools.info/images/dw_star_schema.jpgKích thước ngày và giờ trong kho dữ liệu

Nhưng tôi nghĩ, điều đó không có ý nghĩa về thời gian. Bảng kích thước sẽ phát triển và phát triển. Mặt khác, JOIN với bảng kích thước ngày hiệu quả hơn việc sử dụng các hàm ngày/giờ trong SQL.

Ý kiến ​​/ giải pháp của bạn là gì?

(Tôi đang sử dụng Infobright)

+1

Báo cáo hàng giờ có vẻ là loại có độ phân giải cao đối với kho dữ liệu. Thực sự là cần thiết/thích hợp? –

Trả lời

6

Tôi đoán là tùy thuộc vào yêu cầu báo cáo của bạn. Nếu bạn cần cần một cái gì đó giống như

WHERE "Hour" = 10 

có nghĩa là mỗi ngày 10:00:00-10:59:59, sau đó tôi sẽ sử dụng tham số thời gian, bởi vì nó là nhanh hơn so với

WHERE date_part('hour', TimeStamp) = 10 

bởi vì hàm date_part() sẽ được đánh giá cho mỗi hàng. Bạn vẫn nên giữ dấu thời gian trong bảng thực tế để tổng hợp trên ranh giới của ngày, như trong:

WHERE TimeStamp between '2010-03-22 23:30' and '2010-03-23 11:15' 

mà được lúng túng khi sử dụng các lĩnh vực không gian.

Thông thường, thứ nguyên thời gian có độ phân giải phút, do đó, 1440 hàng.

+0

Để rõ ràng, bạn đang đề xuất hai thứ nguyên riêng biệt, một trong những ngày (365 * 10 = 3.650 bản ghi) và một trong số phút (1.440 bản ghi)? Tôi muốn hiểu được lợi thế của việc tách nó ra; một thứ nguyên 'Ngày giờ 'sẽ lớn hơn (365 * 10 * 24 = 87.600 bản ghi với hạt giờ) nhưng vẫn không lớn và sẽ làm cho phép tính múi giờ dễ dàng hơn nhiều. –

+0

@JonofAllTrades bằng cách chia nhỏ mỗi chiều có PK hợp lý. Một số sự kiện sẽ có tại mức độ chi tiết của ngày (nghĩa là không có dấu thời gian) và một số sẽ có độ chi tiết thời gian. Việc tham gia bảng thực tế tại mức độ chi tiết theo ngày cho thứ nguyên tại thời gian chi tiết sẽ gây ra các bản sao mà sau đó bạn cần phải ném thêm tài nguyên để xóa. – jackohug

+0

@jackohug: Chắc chắn, đó là lý do tại sao tôi luôn có bảng 'Ngày 'và bảng' Lần'. Nhưng khi bạn * làm * có giá trị thời gian ngày, tại sao lại sử dụng hai khóa và ghép đôi thay vì một FK bốn byte đơn thành bảng 'DateTimes'? Nó làm việc tốt cho tôi, nhưng một số người có vẻ dị ứng với nó, vì không có lý do giải thích rõ ràng. –

3

Thời gian phải là thứ nguyên trên kho dữ liệu, vì bạn thường xuyên muốn tổng hợp về kho dữ liệu. Bạn có thể sử dụng snowflake-Schema để giảm chi phí. Nói chung, như tôi đã chỉ ra trong bình luận của tôi, giờ có vẻ như một độ phân giải cao bất thường. Nếu bạn nhấn mạnh vào họ, làm cho giờ trong ngày một chiều hướng riêng biệt có thể giúp đỡ, nhưng tôi không thể nói với bạn nếu đây là thiết kế tốt.

+1

Nếu ngày là một chiều trong 10 năm, nó chỉ có khoảng 3650 hồ sơ. Báo cáo từng giờ rất hữu ích ở đây - chúng ta cần phải so sánh các ngày: thứ hai đến thứ hai, thứ ba đến thứ ba và giờ thứ hai 11: 00-12: 00 đến thứ ba 11: 00-12: 00. Bạn có nghĩ rằng bông tuyết hữu ích hơn/hiệu quả hơn sao? –

+0

Bông tuyết có thể giúp giảm sự dư thừa trong các bảng kích thước, nhưng nếu điều đó giúp bạn thực hiện hoặc trí nhớ trong trường hợp cụ thể của bạn, tôi không thể nói. –

+0

Kích thước ngày với 10 năm và giờ vẫn còn nhỏ: 87.660 hàng. Hơn nữa, bạn có thể tóm tắt dữ liệu cũ để giảm độ phân giải thời gian. Sau 10 năm, mức độ liên quan có thể 10AM vào thứ Năm thực sự có? –

26

Kimball khuyến cáo có riêng thời gian và ngày kích thước:

design-tip-51-latest-thinking-on-time-dimension-tables

Trong sách Toolkit trước, chúng tôi có đề nghị xây dựng như một chiều hướng với phút hoặc giây phần thời gian như một bù đắp từ nửa đêm mỗi ngày, nhưng chúng tôi đã nhận ra rằng người dùng cuối kết quả ứng dụng trở nên quá khó khăn, đặc biệt là wh vi cố tính thời gian nhịp. Ngoài ra, không giống như ngày theo lịch , có rất ít thuộc tính mô tả cho phút hoặc giây cụ thể trong một ngày . Nếu doanh nghiệp có tốt thuộc tính được xác định cho lát thời gian trong vòng một ngày, chẳng hạn như tên thay đổi hoặc thời điểm quảng cáo, thêm thứ nguyên thời gian trong ngày có thể được thêm vào thiết kế có kích thước này là số phút (hoặc thậm chí giây) qua nửa đêm. Do đó, kích thước thời gian trong ngày này sẽ có 1440 bản ghi nếu hạt là phút hoặc 86,400 bản ghi nếu hạt là giây.

+3

+1 để trích dẫn người nào đó thông minh. –

+0

Đồng ý, đây là một giải pháp tốt. –

+2

Liên kết đến trang web của Kimball giờ đã chết. Đây là một [link] hợp lệ mới (http://www.kimballgroup.com/html/designtipsPDF/DesignTips2004/KimballDT51LatestThinking.pdf). – user327961

3

Tôi khuyên bạn nên có thứ nguyên riêng biệt cho ngày và giờ. Thứ nguyên ngày sẽ có 1 bản ghi cho mỗi ngày là một phần của phạm vi ngày hợp lệ được xác định. Ví dụ: 01/01/1980 đến 12/31/2025.

Và kích thước riêng biệt cho thời gian có 86400 bản ghi với mỗi giây có bản ghi được xác định bằng khóa thời gian.

Trong bản ghi thực tế, nơi bạn cần ngày và giờ, hãy thêm cả hai khóa có tham chiếu đến các thứ nguyên được tuân thủ này.

Các vấn đề liên quan