Megosztás:


Számítási csoportok

A következőkre vonatkozik: SQL Server 2019 és újabb Analysis Services Azure Analysis Services Fabric/Power BI Premium

A számítási csoportok jelentősen csökkenthetik a redundáns mértékek számát azáltal, hogy számítási elemekként gyakran használt mértékkifejezési mintákat alkalmaznak. A számítási csoportok 1500-ban és magasabb kompatibilitási szinten támogatottak a táblázatos modellekben. Ez magában foglalja az összes Power BI szemantikai modellt.

Ha például 5 mértékkel rendelkezik, és mindegyikhez egy előző évi verziót szeretne létrehozni, ugyanazt a mintát használja mindegyikhez ugyanazzal a DAX-függvényekkel.

[Measure 1 Prior Year] = CALCULATE([Measure 1], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 2 Prior Year] = CALCULATE([Measure 2], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 3 Prior Year] = CALCULATE([Measure 3], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 4 Prior Year] = CALCULATE([Measure 4], PARALLELPERIOD('Date'[Date], -1, YEAR))

[Measure 5 Prior Year] = CALCULATE([Measure 5], PARALLELPERIOD('Date'[Date], -1, YEAR))

5 további mérték létrehozása helyett használhatja a mintát egy helyőrzővel rendelkező számítási tételben, a SELECTEDMEASURE a kifejezést bármely mértékre alkalmazhatja.

CALCULATE(SELECTEDMEASURE(), PARALLELPERIOD('Date'[Date], -1, YEAR))

A számítási elemet akkor alkalmazza a rendszer, ha kiválasztja a számítási elemet egy szűrőben vagy szeletelőben, vagy a vizualizációban csoportosítja az értékeket.

Caluculation group item alkalmazása Power BI-jelentésben

Számítási csoport létrehozása

A számítási csoportok sokféleképpen hozhatók létre.

Számítási csoport létrehozása Power BI-modellnézet használatával

Számítási csoportot a Power BI Desktop modellnézetében vagy a Power BI szemantikai modelljének böngészőben történő szerkesztésekor hozhat létre.

  1. A szemantikai modell szerkesztése
  2. Válassza a Számításcsoport menüszalag gombot.
  3. Az első számítási elem létrejön Önnek.
  4. Nevezze át és módosítsa a kifejezést.

A Számítási elemek csomópont és a Tulajdonságok panel használatával további számítási elemeket rendelhet és hozhat létre. A számítási csoport vagy a számítási elemek csomópontjának helyi menüje használható új számítási csoportok létrehozásához. Az egyes számítási elemek helyi menüjében lehetőség van az újrarendelésükre is.

További információ: Számítási csoportok létrehozása a Power BI-ban.

Számítási csoport létrehozása Power BI TMDL nézet használatával

Számítási csoportot a Power BI Desktop táblázatos modelldefiníciós nyelvében vagy TMDL nézetében hozhat létre. Szerkessze a szemantikai modellt, és használja ezt a TMDL-szkriptet.

createOrReplace

	table 'Calculation group'

		calculationGroup
			precedence: 1

			calculationItem 'Calculation item' = SELECTEDMEASURE()

		column 'Calculation group column'
			dataType: string
			summarizeBy: none
			sourceColumn: Name
			sortByColumn: Ordinal

			annotation SummarizationSetBy = Automatic

		column Ordinal
			dataType: int64
			formatString: 0
			summarizeBy: sum
			sourceColumn: Ordinal

			annotation SummarizationSetBy = Automatic

Számítási csoport létrehozása a Visual Studióval

A számítási csoportok a Visual Studióban támogatottak az Analysis Services Projects VSIX 2.9.2-s és újabb frissítésével. A számítási csoportok a táblázatos modell szkriptnyelvével (TMSL) vagy a nyílt forráskódú táblázatos szerkesztővel is létrehozhatók.

  1. A Táblázatos modellkezelőben kattintson a jobb gombbal a Számítási csoportok elemre, majd kattintson az Új számítási csoport parancsra. Alapértelmezés szerint egy új számítási csoport egyetlen oszlopból és egyetlen számítási tételből áll.

  2. A Tulajdonságok használatával módosíthatja a nevet, és megadhatja a számítási csoport, az oszlop és az alapértelmezett számítási elem leírását.

  3. Ha meg szeretne adni egy DAX-képletkifejezést az alapértelmezett számítási elemhez, kattintson a jobb gombbal, majd kattintson a Képlet szerkesztése parancsra a DAX-szerkesztő megnyitásához. Adjon meg érvényes kifejezést.

  4. További számítási elemek hozzáadásához kattintson a jobb gombbal a Számítási elemek elemre, majd az Új számítási elem parancsra.

Számítási elemek rendelése

  1. A Táblázatos modellkezelőben kattintson a jobb gombbal egy számítási csoportra, majd kattintson az Oszlop hozzáadása parancsra.

  2. Nevezze el az Ordinal oszlopot (vagy valami hasonlót), adjon meg egy leírást, majd állítsa a Rejtett tulajdonság értékét Igaz értékre.

  3. Minden rendezni kívánt számítási tételnél állítsa az Ordinal tulajdonságot pozitív számra. Minden szám szekvenciális, például egy 1-gyel ordinális tulajdonsággal rendelkező számítási elem jelenik meg elsőként, egy 2-vel rendelkező pedig másodikként, és így tovább. Az alapértelmezett -1 rendelkező számítási elemek nem szerepelnek a sorrendben, de megjelennek a jelentés rendezett elemei előtt.

Előnyök

A számítási csoportok olyan összetett modellek problémáival foglalkoznak, amelyek során a redundáns mértékek elterjedhetnek ugyanazokkal a számításokkal – ez a leggyakoribb az időintelligencia-számítások esetében. Egy értékesítési elemző például az értékesítési összegeket és a rendeléseket szeretné megtekinteni hónapról hónapra (MTD), negyedévről napra (QTD), évről évre (YTD), az előző évre (PY) vonatkozó rendeléseket stb. Az adatmodellezőnek külön mértékeket kell létrehoznia minden számításhoz, ami több tucat mértékhez vezethet. A felhasználó számára az eredmény az, hogy ugyanannyi intézkedést kell rendeznie, és egyenként kell alkalmaznia azokat a jelentésére.

Először nézzük meg, hogyan jelennek meg a számítási csoportok a felhasználók számára egy jelentéskészítő eszközben, például a Power BI-ban. Ezután áttekintjük, hogy mi alkotja a számítási csoportot, és hogyan jönnek létre a modellben.

A számítási csoportok a jelentéskészítési ügyfelekben egyetlen oszlopot tartalmazó táblaként jelennek meg. Az oszlop nem hasonlít egy tipikus oszlophoz vagy dimenzióhoz, hanem egy vagy több újrafelhasználható számítást vagy számítási elemet jelöl, amelyek a vizualizáció értékszűrője által már hozzáadott mértékekre alkalmazhatók.

Az alábbi animációban egy felhasználó elemzi a 2012- és 2013-ra vonatkozó értékesítési adatokat. A számítási csoport alkalmazása előtt a Sales alapmérték az összes értékesítés összegét számítja ki az egyes hónapokra vonatkozóan. A felhasználó ezután időintelligencia-számításokat szeretne alkalmazni, hogy lekérje az értékesítési összegeket hónapról hónapra, negyedévről napra, évről évre stb. Számítási csoportok nélkül a felhasználónak egyéni időintelligencia-mértékeket kell kiválasztania.

Az Időintelligencia nevű számítási csoportban, amikor a felhasználó az Időszámítás elemet az Oszlopok szűrőterületre húzza, minden egyes számítási elem külön oszlopként jelenik meg. Az egyes sorok értékeit a Sales alapmértékből számítjuk ki.

A Power BI-ban alkalmazott számítási csoport

A számítási csoportok explicit DAX-mértékekkel működnek. Ebben a példában a Sales egy explicit mérték, amely már létrejött a modellben. A számítási csoportok nem működnek implicit DAX-mértékekkel. A Power BI-ban például implicit mértékek akkor jönnek létre, amikor egy felhasználó oszlopokat húz a vizualizációkra az összesített értékek megjelenítéséhez explicit mérték létrehozása nélkül. A Power BI jelenleg DAX-t hoz létre az implicit mértékekhez, amelyeket beágyazott DAX-számítások formájában írnak meg, ami azt jelenti, hogy az implicit mértékek nem használhatók számítási csoportokkal. A Táblázatos objektummodellben (TOM) egy új modelltulajdonság jelent meg, a DiscourageImplicitMeasures. Jelenleg a számítási csoportok létrehozásához ezt a tulajdonságot igaz értékre kell állítani. Ha igaz értékre van állítva, a Power BI Desktop Live Connect módban letiltja az implicit mértékek létrehozását.

A számítási csoportok támogatják a többdimenziós adatkifejezések (MDX) lekérdezéseit is. Ez azt jelenti, hogy a Microsoft Excel felhasználói, amelyek táblázatos adatmodelleket kérdeznek le az MDX használatával, teljes mértékben kihasználhatják a munkalap kimutatásaiban és diagramjaiban található számítási csoportok előnyeit.

Hogyan működnek?

Most, hogy megismerte, hogyan használják a számítási csoportok a felhasználókat, nézzük meg, hogyan jön létre az Időintelligencia számítási csoport példája.

Mielőtt megismerkednénk a részletekkel, lássunk be néhány új DAX-függvényt, amelyek kifejezetten a számítási csoportokhoz használhatók:

SELECTEDMEASURE – A számítási elemek kifejezései használják a jelenleg kontextusban lévő mértékre való hivatkozáshoz. Ebben a példában a Értékesítési mutató.

SELECTEDMEASURENAME – A számítási elemek kifejezései használják a kontextusban lévő mérték név szerinti meghatározásához.

ISSELECTEDMEASURE – A számítási elemek kifejezései arra szolgálnak, hogy meghatározzák, hogy a kontextusban lévő mérték szerepel-e a mértékek listájában.

SELECTEDMEASUREFORMATSTRING – A számítási elemek kifejezései használják a kontextusban lévő mérték formátumsztringjének lekéréséhez.

Példa az időintelligencia-szolgáltatásra

Tábla neve – Időintelligencia
Oszlop neve – Időszámítás
Precedencia – 20

Időintelligencia-számítási elemek

Aktuális

SELECTEDMEASURE()

MTD

CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))

QTD

CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))

YTD

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

PY

CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))

PY MTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "MTD"
)

PY QTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "QTD"
)

PY YTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

YOY

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    'Time Intelligence'[Time Calculation] = "PY"
)

YOY%

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Időintelligencia-lekérdezés

A számítási csoport teszteléséhez hajtsa végre a következő DAX-lekérdezést. Megjegyzés: Az MTD, a YOY és a YOY% nem szerepelnek ebben a lekérdezési példában. A Power BI-ban a DAX-lekérdezési nézetben futtassa a lekérdezést.

EVALUATE
CALCULATETABLE (
    SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
        "QTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
        "YTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
        "PY",      CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
        "PY QTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
        "PY YTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
    ),
    DimDate[CalendarYear] IN { 2012, 2013 }
)

Időintelligencia-lekérdezés eredménye

A visszatérési táblázat az egyes alkalmazott számítási elemek számításait jeleníti meg. Például, a 2012. első negyedévre vonatkozó QTD a 2012. január, február és március összege.

Időintelligencia-lekérdezés eredménye

Dinamikus formátumú karakterláncok

A számítási csoportokkal rendelkező dinamikus formázási sztringek lehetővé teszik a formázási sztringek feltételes alkalmazását a mértékekre anélkül, hogy sztringek visszaadására kényszerítenék őket.

A táblázatos modellek a DAX FORMAT függvényével támogatják a mértékek dinamikus formázását. A FORMAT függvény hátránya azonban, hogy sztringet ad vissza, és arra kényszeríti az egyébként numerikus mértékeket, hogy sztringként is visszaadják. Ennek lehetnek bizonyos korlátai, például hogy nem működik a legtöbb Power BI-vizualizációval, amelyek numerikus értékektől függnek, mint például a diagramok.

A Power BI-ban a mértékek dinamikus formázási sztringjei lehetővé teszik a formázási sztringek feltételes alkalmazását egy adott mértékre anélkül, hogy arra kényszerítenék őket, hogy sztringet adjanak vissza, és ne használjanak számítási csoportokat. További információkért lásd: Mértékek dinamikus formázási karakterláncai.

Dinamikus formázási sztringek az időintelligenciához

Ha megnézzük a fent látható Időintelligencia-példát, a YOY% kivételével minden számítási tételnek az aktuális mérték formátumát kell használnia a kontextusban. Az Értékesítési alapmérték alapján számított YTD-nek például pénznemnek kell lennie. Ha ez egy olyan számítási csoport lenne, mint egy Rendelések alapmérték, a formátum numerikus lenne. A YOY%azonban az alapmérték formátumától függetlenül százalékos értéknek kell lennie.

YOY% esetében felülbírálhatjuk a formátumsztringet azáltal, hogy a formátumsztring-kifejezés tulajdonságát 0,00%;-0,00%;0,00% értékre állítjuk. A sztringkifejezések formázásával kapcsolatos további információkért tekintse meg az MDX-cella tulajdonságai – A SZTRING tartalma formázása című témakört.

Ebben a mátrixvizualizációban a Power BI-ban láthatja, hogy a Sales Current/YOY és Orders Current/YOY megtartják a megfelelő alapmértékformátum-sztringeket. A Sales YOY% és Orders YOY% azonban felülbírálja a formátumsztringet, hogy százalékos formátumot használjon.

Időintelligencia mátrixvizualizációban

Dinamikus formázási sztringek pénznemkonvertáláshoz

A dinamikus formázási karakterláncok egyszerű pénznemkonvertálást tesznek lehetővé. Fontolja meg a következő Adventure Works-adatmodellt. A modellt egy-a-többhöz valutaátváltásra készítették, a konvertálási típusok által meghatározott módon.

Pénznemkamat táblázatos modellben

A Rendszer hozzáad egy FormatString oszlopot a DimCurrency táblához, és kitölti a megfelelő pénznemek formátumsztringjeivel.

Sztringoszlop formázása

Ebben a példában a következő számítási csoport lesz definiálva:

Példa pénznemkonvertálásra

Tábla neve – Pénznemkonvertálás
Oszlop neve – Konverziós számítás
Precedencia – 5

Pénznemkonvertálás számítási elemei

Nincs átalakítás

SELECTEDMEASURE()

Konvertált pénznem

IF(
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
    SELECTEDMEASURE(),
    SUMX(
        VALUES(DimDate[Date]),
        CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
    )
)

Sztringkifejezés formázása

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

Megjegyzés

A számítási csoportokhoz tartozó kijelölési kifejezések használatával automatikus pénznemkonvertálás valósítható meg a számítási csoportokon, így nincs szükség két külön számítási tételre.

A formátum karakterlánc kifejezésnek skaláris karakterláncot kell visszaadnia. Az új SELECTEDMEASUREFORMATSTRING függvényt használja az alapmérték formátumsztringjének visszaállításához, ha több pénznem is van a szűrőkörnyezetben.

Az alábbi animáció az Értékesítési mérték dinamikus formátumú pénznemkonvertálását mutatja be egy jelentésben.

Valutakonverzió dinamikus formátumú karakterlánc alkalmazva

Kijelölési kifejezések

A kijelölési kifejezések a számítási csoporthoz definiált választható tulajdonságok. A kijelölési kifejezéseknek két típusa van:

  • multipleOrEmptySelectionExpression. Ez a kijelölési kifejezés akkor lesz alkalmazva, ha:
    • több számítási elem van kijelölve,
    • ki van jelölve egy nem létező számítási elem, vagy
    • ellentmondó kijelölés történt.
  • noSelectionExpression. Ez a kijelölési kifejezés akkor lesz alkalmazva, ha a számítási csoport nincs szűrve.

Mindkét kijelölési kifejezés rendelkezik a formatStringDefinition dinamikus formázási sztring kifejezéssel is.

Összefoglalva, egy számítási csoportban a következők definiálhatók, például TMDL használatával:

...
table Scenarios
	calculationGroup
		...
    multipleOrEmptySelectionExpression = "replace with the DAX formula"
        formatStringDefinition = "replace with the DAX formula"
    noSelectionExpression= "replace with the DAX formula"
        formatStringDefinition = "replace with the DAX formula"
...

Megjegyzés

Ezek a kifejezések, ha meg vannak adva, csak az említett helyzetekre vonatkoznak. Ezek a kifejezések nem befolyásolják egyetlen számítási elem kijelölését.

Az alábbiakban áttekintheti ezeket a kifejezéseket és azok alapértelmezett viselkedését, ha nincs megadva:

A kijelölés típusa Nincs definiálva kijelölési kifejezés (alapértelmezett) Kijelölési kifejezés definiálva
Egyetlen kiválasztás A kijelölés alkalmazva van A kijelölés alkalmazva van
Több kijelölés A számítási csoport nincs szűrve A multipleOrEmptySelectionExpression kiértékelésének eredménye
Üres kijelölés A számítási csoport nincs szűrve A multipleOrEmptySelectionExpression kiértékelésének eredménye
Nincs kijelölés A számítási csoport nincs szűrve A noSelectionExpression kiértékelésének eredménye

Megjegyzés

A modell selectionExpressionBehavior beállításával tovább befolyásolhatja, hogy a számítási csoport mit ad vissza, ha a kijelölési kifejezések nincsenek definiálva.

SelectionExpressionBehavior modellbeállítás

A modellek selectionExpressionBehavior beállítással rendelkeznek, amely lehetővé teszi a modell számítási csoportjainak viselkedésének további szabályozását. Ez a beállítás a következő három értéket fogadja el:

  • Automatikus. Ez az alapértelmezett érték, és megegyezik a nemvisuális értékkel. Ez biztosítja, hogy a meglévő modellek ne változtassák meg a viselkedést. Az automatikusra beállított jövőbeli kompatibilitási szint fölötti modellek inkább vizualizációt használnak. Ekkor bejelentés lesz.
  • Látás nélküli. Ha a számítási csoport nem definiál multipleOrEmptySelection kifejezést, a számítási csoport visszaadja SELECTEDMEASURE() , és ha a mérték a számítási csoport szerint van csoportosítva, a részösszegértékek rejtettek lesznek.
  • Vizualizáció. Ha a számítási csoport nem definiál multipleOrEmptySelection kifejezést, a számítási csoport visszaadja a függvényt BLANK(). Ha a számítási csoport szerint csoportosít, a részösszegértékek a számítási csoport kontextusában kiválasztott mérték kiértékelésével lesznek meghatározva.

A TMDL használatával állítsa be a tulajdonságot a modellen:

createOrReplace
    model Model
        ...
        selectionExpressionBehavior: automatic | nonvisual | visual
...

Több vagy üres kijelölés

Ha ugyanazon a számítási csoportban több kijelölés is történik, a számítási csoport kiértékeli és visszaadja a multipleOrEmptySelectionExpression értékét, ha meg van adva. Ha ez a kifejezés nincs definiálva, a számítási csoport a következő eredményt adja vissza, ha a modell selectionExpressionBehavior beállítása automatikus vagy nemvisuális:

SELECTEDMEASURE()

Ha a modell selectionExpressionBehavior beállításavizualizációra van állítva, akkor a számítási csoport a következőt adja vissza:

BLANK()

Nézzük meg például a MyCalcGroup nevű számítási csoportot, amely a következőképpen van konfigurálva egy multipleOrEmptySelectionExpression beállítással:

IF (
ISFILTERED ( 'MyCalcGroup' ),
    "Filters: " 
         & CONCATENATEX ( 
  	            FILTERS ( 'MyCalcGroup'[Name] ),
            'MyCalcGroup'[Name], 
            ", "
     	   )
)

Most képzelje el a következő kijelölést a számítási csoportban:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
    )
}

Itt kiválasztunk két elemet a számítási csoportban: "item1" és "item2". Ez több kijelölés, ezért a multipleOrEmptySelectionExpression kiértékelésre kerül, és a következő eredményt adja vissza : "Szűrők: elem1, elem2".

Ezután válassza ki a következőt a számítási csoportban:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item4" -- item4 does not exists
    )
}

Ez egy példa egy üres kijelölésre, mivel a "item4" nem létezik ezen a számítási csoportban. Ezért a multipleOrEmptySelectionExpression kiértékelése a következő eredményt adja vissza: "Szűrők: ".

Nincs kijelölés

A noSelectionExpression egy számítási csoportban akkor lesz alkalmazva, ha a számítási csoport nincs szűrve. Ez többnyire az alapértelmezett műveletek végrehajtására szolgál anélkül, hogy a felhasználónak végre kellene hajtania a műveletet, ugyanakkor rugalmasságot biztosít a felhasználó számára az alapértelmezett művelet felülbírálása érdekében. Nézzük meg például az automatikus pénznemváltást az amerikai dollárral, mint központi középvalutával.

Egy számítási csoportot a következő noSelectionExpression beállítással állíthatunk be:

IF (
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE (
        DimCurrency[CurrencyName],
        "US Dollar"
    ) = "US Dollar",
    SELECTEDMEASURE (),
    SUMX (
        VALUES ( DimDate[DateKey] ),
        CALCULATE (
            DIVIDE ( SELECTEDMEASURE (), MAX ( FactCurrencyRate[EndOfDayRate] ) )
        )
    )
)

A következő kifejezéshez is beállítunk egy formatStringDefinition formátumot:

SELECTEDVALUE(
  DimCurrency[FormatString],
  SELECTEDMEASUREFORMATSTRING()
)

Most, ha nincs pénznem kiválasztva, a program szükség szerint automatikusan átváltja az összes pénznemet a kimutatás pénznemére (US Dollar). Ezen felül választhat egy másik pénznemet is, amellyel átválthat arra a pénznemre anélkül, hogy számítási elemeket kellene váltania, ahogyan azt a noSelectionExpression nélkül kellene megtennie.

Elsőbbség

Az elsőbbség egy számítási csoporthoz definiált tulajdonság. Meghatározza, hogy a számítási csoportok milyen sorrendben legyenek kombinálva a mögöttes mértékkel a SELECTEDMEASURE() számítási tételben való használatakor.

Példa az elsőbbségi sorrendre

Nézzük meg az egyszerű példát. Ez a modell egy 10 megadott értékkel rendelkező mértékkel és két számítási csoporttal rendelkezik, egy-egy számítási tétellel. Mindkét számítási csoport számítási elemeit a mértékre fogjuk alkalmazni. A beállítás a következőképpen történik:

'Measure group'[Measure] = 10

Az első számítási csoport 'Calc Group 1 (Precedence 100)' és a számítási elem 'Calc item (Plus 2)':

'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2

A második számítási csoport, 'Calc Group 2 (Precedence 200)' a számítási elem pedig a következő 'Calc item (Times 2)':

'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2

Láthatja, hogy az 1. számítási csoport elsőbbsége 100, a 2. számítási csoport pedig 200.

Az SQL Server Management Studio (SSMS) vagy egy XMLA olvasási-írási funkciókkal (például a nyílt forráskódú táblázatos szerkesztővel) rendelkező külső eszköz használatával XMLA-szkriptekkel számítási csoportokat hozhat létre, és beállíthatja az elsőbbségi értékeket. Itt adjuk hozzá "Calc group 1 (Precedence 100)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 1 (Precedence 100)"
    },
    "table": {
      "name": "Calc group 1 (Precedence 100)",
      "calculationGroup": {
        "precedence": 100,
        "calculationItems": [
          {
            "name": "Calc item (Plus 2)",
            "expression": "SELECTEDMEASURE() + 2",
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 1 (Precedence 100)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

És ez a szkript hozzáadja "Calc group 2 (Precedence 200)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 2 (Precedence 200)"
    },
    "table": {
      "name": "Calc group 2 (Precedence 200)",
      "calculationGroup": {
        "precedence": 200,
        "calculationItems": [
          {
            "name": "Calc item (Times 2)",
            "expression": "SELECTEDMEASURE() * 2"
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 2 (Precedence 200)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

A Power BI Desktopban van egy kártyavizualizáció, amelyen a mérték és egy szeletelő látható a jelentés nézetben található egyes számítási csoportokhoz:

Mértékcsoport és különálló kifejezések.

Ha mindkét szeletelő ki van választva, kombinálni kell a DAX-kifejezéseket. Ehhez a 200-as legnagyobb prioritású számítási tételt kezdjük, majd a SELECTEDMEASURE() argumentumot a következő legmagasabbra, 100-ra cseréljük.

A legmagasabb prioritású kalkulációs elemünk DAX-kifejezése tehát:

SELECTEDMEASURE() * 2 

És a második legmagasabb prioritású számítási elem DAX-kifejezés:

SELECTEDMEASURE() + 2 

Most úgy vannak kombinálva, hogy a legmagasabb precedencia értékű számítási elem SELECTEDMEASURE() részét kicserélik a következő legmagasabb precedencia értékű számítási elemre, így:

( SELECTEDMEASURE() + 2 ) * 2

Ezután ha több számítási elem is van, addig folytatjuk, amíg el nem érjük a mögöttes mértéket. Ebben a modellben csak két számítási csoport található, ezért most a SELECTEDMEASURE() értéket magára a mértékre cseréljük, a következőképpen:

( ( [Measure] ) + 2 ) * 2

Mivel a mérték az Measure = 10, ez ugyanaz, mint:

( ( 10 ) + 2 ) * 2

Ha nincs több SELECTEDMEASURE() argumentum, a rendszer kiértékeli a kombinált DAX-kifejezést:

( ( 10 ) + 2 ) * 2 = 24

A Power BI Desktopban, amikor mindkét számítási csoportot szeletelővel alkalmazza, a mérték kimenete a következőképpen néz ki:

Mértékcsoport kombinált kifejezései.

Ne feledje azonban, hogy a kombináció úgy van beágyazva, hogy a kimenet ne legyen 10 + 2 * 2 = 14, ahogy itt látható:

Beágyazott kifejezések mérése.

Az egyszerű átalakításoknál az értékelés alacsonyabb precedencia szintről magasabbra történik. Például a 10-hez hozzáadunk 2-t, majd megszorozzuk 2-vel. A DAX-ban vannak olyan függvények, mint a CALCULATE, amelyek szűrőket vagy környezeti módosításokat alkalmaznak a belső kifejezésekre. Ebben az esetben a magasabb előzmény egy alacsonyabb elsőbbségi kifejezést módosít.

Az elsőbbség azt is meghatározza, hogy az egyes mértékek kombinált DAX-kifejezésére mely dinamikus formázási sztringet alkalmazza a rendszer. A legnagyobb prioritású számítási csoport dinamikus formázási sztringje az egyetlen alkalmazott. Ha egy mérték dinamikus formátumú sztringgel rendelkezik, az alacsonyabb elsőbbséget élvez a modell bármely számítási csoportjával szemben.

Elsőbbség példája az átlagokkal

Tekintsünk meg egy másik példát, amely ugyanazt a modellt használja, mint a cikkben korábban ismertetett időintelligencia-példában. Ezúttal azonban adjunk hozzá egy Átlagok számítási csoportot is. Az Átlagok számítási csoport olyan átlagos számításokat tartalmaz, amelyek függetlenek a hagyományos időintelligencia-adatoktól, mivel nem változtatják meg a dátumszűrő kontextusát – csak átlagszámításokat alkalmaznak rajta belül.

Ebben a példában egy napi átlagos számítás van meghatározva. Az olaj- és gázipari alkalmazásokban gyakoriak az olyan számítások, mint a napi átlagos olajhordó-mennyiség. Más gyakori üzleti példák közé tartozik a kiskereskedelmi üzletek értékesítési átlaga.

Bár az ilyen számításokat az időintelligencia-számításoktól függetlenül számítják ki, előfordulhat, hogy össze kell őket egyesíteni. Előfordulhat például, hogy egy felhasználó az év elejétől máig a napi olaj hordószámot szeretné látni, hogy megtekinthesse a napi olajkitermelést az adott időszakban. Ebben a forgatókönyvben a számítási elemeknél elsőbbséget kell beállítani.

Feltételezéseink a következők:

A tábla neve Átlagok.
Az oszlop neve átlagszámítás.
Az elsőbbség 10.

Átlagok számítási elemei

Átlag nélkül

SELECTEDMEASURE()

Napi átlag

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Íme egy példa egy DAX-lekérdezésre és egy visszatérési táblára:

Lekérdezés átlaga

EVALUATE
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Sales", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "No Average"
        ),
        "YTD", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "No Average"
        ),
        "Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "Daily Average"
        ),
        "YTD Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "Daily Average"
        )
    ),
    DimDate[CalendarYear] = 2012
)

Lekérdezési eredmény átlaga

Lekérdezési eredmény átlaga

Az alábbi táblázat a 2012. márciusi értékek kiszámításának módját mutatja be.

Oszlop név Számítás
Folyó évi Értékesítések összege 2012. január, február, március
= 495 364 + 506 994 + 373 483
Napi átlag 2012. márciusi értékesítések a márciusi napok számával osztva
= 373 483 / 31
YTD napi átlag 2012. március év elejétől számított adata osztva a január, február és március napjainak számával
= 1 375 841 / (31 + 29 + 31)

Íme az YTD számítási elem definíciója, 20 prioritással alkalmazva.

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

Íme a Napi átlag, amely 10-es prioritással van alkalmazva.

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Mivel az Időintelligencia számítási csoport elsőbbsége magasabb, mint az Átlagok számítási csoporté, a rendszer a lehető legszélesebb körben alkalmazza. Az YTD napi átlag számítása az YTD-t a napi átlagszámítás számlálójára és nevezőjára (a napok számára) egyaránt alkalmazza.

Ez egyenértékű a következő kifejezéssel:

CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))

Nem ez a kifejezés:

DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))

Oldalirányú rekurzió

A fenti Időintelligencia-példában néhány számítási elem ugyanabban a számítási csoportban lévő többire hivatkozik. Ezt oldalirányú rekurziónak nevezzük. A YOY% például a YOY-ra és a PY-ra is hivatkozik.

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Ebben az esetben mindkét kifejezést külön értékeli ki a rendszer, mert eltérő számítási utasításokat használnak. Más típusú rekurzió nem támogatott.

Egyetlen számítási elem a szűrőkörnyezetben

Az Időintelligencia-példában a PY YTD számítási tétel egyetlen számítási kifejezéssel rendelkezik:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

A CALCULATE függvény YTD argumentuma felülbírálja a szűrőkörnyezetet az YTD számítási tételben már definiált logika újrafelhasználásához. A PY és az YTD nem alkalmazható egyetlen értékelésben. A számítási csoportok csak akkor lesznek alkalmazva , ha a számítási csoport egyetlen számítási eleme szűrőkörnyezetben van.

Rendelés

Alapértelmezés szerint, ha egy számítási csoport oszlopa szerepel egy jelentésben, a számítási elemek betűrendbe vannak rendezve név szerint. Az Ordinal tulajdonság megadásával módosítható, hogy a számítási elemek milyen sorrendben jelenjenek meg a jelentésben. Ha a számítási tétel sorrendjét az Ordinal tulajdonsággal adja meg, az nem változtatja meg a sorrendet, amelyben a számítási elemek kiértékelése történik. Azt sem módosítja, hogy a számítási elemek milyen sorrendben jelenjenek meg a Táblázatos modellkezelőben.

A számítási elemek sorszámtulajdonságának megadásához hozzá kell adnia egy második oszlopot a számítási csoporthoz. Az alapértelmezett oszloptól eltérően, ahol az adattípus szöveg, a számítási elemek rendeléséhez használt második oszlop egész szám típusú adattípussal rendelkezik. Ennek az oszlopnak az egyetlen célja, hogy megadja a számítási csoport számítási elemeinek numerikus sorrendjét. Mivel ez az oszlop nem tartalmaz értéket egy jelentésben, a legjobb, ha a Rejtett tulajdonságot Igaz értékre állítja.

Az oszlop rendeléshez

Miután hozzáadta a második oszlopot a számítási csoporthoz, megadhatja a rendezni kívánt számítási elemek sorszámtulajdonság-értékét.

Sorszámos tulajdonság

További információ: Számítási elemek megrendelése.

Megfontolások

A modellek mértékei változós adattípusra módosulnak

Amint hozzáad egy számítási csoportot egy szemantikai modellhez, a Power BI-jelentések a variáns adattípust fogják használni az összes mértékhez. Ha ezt követően az összes számítási csoport el lesz távolítva a modellből, a mértékek ismét visszatérnek az eredeti adattípusukhoz.

Ez azt okozhatja, hogy a mértékekhez használt dinamikus formázási sztringek hibát jeleznek az újrahasználat során. A FORMAT DAX függvénnyel kényszerítse arra a variánsmértéket, hogy ismét sztring adattípusként legyen felismerve.

FORMAT([Dynamic format string], "")

Másik lehetőségként újra felhasználhatja a kifejezést dinamikus formázási sztringekhez egy felhasználó által definiált DAX-függvénnyel.

Vizualizációk hibája, ha egy számítási elem matematikai műveletet alkalmaz nem numerikus mértékre

A nem numerikus mértékeket gyakran használják a vizualizációk dinamikus címeihez és a mértékek dinamikus formátumú sztringjeihez. A hiba Nem lehet az értéket átalakítani... szöveges típusúból numerikus típusúvá az érintett vizualizációkon. A számítási tétel kifejezése elkerülheti ezt egy ellenőrzés hozzáadásával, amely ellenőrzi, hogy a mérték numerikus-e a matematikai művelet alkalmazása előtt. Használja az ISNUMERIC függvényt a számítási tételben.

Calculation item safe = 
    IF ( 
        // Check the measure is numeric
        ISNUMERIC( SELECTEDMEASURE() ),
            SELECTEDMEASURE() * 2,
            // Don't apply the calculation on a non-numeric measure
            SELECTEDMEASURE()
        )

Korlátozások

A számítási csoporttáblákon definiált objektumszintű biztonság (OLS) nem támogatott. Az OLS azonban definiálható ugyanazon modell más tábláiban is. Ha egy számítási elem OLS által védett objektumra hivatkozik, a rendszer általános hibát ad vissza.

A sorszintű biztonság (RLS) nem támogatott. Azonos modellű táblákon határozza meg az RLS-t, de magukon a számítási csoportokon (sem közvetlenül, sem közvetve) ne.

A részletsorok kifejezései nem támogatottak számítási csoportokkal.

A Power BI intelligens elbeszélő vizualizációi nem támogatottak számítási csoportokkal.

A Power BI implicit oszlopösszesítései nem támogatottak számítási csoportokkal rendelkező modellek esetében. Ha a DiscourageImplicitMeasures tulajdonság értéke jelenleg hamis (alapértelmezett), az összesítési beállítások megjelennek, de nem alkalmazhatók. Ha a DiscourageImplicitMeasuresbe van állítva igazra, az összesítési beállítások nem jelennek meg.

Ha Power BI-jelentéseket hoz létre élő kapcsolat használatával, a dinamikus formázási karakterláncok nem használhatók a jelentésszintű mértékeknél.

Lásd még

Számítási csoportok létrehozása a Power BI-banTMDL nézetbenDAX-lekérdezésnézetbenDinamikus formázási sztringek mértékekhezModell böngésző a Power BI modellnézetbenDAX táblázatos modellekben
DAX-referencia