sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Designing and Implementing Time Dimensions

Antonios Chatzipavlis
Wednesday 28 March 2012

Είναι σπάνιο το φαινόμενο σε μια λύση BI και σε ένα DW να μην ζητείται ανάλυση και reporting των δεδομένων με βάση κάποια χρονική περίοδο.Το σύνηθες είναι να έχω τουλάχιστον μία διάσταση χρόνου. Για το λόγο αυτό σε αυτό το post θα δούμε πως μπορούμε να σχεδιάσουμε και υλοποιήσουμε σε μια BI λύση μια τέτοια διάσταση.Για αρχή θα ξεκινήσουμε να δούμε την λογική με την οποία θα σχεδιάσουμε ένα time dimension.

Σχεδιάζοντας ένα Time Dimension

Το πρώτο πράγμα που πρέπει να λάβουμε υπόψη είναι το επίπεδο λεπτομέρειας (level of granularity) το οποίο θέλουμε να έχουμε στην διάσταση μας. Αυτό μπορεί να ξεκινάει από millisecond μέχρι αιώνες. Όσο μικρότερο είναι το επίπεδο που θα επιλέξουμε τόσες περισσότερες θα είναι και οι γραμμές (records) που θα υπάρχουν μέσα στον πίνακα που έχουμε σαν τελικό αποτέλεσμα. Στις περισσότερες περιπτώσεις το επίπεδο αυτό μπορεί να είναι η ημέρα, αλλά αν έχω κάποια γραμμή παραγωγής ή real-time analysis τότε είναι αρκετά πιθανόν να ξεκινάω από millisecond.Επειδή όμως τα ερωτήματα που θα γίνονται δεν θα αφορούν μόνο το τελευταίο επίπεδο αλλά σίγουρα θα ζητάνε και ποιο συγκεντρωτικά στοιχεία όπως για παράδειγμα σε επίπεδο μήνα, τριμήνου, έτους κλπ θα πρέπει να έχω φροντίσει μέσα στην δομή μου να υποστηρίζονται αυτά. Αυτό εύκολα γίνεται αρκεί μέσα στη διάσταση μου να συμπεριλάβω attributes(πεδία) τα οποία να μου ορίζουν τα παραπάνω. Με αυτό μου δίνεται η δυνατότητα να φτιάξω μια temporal ιεραρχία μέσα από την οποία θα μπορεί ο χρήστης να κάνει drilling στα αποτελέσματα μέσω αυτής.Χρήσιμο είναι επίσης όταν σχεδιάζω μια τέτοια διάσταση να λάβω υπόψη μου περιπτώσεις που είναι καθαρά επιχειρηματικές όπως για παράδειγμα μπορεί η οικονομική χρήση της εταιρίας να είναι διαφορετική από την γνωστή αμιγώς ετήσια χρήση (Ιανουάριος – Δεκέμβριος) δηλαδή να είναι από Ιούλιο – Ιούνιο ή Ιούνιο – Μάιο. Ακόμα μπορεί η εταιρία να είναι μια εταιρία εξωτερικού που έχει παράρτημα στην Ελλάδα το οποίο πρέπει να συμμορφωθεί με τις επίσημες αργίες της χώρας που η μαμά εταιρία ανήκει. Για να γίνουν όλα αυτά πράξη πάλι με την προσθήκη των κατάλληλων attributes μπορώ να τα ορίσω.

Υλοποίηση ενός Time Dimension

Για να υλοποιήσω τώρα μια τέτοια διάσταση θα πρέπει να δράσω με διαφορετικό τρόπο σε σχέση με τις άλλες διαστάσεις τις οποίες συνήθως γεμίζω με στοιχεία που διαβάζω από τα data sources.Ανάλογα με το level of grain που έχω επιλέξει (έστω είναι ημέρα) μια συνηθισμένη δομή του πίνακα που υλοποιεί την διάσταση του χρόνου μπορεί να είναι η εξής:

SQL Script

CREATE TABLE [dbo].[DimDate] 
( [DateKey] [int] NOT NULL PRIMARY KEY CLUSTERED
, [FullDateAlternateKey] [date] NOT NULL
, [DayNumberOfWeek] [tinyint] NOT NULL
, [EnglishDayNameOfWeek] [nvarchar](10) NOT NULL
, [GreekDayNameOfWeek] [nvarchar](10) NOT NULL
, [FrenchDayNameOfWeek] [nvarchar](10) NOT NULL
, [DayNumberOfMonth] [tinyint] NOT NULL
, [DayNumberOfYear] [smallint] NOT NULL
, [WeekNumberOfYear] [tinyint] NOT NULL
, [EnglishMonthName] [nvarchar](10) NOT NULL
, [GreekMonthName] [nvarchar](10) NOT NULL
, [FrenchMonthName] [nvarchar](10) NOT NULL
, [MonthNumberOfYear] [tinyint] NOT NULL
, [CalendarQuarter] [tinyint] NOT NULL
, [CalendarYear] [smallint] NOT NULL
, [CalendarSemester] [tinyint] NOT NULL
, [FiscalQuarter] [tinyint] NOT NULL
, [FiscalYear] [smallint] NOT NULL
, [FiscalSemester] [tinyint] NOT NULL 
) 

Σε αυτό το σημείο θα πρέπει να εξηγηθούν κάποια πράγματα σε σχέση με το παραπάνω script καθώς ίσως σε αρκετούς να τους έχουν δημιουργηθεί απορίες.Η πρώτη ίσως να είναι για το πεδίο DateKey που είναι τύπου integer και είναι και το Primary key του πίνακα. Οι τιμές που μπαίνουν σε αυτό δεν είναι κάποια απλή αρίθμηση. Είναι της μορφής ΥΥΥΥΜΜDD δηλαδή 20120101 για την 01/01/2012, 20120102 για την 02/01/2012 κ.ο.κ.Επίσης μπορεί  να υπάρχουν απορίες για τα λεκτικά που αφορούν της ημέρες ή τους μήνες και τα οποία είναι σε διαφορετικές γλώσσες. Αυτό γίνεται διότι θέλω να έχω αφενός την δυνατότητα να γνωρίζω άμεσα αν είναι Δευτέρα ή Τρίτη, Ιανουάριος ή Φεβρουάριος χωρίς να κάνω κάθε φορά που χρειάζομαι κάτι τέτοιο χρήση κάποιας function, αφετέρου θέλω να μπορώ να καλύψω ανάγκες πολυγλωσσικότητας.Τέλος θα ήθελα να σας επισημάνω τα τελευταία πεδία του πίνακα τα οποία στην ουσία έχουν μπει για να καλύψουν ανάγκες όπως αυτές που έχω ήδη αναφέρει παραπάνω στον σχεδιασμό της διάστασης.

Γεμίζοντας τον πίνακα με εγγραφές

Αφού έχω καταλήξει στο σχήμα του πίνακα μου το επόμενο βήμα είναι να το γεμίσω με εγγραφές. Αυτό μπορεί να γίνει με αρκετούς τρόπους.Ένας τρόπος είναι να φτιάξω ένα T-SQL Script στο οποίο να χρησιμοποιώ τις date & time functions του SQL Server όπως τις DATEPART, DATENAME, MONTH, YEAR, DAY και με το οποίο (script) να δημιουργώ τις εγγραφές που χρειάζομαι για το επιθυμητό χρονικό διάστημα.Άλλος τρόπος είναι να χρησιμοποιήσω το Excel όπου με τις function & formulas που αυτό έχει να δημιουργήσω τις αντίστοιχες γραμμές σε αυτό και αφού ολοκληρώσω και το αποθηκεύσω να το κάνω import στην βάση μου και συγκεκριμένα στο πίνακα μου.Τέλος υπάρχει και η λύση που μου δίνεται μέσα από τα ΒΙ tools του SQL Server και συγκεκριμένα τα Microsoft SQL Server Data Tools (SSDT) ή Business Intelligence Development Studio (BIDS) όπως μέχρι πριν λίγο καιρό ονομάζονταν.


Στο παρακάτω video δείχνω τον τρόπο με τον οποίο μπορείτε να φτιάξετε ένα Time Dimension με την χρήση των SSDT.

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn

sqlschool.gr © 2010-2025 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.