Az SSAS (SQL Server Analysis Services) MOLAP (Multidimensional OLAP) adatkocka elemzésének megértéséhez lépésről lépésre végigvezetlek egy tranzakciós adatbázis (OLTP) átalakításán egy MOLAP-adatkockává.
Miért foglalkozzunk az SSAS-el?
Manapság a Power BI jó alternatívának tűnik a kisebb modellekhez, könnyebben használható és ingyenes.
Előfordulhat azonban, hogy egy napon a Power BI-alapú megoldásnak bővítenie kell, több felhasználót kell kiszolgálnia, több információt kell kezelnie, és növekednie kell a méretben és a komplexitásban. Amikor ez megtörténik, a természetes lépés a teljes táblázatos megoldásra való átállás. A Power BI és a Power Pivot motorja ugyanaz, mint az SSAS Tabular esetében, tehát minél többet tud róla, annál jobb.
Az SSAS-t egy extra metaadatrétegként vagy szemantikai modellként képzeljük el, amely egy relációs adatbázis adattárházának tetején helyezkedik el. Ez az extra réteg információkat tartalmaz arról, hogyan kell összekapcsolni a ténytáblákat és a dimenziótáblákat, hogyan kell a mérőszámokat összesíteni, a felhasználóknak hogyan kell tudniuk felfedezni az adatokat hierarchiákon keresztül, a közös számítások definícióiról stb. Ez a réteg egy vagy több modellt is tartalmaz, amelyek az adattárház üzleti logikáját tartalmazzák.
Két eszközt használunk általában
- SQLServer Management Studio (SSMS) eszközt is, amely a már telepített adatbázisok kezelésére használható adatbázisok lekérdezésének írásához.
- A Visual Studio (VS) SQLServer Data Tools (SSDT) segítségével táblázatos modelleket tervezünk.
Az adatbázisok egy vagy több adattáblázatból állnak. Ismét egy táblázat a táblázatos modellben nagyon hasonlít a relációs adatbázis-világ táblájához. A táblázatos modellben a táblázat általában egy relációs adatbázis egyetlen táblájából vagy egy SQL SELECT utasítás eredményeiből töltődik be.
Táblázatos modelban a táblák fix számú oszlopja van , amely a tervezés időpontjában van meghatározva, és a betöltött adatok mennyiségétől függően változó számú sorral rendelkezhet.
Minden oszlopnak van egy rögzített típusa. Például egyetlen oszlop csak egész számokat, csak szöveget vagy csak decimális értékeket tartalmazhat. Az adatok táblába való betöltését a tábla feldolgozásának nevezzük .
A táblázatos modell lekérdezéseit és számításait a Data Analysis eXpressions (DAX) határozza meg, a táblázatos modellben, a Power Pivotban vagy a Power BI-ban létrehozott modell anyanyelve. A többdimenziós modell belső számításai a Multi Dimensional eXpressions (MDX) nyelven vannak definiálva.
Mi az a BI szemantikai modell (BISM)?
Ez a kifejezés nem utal konkrétan sem a többdimenziós, sem a táblázatos modellre. Ehelyett az Analysis Services funkcióját írja le a Microsoft BI veremben – azt a tényt, hogy szemantikai rétegként működik egy relációs adattárház tetején, és gazdag metaadatréteget ad hozzá, amely hierarchiákat, mértékeket és számításokat tartalmaz.
1. A forrásadatbázis (OLTP) megértése
Egy hagyományos tranzakciós adatbázis jellemzően normalizált struktúrával rendelkezik. Például egy pénzügyi intézmény adatbázisában lehetnek az alábbi táblák:
- Vásárlás (Transaction): tranzakció ID, dátum, ügyfél ID, termék ID, ár, mennyiség
- Ügyfél (Customer): ügyfél ID, név, cím, ország
- Termék (Product): termék ID, név, kategória
- Dátum (Date): dátum ID, nap, hónap, év, hét napja
Ez a modell gyors tranzakciókezelésre optimalizált, de nem hatékony elemzési lekérdezésekhez.
2. Dimenzió-alapú átalakítás (OLAP adatmodell kialakítása)
A normalizált OLTP modellt denormalizált csillagsémává (Star Schema) vagy hópehelysémává (Snowflake Schema) alakítjuk.
A csillagséma a legnépszerűbb, mert jobb teljesítményt nyújt OLAP-elemzéshez.
Tény- és dimenziótáblák kialakítása:
-
Tény tábla (Fact Table)
- Vásárlások összesített adatait tartalmazza.
- Kulcsokat tárol a dimenziókra, valamint az elemzendő mérőszámokat.
- Példa:
Fact_Sales (TransactionID, CustomerKey, ProductKey, DateKey, SalesAmount, Quantity)
.
-
Dimenzió táblák (Dimension Tables)
- Dim_Customer (CustomerKey, Name, Country, Region)
- Dim_Product (ProductKey, ProductName, Category)
- Dim_Date (DateKey, Date, Month, Year, Weekday)
3. SSAS MOLAP adatbázis létrehozása
(1) Analysis Services projekt létrehozása
- SQL Server Data Tools (SSDT) megnyitása
- Új Analysis Services Multidimensional and Data Mining projekt létrehozása
(2) Data Source létrehozása
- Hozz létre egy Data Source-t az SQL Server OLTP adatbázishoz való csatlakozáshoz.
(3) Data Source View (DSV) létrehozása
- A DSV segítségével kiválasztod a tény- és dimenziótáblákat.
- Ha szükséges, nézeteket (Views) vagy számított oszlopokat adhatsz hozzá.
(4) Adatkocka (Cube) létrehozása
- Az SSAS Cube Wizard segítségével hozd létre a kockát.
- Válaszd ki a tény- és dimenziótáblákat.
- SSAS automatikusan felismeri a kapcsolati kulcsokat és dimenziókat.
(5) Dimenziók és hierarchiák beállítása
- Dimenziókat generálsz a dimenziótáblákból.
- Hierarchiákat alakítasz ki pl.
Év → Hónap → Nap
. - Beállíthatod az aggregációkat és attribútumokat.
(6) Feldolgozás és telepítés (Process & Deploy)
- Az adatkocka feldolgozása (Processing) tölti fel a MOLAP tárhelyet.
- Az adatkockát telepíted (Deploy) az SSAS szerverre.
4. MOLAP előnyei és működése
- Teljesítmény: Az adatok előre számított aggregációkban tárolódnak.
- Gyors válaszidő: Az elemzésekhez nem szükséges az SQL Server adatbázishoz kapcsolódni minden kéréskor.
- Aggregációk: SSAS automatikusan kiszámítja a leggyakoribb összegzéseket.
Vezessünk végig egy SSAS MOLAP adatkocka létrehozását egy egyszerű értékesítési (Sales) adatmodellen.
Előkészítés: Alapadatmodell
Az OLTP adatbázisunk a következő táblákból áll:
- Fact_Sales (Tényadatok)
SalesID
(PK)CustomerID
(FK)ProductID
(FK)DateID
(FK)SalesAmount
Quantity
- Dim_Customer (Ügyfél dimenzió)
CustomerID
(PK)CustomerName
Country
- Dim_Product (Termék dimenzió)
ProductID
(PK)ProductName
Category
- Dim_Date (Dátum dimenzió)
DateID
(PK)FullDate
Year
Month
Weekday
Most átalakítjuk ezt egy MOLAP-adatkockává SSAS-ben.
Lépésről lépésre: SSAS MOLAP kocka létrehozása
1. Analysis Services projekt létrehozása
- Nyisd meg a SQL Server Data Tools (SSDT) alkalmazást.
- Hozz létre egy új projektet:
File
→New
→Project
- Válaszd az Analysis Services Multidimensional and Data Mining Project típust.
- Nevezd el:
SalesCubeProject
.
2. Adatforrás (Data Source) létrehozása
- Kattints a Solution Explorerben a Data Sources-ra →
New Data Source
. - Válaszd ki az SQL Server adatbázist, amelyben a fenti táblák találhatók.
- Hozz létre egy Data Source View (DSV)-t, és válaszd ki a Fact_Sales, Dim_Customer, Dim_Product, és Dim_Date táblákat.
3. Adatkocka (Cube) létrehozása
- Kattints a Cubes mappára →
New Cube
. - Válaszd az "Use existing tables" opciót.
- Add hozzá a Fact_Sales táblát mint ténytáblát.
- SSAS felismeri az idegen kulcsokat és automatikusan létrehozza a dimenziókat.
4. Dimenziók beállítása
- Kattints a Dimensions mappára →
New Dimension
. - Válaszd ki a következő táblákat és generáld le a dimenziókat:
Dim_Customer
→ Customer DimensionDim_Product
→ Product DimensionDim_Date
→ Date Dimension
- Hierarchiák beállítása:
Date Dimension
esetén: Year → Month → DayProduct Dimension
esetén: Category → ProductName
- Kattints a
Deploy
gombra, hogy elmentsd a dimenziókat.
5. Adatkocka aggregáció és számítások
- Kattints az "Cube Structure" fülre.
- Add hozzá a következő mérőszámokat (Measures):
SUM(SalesAmount)
SUM(Quantity)
- Kattints az Aggregations fülre, és állíts be előre számított aggregációkat.
6. Adatkocka telepítése és feldolgozása
- Jobb klikk az adatkockára →
Process
. - Az SSAS betölti az adatokat és előállítja az aggregációkat.
- Kattints a
Deploy
gombra, hogy az Analysis Services szerverre mentse az adatkockát.
7. Adatkocka lekérdezése és ellenőrzése
- SSMS-ben (SQL Server Management Studio) csatlakozz az SSAS instance-hoz.
- Futtasd a következő MDX-lekérdezést, hogy ellenőrizd az értékesítési adatok összesítését:
- Ha minden rendben, az aggregált értékeket látni fogod az egyes évek szerint.
8. SSAS MOLAP előnyei
- Gyorsabb lekérdezések a SQL lekérdezésekhez képest.
- Előre kiszámított aggregációk javítják a teljesítményt.
- MDX segítségével komplex lekérdezések hajthatók végre.
1. Particionálás (Partitioning) az SSAS-ban
A particionálás nagy adatkockák teljesítményét javítja azzal, hogy az adatokat kisebb egységekre bontja, amelyeket az SSAS külön kezeli és feldolgoz.
Mikor érdemes particionálni?
- Ha a ténytábla nagy méretű (több millió sor).
- Ha a lekérdezések gyakran csak egy adott időszakra vagy régióra vonatkoznak.
- Ha különböző aggregációkat és frissítési gyakoriságokat szeretnél beállítani az adatok egyes részeire.
Hogyan hozzunk létre partíciókat?
- Nyisd meg az SSAS projektedet SSDT-ben.
- Navigálj a Cube Structure fülre, majd válaszd a "Partitions" opciót.
- Alapértelmezett partíciót duplikáld, majd módosítsd a forrásadat-szűrést.
- Példa: Az adatok év szerint történő partícionálása:
Fact_Sales_2022
→WHERE Year = 2022
Fact_Sales_2023
→WHERE Year = 2023
Fact_Sales_2024
→WHERE Year = 2024
- Példa: Az adatok év szerint történő partícionálása:
- Frissítés beállítása:
- Régi adatok (2022-2023): Ritkábban frissítjük.
- Friss adatok (2024): Gyakrabban frissítjük.
Előnyök:
✅ Csak a releváns partíciókat dolgozza fel az SSAS → Gyorsabb frissítés
✅ Lekérdezések gyorsabban futnak, mert csak a szükséges partíciót éri el
2. Aggregációs stratégiák (Aggregation Design)
Az aggregációk előre kiszámított összesítések, amelyek felgyorsítják a lekérdezéseket.
Mikor van szükség aggregációkra?
- Amikor a lekérdezések ismétlődően ugyanazokat az összegzéseket kérik le.
- Ha a ténytábla nagy méretű, és az aggregációk gyors válaszidőt biztosíthatnak.
Hogyan készítsünk aggregációkat?
- Nyisd meg az SSDT-t, majd válaszd az "Aggregations" opciót az adatkockában.
- Használd az Aggregation Design Wizard-ot.
- Automatikusan javasol aggregációkat az adatbázisodhoz.
- Állíts be kézi aggregációkat – példák:
- Termék szintű aggregáció: Termék kategóriánkénti összesített eladások
- Dátum szintű aggregáció: Havi összesített eladások
- Ország szintű aggregáció: Ügyfelek országonkénti összes eladása
Optimalizálás: Aggregation Usage beállítások
- "Full" (Teljes aggregáció) – Nagyon gyors, de sok tárhelyet használ.
- "Unrestricted" (Nincs korlát) – Automatikusan dönt.
- "Medium" (Közepes aggregációs szint) – Gyors, de kevesebb tárhelyet igényel.
- "Low" (Alacsony aggregációs szint) – Kevesebb aggregáció, kisebb tárhelyigény.
Előnyök:
✅ Drasztikusan csökkenti a lekérdezési időt
✅ Minimalizálja a MOLAP tárhelyigényt
3. MDX elemzés és optimalizálás
Az MDX (Multidimensional Expressions) egy lekérdezőnyelv, amelyet az SSAS használ.
Alapvető MDX lekérdezés
Lekérdezzük az értékesítési adatokat évenként:
Fejlettebb MDX: Dinamikus TOP-N elemzés
A legjobban teljesítő 5 termék kategória:
MDX teljesítményoptimalizálás
-
Használj WHERE helyett slicert – A WHERE lassíthatja a lekérdezést.
- Példa:
LassabbGyorsabb
- Példa:
-
WITH Clause használata az ismétlődő számítások elkerülésére.
✅ Gyorsabb, mert nem számolja újra minden egyes alkalommal
-
NON EMPTY használata a NULL értékek kihagyására
✅ Csökkenti a lekérdezés eredményhalmaz méretét → Gyorsabb válaszidő
Összegzés és következő lépések
✅ Particionálás – Csak a releváns adatokat tölti be, gyorsabb frissítés.
✅ Aggregációk – Előre számított összegzések, drasztikusan csökkentik a lekérdezési időt.
✅ MDX optimalizálás – Hatékonyabb lekérdezések, kisebb számítási költség.
1. Particionálás speciális stratégiái
A hagyományos particionálás során az adatokat manuálisan osztjuk fel időszakok vagy más kritériumok szerint. Most bemutatunk dinamikus és szkriptelt particionálási technikákat, amelyek automatizálják a folyamatot.
1.1 Dinamikus particionálás
Ez a módszer lehetővé teszi, hogy a partíciók automatikusan létrejöjjenek egy előre definiált szabály alapján.
Példa: Particionálás hónap szerint
- SSDT-ben válaszd ki az SSAS adatkockát, majd navigálj a "Partitions" fülre.
- Töröld a meglévő alapértelmezett partíciót, és hozz létre egy új partíciót egy adott hónapra:
- Ismételd meg minden hónapra, vagy használd az alábbi XMLA szkriptet az automatikus generáláshoz.
1.2 XMLA szkript használata a particionálás automatizálására
Az SSAS támogatja az XMLA szkripteket, amelyekkel automatizálhatod a partíciók létrehozását.
Példa: Dinamikus partíció létrehozása XMLA segítségével
Automatizálás: Ezt a szkriptet SQL Server Agent job segítségével minden hónap elején futtathatod.
Előnyök:
✅ Automatikusan jönnek létre az új partíciók
✅ Csak az aktuálisan releváns adatok vannak feldolgozva
2. Haladó MDX funkciók
Most nézzünk meg néhány haladó MDX koncepciót, különösen a KPI-kat és a SCOPE utasításokat.
2.1 KPI (Key Performance Indicators) használata
Az SSAS KPI-k segítségével üzleti mutatókat (pl. bevételi célok, növekedési arányok) definiálhatunk.
Példa: Értékesítési cél teljesülése
- SSDT-ben navigálj a KPI fülre, és hozz létre egy új KPI-t.
- Beállítások:
- Value:
SUM([Measures].[SalesAmount])
- Goal:
1000000
(Célérték) - Status (Jelző ikonhoz):
- Trend (Időbeli változás):
- Value:
Vizualizáció:
A KPI beállítása után az SSAS-ban zöld, sárga, piros ikonok jelzik a teljesítményt.
Előnyök:
✅ Vizuális visszajelzés az üzleti teljesítményről
✅ Automatikusan frissül az új adatokkal
2.2 SCOPE utasítások az MDX-ben
A SCOPE utasítás lehetővé teszi, hogy csak egy adott adatrészre alkalmazzunk számításokat.
Példa: Kedvezmény beállítása csak adott évre
Mit csinál?
✅ Csak a 2024-es évre csökkenti az értékesítési összeget 10%-kal
✅ Más évek adatait változatlanul hagyja
3. SSAS teljesítményhangolás: MOLAP vs ROLAP vs HOLAP
Az SSAS háromféle adattárolási módot támogat:
Tárolási mód | Adatok helye | Teljesítmény | Frissítés gyakorisága |
---|---|---|---|
MOLAP (Multidimensional OLAP) | Az SSAS cache-ben | Nagyon gyors | Kézi frissítés szükséges |
ROLAP (Relational OLAP) | SQL Serverben | Lassúbb, de mindig naprakész | Automatikusan frissül |
HOLAP (Hybrid OLAP) | Kombinált | Közepes sebesség | Részben automatikus |
Mikor melyiket használjuk?
✅ MOLAP – Ha az adatokat ritkán kell frissíteni, de gyors válaszidő szükséges.
✅ ROLAP – Ha folyamatosan frissülő valós idejű adatok kellenek.
✅ HOLAP – Ha nagy adatmennyiséget kell kezelni, de a frissítés is fontos.
Hogyan állítsuk be a tárolási módot?
- SSDT-ben válaszd ki az adott partíciót.
- Storage mód beállítása:
- MOLAP → Gyors, de kézi frissítés szükséges.
- ROLAP → SQL-ből olvassa ki az adatokat, lassabb, de mindig naprakész.
- HOLAP → Csak aggregációkat tárol a cache-ben, kompromisszumos megoldás.
- Optimalizálás:
- Ha gyors válaszidő kell → MOLAP
- Ha valós idejű adatok kellenek → ROLAP
- Ha mindkettő fontos → HOLAP
Összegzés és következő lépések
✅ Automatizált particionálás → XMLA segítségével az új hónapok automatikusan bekerülnek
✅ Haladó MDX funkciók → KPI-k és SCOPE utasítások a rugalmasabb elemzésekhez
✅ SSAS tárolási módok összehasonlítása → MOLAP a gyors válaszidőhöz, ROLAP a valós idejű adatokhoz
1. Haladó MDX számítások
Az MDX lehetőséget biztosít komplex számítások elvégzésére, mint például mozgóátlag vagy Year-Over-Year növekedés kiszámítása.
1.1 Mozgóátlag (Moving Average)
A mozgóátlag segít kisimítani az ingadozásokat és trendeket az időszakok között.
Példa: 3 hónapos mozgóátlag
🔹 Mit csinál?
- Mindig az aktuális hónapot és az előző két hónapot veszi figyelembe
- Segít az időbeli trendek kiegyenlítésében
1.2 Year-Over-Year (YOY) növekedés kiszámítása
A Year-Over-Year növekedés azt mutatja meg, hogy az értékesítés hogyan változott az előző év azonos időszakához képest.
Példa: Éves növekedés kiszámítása
🔹 Mit csinál?
- Az előző évi értékesítési adatokkal hasonlítja össze az aktuális évet
- Százalékos formátumban jeleníti meg a növekedést vagy csökkenést
2. SSAS teljesítményhangolás
A teljesítmény optimalizálásához három fő technikát érdemes alkalmazni:
2.1 Indexelés és aggregációk optimalizálása
SSAS az aggregációk előfeldolgozásával gyorsíthatja a lekérdezéseket.
🔹 Hogyan állítsunk be aggregációkat?
- SSDT-ben válaszd ki az adatkockát, majd menj az "Aggregations" fülre.
- Futtasd az Aggregation Designert, és válaszd a "Usage-Based Optimization"-t.
- Határozd meg, mely mértékek és dimenziók kombinációit használják leggyakrabban.
2.2 Cache tuning és lekérdezési optimalizálás
SSAS cache mechanizmusa lehetővé teszi az MDX lekérdezések gyorsítását.
🔹 Cache optimalizálása MDX-ben
Ez biztosítja, hogy az adatok hosszabb ideig maradjanak a cache-ben.
2.3 Query Log elemzés
A query log elemzés segít az azonosításban, hogy mely lekérdezések lassúak, és melyik aggregációkat érdemes létrehozni.
🔹 Hogyan kapcsoljuk be a Query Logging-ot?
- SSMS-ben futtasd az alábbi parancsot az SSAS szerveren:
- Ellenőrizd a log fájlokat, és nézd meg, melyik MDX lekérdezések futnak a leglassabban.
3. Adatkocka biztonság (Security)
Az SSAS támogatja a Cell Level Security-t és a Dynamic Row-Level Security-t, amelyek lehetővé teszik a hozzáférések korlátozását.
3.1 Cell Level Security
🔹 Hogyan korlátozhatjuk, hogy egy adott felhasználó milyen cellákat láthat?
Példa: Csak az értékesítési vezetők láthassák a prémium ügyfelek adatait
🔹 Mit csinál?
✅ Ha a bejelentkezett felhasználó értékesítési vezető, akkor láthatja az adatokat
✅ Minden más felhasználó számára az adatok NULL értéket kapnak
3.2 Dynamic Row-Level Security
🔹 Hogyan biztosíthatjuk, hogy egy felhasználó csak a saját régiójának adatait lássa?
- Hozz létre egy Role-t SSAS-ben, majd állítsd be a DAX kifejezést:
- Adj jogosultságokat a megfelelő felhasználóknak.
🔹 Mit csinál?
✅ Minden felhasználó csak a saját régiójához tartozó adatokat látja
✅ Nincs szükség külön Role-ok manuális létrehozására minden egyes felhasználóra
Összegzés és következő lépések
✅ Haladó MDX számítások – Mozgóátlag, YOY növekedés
✅ SSAS teljesítményhangolás – Aggregációk, cache tuning, query log elemzés
✅ Adatkocka biztonság – Cell Level Security, Dynamic Row-Level Security
Linkek:
https://www.sqlshack.com/build-cube-scratch-using-sql-server-analysis-services-ssas/
Megjegyzések
Megjegyzés küldése