Ugrás a fő tartalomra

MS SSAS alapok és összefüggések, minták


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 egy online analitikai adatmotor – egy olyan szolgáltatástípus, amely nagymértékben optimalizált az üzleti intelligencia környezetben szokásos lekérdezésekre és számításokra. Ugyanazokat a dolgokat csinálja, mint egy relációs adatbázis, de sok tekintetben különbözik. 

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.

Az SSAS egy másik megközelítése egyfajta gyorsítótár, amelyet a jelentéskészítés felgyorsítására használhat. A legtöbb forgatókönyv, amelyben az SSAS-t használják, az adattárházban lévő adatok másolatával töltődik be. Ezt követően minden jelentéskészítő és elemző lekérdezés az SSAS-on fut a relációs adatbázis folyamatos lekérdezése helyett.

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 .

Lehetőség van a táblák közötti kapcsolatok meghatározására is a tervezés időpontjában. Az SQL-től eltérően nem lehet kapcsolatokat definiálni lekérdezéskor; minden lekérdezésnek ezeket a már meglévő kapcsolatokat kell használnia.

A táblák közötti kapcsolatok azonban megjelölhetők aktívként vagy inaktívként, és lekérdezéskor kiválasztható, hogy a táblák között melyik kapcsolatokat használják ténylegesen. Lehetőség van a lekérdezéseken és számításokon belül nem létező kapcsolatok hatásának szimulálására is. Az összes kapcsolat egy az egyhez vagy egy a sokhoz, és csak egy oszlopot kell tartalmaznia a két táblázatból. Egy kapcsolat egy vagy mindkét irányba terjesztheti a szűrőt. 

Nem lehet kapcsolatokat tervezni egynél több oszlop alapján egy táblázatból, vagy olyan rekurzív kapcsolatokat, amelyek egy táblát önmagához kapcsolnak.

A táblázatos modell tisztán memória alapú motort használ, és adatainak csak egy másolatát tárolja a lemezen, így a szolgáltatás újraindításakor nem vesznek el adatok. Míg a többdimenziós modell a legtöbb relációs adatbázis motorhoz hasonlóan soralapú formátumban tárolja adatait, a táblázatos modell egy oszloporientált adatbázist használ, amelyet memóriaelemző motornak neveznek. A legtöbb esetben ez jelentős javulást jelent a lekérdezés teljesítményében.

Az Analysis Services 2012 nyilvános kiadása előtt a memóriában tárolt elemzőmotor VertiPaq motorként volt ismert. 

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

  1. SQL Server Data Tools (SSDT) megnyitása
  2. Új Analysis Services Multidimensional and Data Mining projekt létrehozása

(2) Data Source létrehozása

  1. Hozz létre egy Data Source-t az SQL Server OLTP adatbázishoz való csatlakozáshoz.

(3) Data Source View (DSV) létrehozása

  1. A DSV segítségével kiválasztod a tény- és dimenziótáblákat.
  2. Ha szükséges, nézeteket (Views) vagy számított oszlopokat adhatsz hozzá.

(4) Adatkocka (Cube) létrehozása

  1. Az SSAS Cube Wizard segítségével hozd létre a kockát.
  2. Válaszd ki a tény- és dimenziótáblákat.
  3. SSAS automatikusan felismeri a kapcsolati kulcsokat és dimenziókat.

(5) Dimenziók és hierarchiák beállítása

  1. Dimenziókat generálsz a dimenziótáblákból.
  2. Hierarchiákat alakítasz ki pl. Év → Hónap → Nap.
  3. Beállíthatod az aggregációkat és attribútumokat.

(6) Feldolgozás és telepítés (Process & Deploy)

  1. Az adatkocka feldolgozása (Processing) tölti fel a MOLAP tárhelyet.
  2. 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:

  1. Fact_Sales (Tényadatok)
    • SalesID (PK)
    • CustomerID (FK)
    • ProductID (FK)
    • DateID (FK)
    • SalesAmount
    • Quantity
  2. Dim_Customer (Ügyfél dimenzió)
    • CustomerID (PK)
    • CustomerName
    • Country
  3. Dim_Product (Termék dimenzió)
    • ProductID (PK)
    • ProductName
    • Category
  4. 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

  1. Nyisd meg a SQL Server Data Tools (SSDT) alkalmazást.
  2. Hozz létre egy új projektet:
    • FileNewProject
    • Válaszd az Analysis Services Multidimensional and Data Mining Project típust.
    • Nevezd el: SalesCubeProject.

2. Adatforrás (Data Source) létrehozása

  1. Kattints a Solution Explorerben a Data Sources-ra → New Data Source.
  2. Válaszd ki az SQL Server adatbázist, amelyben a fenti táblák találhatók.
  3. 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

  1. Kattints a Cubes mappáraNew Cube.
  2. Válaszd az "Use existing tables" opciót.
  3. Add hozzá a Fact_Sales táblát mint ténytáblát.
  4. SSAS felismeri az idegen kulcsokat és automatikusan létrehozza a dimenziókat.

4. Dimenziók beállítása

  1. Kattints a Dimensions mappáraNew Dimension.
  2. Válaszd ki a következő táblákat és generáld le a dimenziókat:
    • Dim_CustomerCustomer Dimension
    • Dim_ProductProduct Dimension
    • Dim_DateDate Dimension
  3. Hierarchiák beállítása:
    • Date Dimension esetén: Year → Month → Day
    • Product Dimension esetén: Category → ProductName
  4. Kattints a Deploy gombra, hogy elmentsd a dimenziókat.

5. Adatkocka aggregáció és számítások

  1. Kattints az "Cube Structure" fülre.
  2. Add hozzá a következő mérőszámokat (Measures):
    • SUM(SalesAmount)
    • SUM(Quantity)
  3. 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

  1. Jobb klikk az adatkockáraProcess.
  2. Az SSAS betölti az adatokat és előállítja az aggregációkat.
  3. Kattints a Deploy gombra, hogy az Analysis Services szerverre mentse az adatkockát.

7. Adatkocka lekérdezése és ellenőrzése

  1. SSMS-ben (SQL Server Management Studio) csatlakozz az SSAS instance-hoz.
  2. Futtasd a következő MDX-lekérdezést, hogy ellenőrizd az értékesítési adatok összesítését:
    --mdx

    SELECT [Measures].[SalesAmount] ON COLUMNS, [Date].[Year].[2024] ON ROWS FROM [SalesCube]
  3. 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?

  1. Nyisd meg az SSAS projektedet SSDT-ben.
  2. Navigálj a Cube Structure fülre, majd válaszd a "Partitions" opciót.
  3. 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_2022WHERE Year = 2022
      • Fact_Sales_2023WHERE Year = 2023
      • Fact_Sales_2024WHERE Year = 2024
  4. 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?

  1. Nyisd meg az SSDT-t, majd válaszd az "Aggregations" opciót az adatkockában.
  2. Használd az Aggregation Design Wizard-ot.
    • Automatikusan javasol aggregációkat az adatbázisodhoz.
  3. Á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:

--- mdx

SELECT [Measures].[SalesAmount] ON COLUMNS, [Date].[Year].MEMBERS ON ROWS FROM [SalesCube]

Fejlettebb MDX: Dinamikus TOP-N elemzés

A legjobban teljesítő 5 termék kategória:

---mdx

SELECT [Measures].[SalesAmount] ON COLUMNS, TOPCOUNT([Product].[Category].MEMBERS, 5, [Measures].[SalesAmount]) ON ROWS FROM [SalesCube]

MDX teljesítményoptimalizálás

  1. Használj WHERE helyett slicert – A WHERE lassíthatja a lekérdezést.

    • Példa:
      Lassabb
      ---mdx

      SELECT [Measures].[SalesAmount] ON COLUMNS FROM [SalesCube] WHERE ([Date].[Year].[2024])
      Gyorsabb
      ---mdx

      SELECT [Measures].[SalesAmount] ON COLUMNS FROM [SalesCube] WHERE ([Date].[Year].&[2024])
  2. WITH Clause használata az ismétlődő számítások elkerülésére.

    -- mdx

    WITH MEMBER [Measures].[SalesGrowth] AS ([Measures].[SalesAmount] - [Measures].[SalesAmount].PREVMEMBER) / [Measures].[SalesAmount].PREVMEMBER SELECT [Measures].[SalesAmount], [Measures].[SalesGrowth] ON COLUMNS, [Date].[Year].MEMBERS ON ROWS FROM [SalesCube]

    Gyorsabb, mert nem számolja újra minden egyes alkalommal

  3. NON EMPTY használata a NULL értékek kihagyására

    ---mdx

    SELECT NON EMPTY [Customer].[Country].MEMBERS ON ROWS, [Measures].[SalesAmount] ON COLUMNS FROM [SalesCube]

    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

  1. SSDT-ben válaszd ki az SSAS adatkockát, majd navigálj a "Partitions" fülre.
  2. Töröld a meglévő alapértelmezett partíciót, és hozz létre egy új partíciót egy adott hónapra:
    ---sql

    SELECT * FROM Fact_Sales WHERE Month = '2024-03'
  3. 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

---xml

<Alter ObjectExpansion="ExpandFull" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> <Object> <DatabaseID>SalesCubeDB</DatabaseID> <CubeID>SalesCube</CubeID> <MeasureGroupID>Sales Fact</MeasureGroupID> <PartitionID>Sales_March_2024</PartitionID> </Object> <ObjectDefinition> <Partition> <ID>Sales_March_2024</ID> <Name>Sales March 2024</Name> <Source> <QueryDefinition> <![CDATA[ SELECT * FROM Fact_Sales WHERE Month = '2024-03' ]]> </QueryDefinition> </Source> <StorageMode>MOLAP</StorageMode> </Partition> </ObjectDefinition> </Alter>

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

  1. SSDT-ben navigálj a KPI fülre, és hozz létre egy új KPI-t.
  2. Beállítások:
    • Value: SUM([Measures].[SalesAmount])
    • Goal: 1000000 (Célérték)
    • Status (Jelző ikonhoz):
      --mdx

      IIF([Measures].[SalesAmount] >= 1000000, 1, 0)
    • Trend (Időbeli változás):
      --mdx

      IIF([Measures].[SalesAmount] > [Measures].[SalesAmount].PREVMEMBER, 1, -1)

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

---mdx

SCOPE([Date].[Year].[2024]); [Measures].[Discounted Sales] = [Measures].[SalesAmount] * 0.9; END SCOPE;

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ódAdatok helyeTeljesítményFrissítés gyakorisága
MOLAP (Multidimensional OLAP)Az SSAS cache-benNagyon gyorsKézi frissítés szükséges
ROLAP (Relational OLAP)SQL ServerbenLassúbb, de mindig naprakészAutomatikusan frissül
HOLAP (Hybrid OLAP)KombináltKözepes sebességRé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?

  1. SSDT-ben válaszd ki az adott partíciót.
  2. 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.
  3. 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

---mdx

WITH MEMBER [Measures].[3 Month Moving Avg] AS AVG( LASTPERIODS(3, [Date].[Month].CURRENTMEMBER), [Measures].[SalesAmount] ) SELECT [Measures].[3 Month Moving Avg] ON COLUMNS, [Date].[Month].MEMBERS ON ROWS FROM [SalesCube]

🔹 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

--mdx

WITH MEMBER [Measures].[YOY Growth] AS ([Measures].[SalesAmount] - ([Measures].[SalesAmount], [Date].[Year].PREVMEMBER)) / ([Measures].[SalesAmount], [Date].[Year].PREVMEMBER), FORMAT_STRING = "Percent" SELECT [Measures].[YOY Growth] ON COLUMNS, [Date].[Year].MEMBERS ON ROWS FROM [SalesCube]

🔹 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?

  1. SSDT-ben válaszd ki az adatkockát, majd menj az "Aggregations" fülre.
  2. Futtasd az Aggregation Designert, és válaszd a "Usage-Based Optimization"-t.
  3. 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

---mdx

ALTER SESSION SET CACHE POLICY = 'Aggressive';

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?

  1. SSMS-ben futtasd az alábbi parancsot az SSAS szerveren:
    ---sql

    ALTER SERVER CONFIGURATION SET ALLOW_QUERY_LOGGING = ON;
  2. 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

---mdx

IIF( USERNAME() = "DOMAIN\SalesManager", [Measures].[SalesAmount], NULL )

🔹 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?

  1. Hozz létre egy Role-t SSAS-ben, majd állítsd be a DAX kifejezést:
    ---mdx

    [Region] = LOOKUPVALUE('UserRegions'[Region], 'UserRegions'[User], USERNAME())
  2. 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:


http://faragocsaba.hu/ssas

https://www.sqlshack.com/build-cube-scratch-using-sql-server-analysis-services-ssas/

https://www.sqlservercentral.com/articles/how-to-change-an-analysis-services-instance-to-tabular-mode










Megjegyzések