Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
SQL Server 2019 a novější Analysis Services Azure Analysis Services 
Fabric/Power BI Premium
Skupiny výpočtů můžou výrazně snížit počet redundantních měr tím, že mají jako položky výpočtu vzory výrazů běžných měr. Skupiny výpočtů jsou podporovány v tabulkových modelech na úrovni kompatibility 1500 a vyšší. To zahrnuje všechny sémantické modely Power BI.
Pokud máte například 5 měr a chcete pro každou z nich vytvořit verzi z předchozího roku, použijete pro každou stejný vzor se stejnými funkcemi DAX.
[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))
Místo vytváření pěti dalších měr můžete použít vzor v položce výpočtu, který obsahuje zástupný symbol SELECTEDMEASURE, pomocí nějž aplikujete výraz na jakoukoli míru.
CALCULATE(SELECTEDMEASURE(), PARALLELPERIOD('Date'[Date], -1, YEAR))
Položka výpočtu se použije, když vyberete položku výpočtu ve filtru nebo řezačce, nebo ji použijete k seskupení hodnot v zobrazení.
Vytvoření skupiny výpočtů
Skupiny výpočtů je možné vytvářet mnoha způsoby.
Vytvoření skupiny výpočtů pomocí zobrazení modelu Power BI
Skupinu výpočtů můžete vytvořit v zobrazení modelu Power BI Desktopu nebo při úpravách sémantického modelu Power BI v prohlížeči.
- Úprava sémantického modelu
- Vyberte tlačítko Skupina výpočtů na pásu karet.
- První položka výpočtu se vytvoří za vás.
- Přejmenujte a upravte výraz.
Další položky výpočtu můžete uspořádat a vytvořit tak, že vyberete uzel Položky výpočtu a použijete podokno Vlastnosti. Místní nabídku uzlu výpočetní skupiny nebo položek výpočtu lze použít k vytvoření nové skupiny výpočtů. Místní nabídka každé položky výpočtu obsahuje také možnosti opětovného uspořádání těchto položek.
Další informace najdete v tématu Vytváření skupin výpočtů v Power BI.
Vytvoření skupiny výpočtů pomocí zobrazení TMDL Power BI
Skupinu výpočtů můžete vytvořit v jazyce pro definici tabulkového modelu nebo v zobrazení TMDL v Power BI Desktopu. Upravte sémantický model a použijte tento skript TMDL.
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
Vytvoření skupiny výpočtů pomocí sady Visual Studio
Skupiny výpočtů jsou podporovány v sadě Visual Studio s dodatkem Analysis Services Projects VSIX verze 2.9.2 a novější. Skupiny výpočtů lze vytvořit také pomocí jazyka TMSL (Tabular Model Scripting Language) nebo open source tabulkového editoru.
V Průzkumníku tabulkových modelů klepněte pravým tlačítkem myši na skupiny výpočtů a potom klepněte na příkaz Nová skupina výpočtů. Ve výchozím nastavení má nová skupina výpočtů jeden sloupec a jednu položku výpočtu.
Pomocí vlastností můžete změnit název a zadat popis pro skupinu výpočtů, sloupec a výchozí položku výpočtu.
Pokud chcete zadat výraz vzorce DAX pro výchozí položku výpočtu, klikněte pravým tlačítkem myši a potom klepněte na příkaz Upravit vzorec a otevřete editor DAX. Zadejte platný výraz.
Chcete-li přidat další položky výpočtu, klepněte pravým tlačítkem myši na Položku výpočtu a potom klepněte na tlačítko Nová položka výpočtu.
Pořadí položek výpočtu
V Průzkumníku tabulkových modelů klikněte pravým tlačítkem myši na skupinu výpočtů a potom klikněte na přidat sloupec.
Pojmenujte sloupec Ordinal (nebo něco podobného), zadejte popis a potom nastavte Vlastnost Hidden na Hodnotu True.
Pro každou výpočtovou položku, kterou chcete uspořádat, nastavte vlastnost Ordinal na kladné číslo. Každé číslo je pořadové, například položka výpočtu s pořadovou vlastností 1 se zobrazí jako první, vlastnost 2 jako druhá a tak dále. Položky výpočtu s výchozími -1 nejsou součástí řazení, ale zobrazují se před seřazenými položkami v sestavě.
Výhody
Skupiny výpočtů řeší problém ve složitých modelech, kdy může dojít k nárůstu redundantních měr pomocí stejných výpočetních postupů – což je nejběžnější u výpočtů časové inteligence. Například prodejní analytik chce zobrazit celkové tržby a objednávky od začátku měsíce do dnešního dne (MTD), od začátku čtvrtletí do dnešního dne (QTD), od začátku roku do dnešního dne (YTD), objednávky od začátku roku do dnešního dne za předchozí rok (PY) a podobně. Modelátor dat musí pro každý výpočet vytvořit samostatné míry, což může vést k desítkám měr. Pro uživatele to znamená, že musí projít mnoho opatření a použít je jednotlivě na svá hlásení.
Nejprve se podíváme na to, jak se skupiny výpočtů uživatelům zobrazují v nástroji pro vytváření sestav, jako je Power BI. Pak se podíváme na to, co tvoří skupinu výpočtů a jak se vytvářejí v modelu.
Skupiny výpočtů se zobrazují v klientech generování sestav jako tabulka s jedním sloupcem. Sloupec není jako typický sloupec nebo dimenze, místo toho představuje jednu nebo více opakovaně použitelných výpočtů nebo položky výpočtu, které lze použít na libovolnou metriku, která už byla přidána do filtru Hodnoty pro vizualizaci.
V následující animaci uživatel analyzuje prodejní data za roky 2012 a 2013. Před použitím skupiny výpočtů vypočítá běžná základní míra Sales součet celkových prodejů za každý měsíc. Uživatel pak chce použít výpočty časové inteligence, aby získal celkové tržby pro aktuální měsíc, aktuální čtvrtletí, aktuální rok atd. Bez skupin výpočtů by uživatel musel vybrat jednotlivé ukazatele časové inteligence.
Když v tomto příkladu s názvem Časové měřítko přetáhne uživatel položku Výpočet času do oblasti filtru Sloupce , zobrazí se každá položka výpočtu jako samostatný sloupec. Hodnoty pro každý řádek se počítají ze základní míry Sales.
Skupiny výpočtů pracují s explicitními mírami DAX. V tomto příkladu je sales explicitní míra, která už je v modelu vytvořená. Skupiny výpočtů nefungují s implicitními mírami DAX. Například v implicitních mírách Power BI se vytvoří, když uživatel přetáhne sloupce do vizuálů, aby zobrazil agregované hodnoty bez vytvoření explicitní míry. Power BI vygeneruje jazyk DAX pro implicitní míry napsané jako vložené výpočty DAX – to znamená, že implicitní míry nemůžou pracovat se skupinami výpočtů. Byla představena nová vlastnost modelu viditelná v tabulkovém objektovém modelu (TOM), OdstrahodovatImplicitMeasures. V současné době, aby bylo možné vytvořit skupiny výpočtů, musí být tato vlastnost nastavena na true. Pokud je nastavená hodnota true, Power BI Desktop v režimu Živého připojení zakáže vytváření implicitních měr.
Skupiny výpočtů také podporují dotazy MDX (Multidimensional Data Expressions). To znamená, že uživatelé Microsoft Excelu, kteří se dotazují na tabulkové datové modely pomocí jazyka MDX, můžou plně využívat skupiny výpočtů v kontingenčních tabulkách a grafech listu.
Jak fungují
Teď, když jste viděli, jak skupiny výpočtů uživatelům prospívají, podíváme se na to, jak se vytvoří příklad skupiny výpočtů časové inteligence.
Než se pustíme do podrobností, představíme si některé nové funkce DAX speciálně pro skupiny výpočtů:
SELECTEDMEASURE – výrazy používají pro položky výpočtu odkaz na míru, která je aktuálně v kontextu. V tomto příkladu je míra Sales (Prodej).
SELECTEDMEASURENAME – používá výrazy pro položky výpočtu k určení míry, která je v kontextu podle názvu.
ISSELECTEDMEASURE – používá výrazy pro položky výpočtu k určení míry, která je v kontextu, je určena v seznamu měr.
SELECTEDMEASUREFORMATSTRING – používá se výrazy pro položky výpočtu k načtení formátového řetězce míry, která je v kontextu.
Příklad časové inteligence
Název tabulky – časová inteligence
Název sloupce – výpočet času
Priorita – 20
Položky výpočtu časové inteligence
Aktuální
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"
)
)
Dotaz časového měřítka
Pokud chcete otestovat tuto skupinu výpočtů, spusťte následující dotaz DAX. Poznámka: MTD, YOY a YOY% jsou z tohoto příkladu dotazu vynechány. V Power BI spusťte dotaz pomocí zobrazení dotazu DAX .
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 }
)
Vrácení dotazu časové řady
Vrácená tabulka zobrazuje výpočty pro každou použitou položku výpočtu. Například viz QTD pro březen 2012 je součet leden, únor a březen 2012.
Řetězce dynamického formátu
Dynamické řetězce formátu se skupinami výpočtů umožňují podmíněné použití řetězců formátu na míry bez vynucení jejich vrácení řetězců.
Tabulkové modely podporují dynamické formátování měr pomocí funkce FORMAT jazyka DAX. Funkce FORMAT má ale nevýhodu vrácení řetězce, vynucení měr, které by jinak byly číselné, aby se vrátily také jako řetězec. To může mít určitá omezení, například nepracovat s většinou vizuálů Power BI v závislosti na číselných hodnotách, jako jsou grafy.
V Power BI umožňují řetězce dynamického formátu pro míry také podmíněné použití řetězců formátu na konkrétní míru bez vynucení vrácení řetězce řetězce a bez použití skupin výpočtů. Další informace najdete v tématu Dynamické formátovací řetězce měr.
Řetězce dynamického formátu pro časové měřítko
Pokud se podíváme na výše uvedený příklad časového měřítka, všechny položky výpočtu s výjimkou yoy% by měly používat formát aktuální míry v kontextu. Například hodnota YTD vypočítaná na základní míře Prodej by měla být měna. Pokud by to byla skupina výpočtů pro něco jako základní míra Orders, formát by byl číselný. YOY%, však by měl být procento bez ohledu na formát základní míry.
Pro YOY%můžeme nahradit formátovací řetězec nastavením vlastnosti výrazu řetězce formátu na 0,00%;-0,00%;0,00%. Další informace o formátování vlastností řetězcového výrazu naleznete v tématu MDX Cell Properties - FORMAT STRING Contents.
V tomto maticového vizuálu v Power BI vidíte, že prodeje Current/YOY a Orders Current/YOY zachovají odpovídající řetězce formátu základní míry. Sales YOY% a Orders YOY% však přepíše formát řetězce, aby používal procentní formát.
Řetězce dynamického formátu pro převod měny
Řetězce dynamického formátu poskytují snadný převod měny. Zvažte následující datový model Adventure Works. Modeluje se pro převod měny 1:N podle definice typů převodu.
Sloupec FormatString se přidá do tabulky DimCurrency a naplní se řetězci formátu pro příslušné měny.
V tomto příkladu je pak definována následující skupina výpočtů:
Příklad převodu měny
Název tabulky – Převod měny
Název sloupce – výpočet převodu
Priorita – 5
Položky výpočtu pro převod měny
Bez převodu
SELECTEDMEASURE()
Převedená měna
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]) ) )
)
)
Formát řetězcového výrazu
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
Poznámka:
Výrazy výběru pro skupiny výpočtů se dají použít k implementaci automatického převodu měny u výpočetních skupin, aniž by bylo nutné mít dvě samostatné výpočetní položky.
Výraz formátovacího řetězce musí vrátit skalární řetězec. Pomocí nové funkce SELECTEDMEASUREFORMATSTRING se vrátí k řetězci formátu základní míry, pokud je v kontextu filtru více měn.
Následující animace ukazuje dynamický formát převodu měny metriky Sales v sestavě.
Výrazy výběru
Výrazy výběru jsou volitelné vlastnosti definované pro skupinu výpočtů. Existují dva typy výrazů výběru:
-
multipleOrEmptySelectionExpression. Tento výraz výběru se použije v těchto případech:
- bylo vybráno více položek výpočtu,
- Byla vybrána ne existující položka výpočtu nebo
- byl proveden konfliktní výběr.
- noSelectionExpression. Tento výraz výběru se použije v případě, že skupina výpočtů není filtrována.
Oba tyto výrazy výběru mají také formátStringDefinition dynamický formát řetězcový výraz.
V souhrnu lze ve skupině výpočtů definovat následující možnosti, například pomocí TMDL:
...
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"
...
Poznámka:
Tyto výrazy, pokud jsou zadány, se použijí pouze pro konkrétní situace uvedené. Tyto výrazy nemají vliv na výběr jedné položky výpočtu.
Tady je přehled těchto výrazů a jejich výchozí chování, pokud není zadáno:
| Typ výběru | Výraz výběru není definovaný (výchozí) | Definovaný výraz výběru |
|---|---|---|
| Jeden výběr | Použije se výběr. | Použije se výběr. |
| Vícenásobný výběr | Skupina výpočtů není filtrována. | Výsledek vyhodnocení multipleOrEmptySelectionExpression |
| Prázdný výběr | Skupina výpočtů není filtrována. | Výsledek vyhodnocení multipleOrEmptySelectionExpression |
| Bez výběru | Skupina výpočtů není filtrována. | Výsledek vyhodnocení noSelectionExpression |
Poznámka:
Pomocí nastavení selectionExpressionBehavior modelu můžete dále ovlivnit, jakou skupinu výpočtů vrátí, když nejsou definovány výrazy výběru.
Nastavení modelu SelectionExpressionBehavior
Modely mají nastavení selectionExpressionBehavior , které umožňuje další kontrolu nad tím, jak se skupiny výpočtů v daném modelu chovají. Toto nastavení přijímá následující tři hodnoty:
- Automatické. Toto je výchozí hodnota a je stejná jako nevisual. Tím zajistíte, že existující modely nezmění chování. Modely nad úrovní budoucí kompatibility nastavenou na automatickou budou místo toho používat vizuální. V tu chvíli bude k dispozici oznámení.
-
Nevisuální. Pokud skupina výpočtů nedefinuje výraz multipleOrEmptySelection, vrátí
SELECTEDMEASURE(). Když je míra seskupována podle skupiny výpočtů, jsou hodnoty mezisoučtů skryty. -
Vizual. Pokud skupina výpočtů nedefinuje výraz multipleOrEmptySelection, skupina výpočtů vrátí
BLANK(). Při seskupení podle skupiny výpočtů se hodnoty mezisoučtu určují vyhodnocením vybrané míry v kontextu skupiny výpočtů.
Pomocí TMDL nastavte vlastnost v modelu:
createOrReplace
model Model
...
selectionExpressionBehavior: automatic | nonvisual | visual
...
Vícenásobný nebo prázdný výběr
Pokud se provede více výběrů ve stejné skupině výpočtů, skupina výpočtů vyhodnotí a vrátí výsledek multipleOrEmptySelectionExpression, pokud je definován. Pokud tento výraz nebyl definován, skupina výpočtů vrátí následující výsledek, pokud je nastavení selectionExpressionBehavior modelu nastaveno na automatické nebo nevisuální:
SELECTEDMEASURE()
Pokud je nastavení chování výběru výrazu modelu nastaveno na vizuální režim, vrátí se skupina výpočtů:
BLANK()
Podívejme se například na skupinu výpočtů s názvem MyCalcGroup, která má nakonfigurovaný multipleOrEmptySelectionExpression následujícím způsobem:
IF (
ISFILTERED ( 'MyCalcGroup' ),
"Filters: "
& CONCATENATEX (
FILTERS ( 'MyCalcGroup'[Name] ),
'MyCalcGroup'[Name],
", "
)
)
Teď si představte následující výběr ve skupině výpočtů:
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
)
}
V této části vybereme dvě položky ve skupině výpočtů " item1" a "item2". Jedná se o více výběrů, a proto se vyhodnocuje multipleOrEmptySelectionExpression a vrátí následující výsledek: "Filtry: item1, item2".
Dále proveďte následující výběr ve skupině výpočtů:
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item4" -- item4 does not exists
)
}
Toto je příklad prázdného výběru, protože položka4 v této skupině výpočtů neexistuje. Proto se vyhodnocuje multipleOrEmptySelectionExpression a vrátí následující výsledek: "Filters: ".
Bez výběru
NoSelectionExpression ve výpočetní skupině se použije, pokud tato skupina nebyla filtrována. Nejčastěji se používá k provádění výchozích akcí bez nutnosti, aby uživatel provedl akci, a přitom uživateli poskytuje flexibilitu k přepsání výchozí akce. Podívejme se například na automatický převod měny s americkým dolarem jako centrální základní měnou.
Skupinu výpočtů můžeme nastavit pomocí následujícího výrazu noSelectionExpression:
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] ) )
)
)
)
Pro tento výraz také nastavíme formátStringDefinition:
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
Pokud není vybrána žádná měna, všechny měny se podle potřeby automaticky převedou na konverzní měnu (americký dolar). Navíc můžete vybrat jinou měnu, která se má převést na tuto měnu, aniž byste museli přepínat položky výpočtu, jak byste museli udělat bez noSelectionExpression.
Priorita
Priorita je vlastnost definovaná pro skupinu výpočtů. Určuje pořadí, ve které jsou skupiny výpočtů sloučeny s podkladovou mírou při použití SELECTEDMEASURE() v položce výpočtu.
Příklad priority
Podívejme se na jednoduchý příklad. Tento model má míru se zadanou hodnotou 10 a dvě skupiny výpočtů, z nichž každá má jednu položku výpočtu. Na míru použijeme položky výpočtu obou výpočetních skupin. Takto ho nastavíme:
'Measure group'[Measure] = 10
První skupina výpočtů je 'Calc Group 1 (Precedence 100)' a položka výpočtu je 'Calc item (Plus 2)':
'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2
Druhá skupina výpočtů je 'Calc Group 2 (Precedence 200)' a položka výpočtu je 'Calc item (Times 2)':
'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2
Můžete vidět, že skupina výpočtů 1 má prioritu 100 a skupina výpočtů 2 má hodnotu priority 200.
Pomocí aplikace SQL Server Management Studio (SSMS) nebo externího nástroje s funkcemi XMLA pro čtení i zápis , jako je opensourcový tabulkový editor, můžete pomocí skriptů XMLA vytvořit skupiny výpočtů a nastavit hodnoty priority. Zde přidáme "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"
}
}
]
}
}
}
A tento skript přidá "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"
}
}
]
}
}
}
V Power BI Desktopu máme vizuál karty zobrazující míru a průřez pro každou skupinu výpočtů v zobrazení sestavy:
Když vybereme oba průřezy, musíme kombinovat výrazy DAX. Začneme s položkou výpočtu s nejvyšší prioritou 200 a potom nahradíme argument SELECTEDMEASURE() dalším nejvyšším, 100.
Výraz DAX pro výpočetní položku s nejvyšší prioritou je tedy:
SELECTEDMEASURE() * 2
Výraz DAX druhé nejvýše prioritní položky výpočtu je:
SELECTEDMEASURE() + 2
Teď se zkombinují tak, že nahradí část SELECTEDMEASURE() položky výpočtu nejvyšší priority další položkou výpočtu s nejvyšší prioritou, například takto:
( SELECTEDMEASURE() + 2 ) * 2
Pokud existují další položky výpočtu, pokračujeme, dokud se nedostaneme k podkladové míře. V tomto modelu jsou pouze dvě skupiny výpočtů, takže teď nahradíme SELECTEDMEASURE() samotnou mírou, například takto:
( ( [Measure] ) + 2 ) * 2
Vzhledem k tomu, že míra je Measure = 10, je to stejné jako:
( ( 10 ) + 2 ) * 2
Pokud nejsou k dispozici žádné další argumenty SELECTEDMEASURE(), vyhodnocuje se kombinovaný výraz DAX:
( ( 10 ) + 2 ) * 2 = 24
Když jsou v Power BI Desktopu obě skupiny výpočtů použity s filtrem, výstup hodnoty vypadá takto:
Mějte ale na paměti, že kombinace je vnořená takovým způsobem, že výstup nebude 10 + 2 * 2 = 14, jak vidíte tady:
U jednoduchých transformací je vyhodnocení od nižší po vyšší precedenci. Například k číslu 10 se přidá 2 a potom se vynásobí 2. V jazyce DAX existují funkce, jako je CALCULATE, které u vnitřních výrazů používají filtry nebo změny kontextu. V tomto případě vyšší priorita změní výraz s nižší prioritou.
Přednost také určuje, který řetězec dynamického formátu se použije u kombinovaného výrazu DAX pro každé opatření. Dynamický formátovací řetězec skupiny výpočtů s nejvyšší prioritou je jediný aplikovaný. Pokud má samotná míra řetězec dynamického formátu, považuje se za nižší prioritu pro jakoukoli skupinu výpočtů v modelu.
Priorita s příkladem průměrů
Podívejme se na jiný příklad s použitím stejného modelu, jak je znázorněno v příkladu časové inteligence popsaného dříve v tomto článku. Tentokrát ale přidáme také skupinu výpočtů Průměry . Skupina výpočtů Průměry obsahuje průměrné výpočty, které jsou nezávislé na tradičních časových měřítkech v tom, že nemění kontext filtru kalendářních dat – pouze v něm používají průměrné výpočty.
V tomto příkladu je definován denní průměrný výpočet. Výpočty, jako jsou průměrné barely ropy za den, jsou běžné v aplikacích ropy a plynu. Mezi další běžné obchodní příklady patří průměr prodeje obchodů v maloobchodě.
I když se tyto výpočty provádějí nezávisle na výpočtech časové inteligence, může být požadavek je zkombinovat. Uživatel může například chtít zobrazit barel ropy za den YTD, aby si zobrazil denní sazbu ropy od začátku roku do aktuálního data. V tomto scénáři by měla být priorita nastavena pro položky výpočtu.
Naše předpoklady jsou:
Název tabulky je Průměry.
Název sloupce je Průměrný výpočet.
Priorita je 10.
Položky výpočtu pro průměry
Bez průměru
SELECTEDMEASURE()
Denní průměr
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
Tady je příklad dotazu DAX a návratové tabulky:
Dotaz na průměry
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
)
Průměry vrácených dotazů
Následující tabulka ukazuje, jak se vypočítají hodnoty z března 2012.
| Název sloupce | Výpočet |
|---|---|
| Od začátku roku | Součet prodejů za leden, únor, březen 2012 = 495 364 + 506 994 + 373 483 |
| Denní průměr | Prodej za březen 2012 dělený počtem dní v březnu = 373 483 / 31 |
| Denní průměr YTD | Od začátku roku pro březen 2012 děleno počtem dnů v lednu, únoru a březnu = 1 375 841 / (31 + 29 + 31) |
Tady je definice položky YTD výpočtu použitá s prioritou 20.
CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))
Tady je denní průměr, použitý s prioritou 10.
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
Vzhledem k tomu, že priorita výpočtové skupiny časově inteligence je vyšší než u výpočtové skupiny Průměry, používá se v co nejširším rozsahu. Výpočet denního průměru YTD aplikuje YTD jak na čitatel, tak na jmenovatele (počet dnů) denního průměrného výpočtu.
Toto je ekvivalentem následujícího výrazu:
CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))
Ne tento výraz:
DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))
Boční rekurze
V příkladu časové řady výše odkazují některé položky výpočtu na jiné ve stejné skupině výpočtů. Tomu se říká rekurze bočních cest. Například YOY% odkazuje na YOY i PY.
DIVIDE(
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="YOY"
),
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="PY"
)
)
V tomto případě se oba výrazy vyhodnocují samostatně, protože používají různé příkazy calculate. Jiné typy rekurze nejsou podporovány.
Jedna položka výpočtu v kontextu filtru
V našem příkladu časové inteligence má položka výpočtu PY YTD jeden počítaný výraz:
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "YTD"
)
Argument YTD pro funkci CALCULATE přepíše kontext filtru, aby znovu použil logiku, která je již definovaná v položce YTD výpočtu. V jednom vyhodnocení není možné použít PY i YTD. Skupiny výpočtů se použijí pouze v případě, že jedna položka výpočtu ze skupiny výpočtů je v kontextu filtru.
Objednávání
Ve výchozím nastavení se při umístění sloupce ze skupiny výpočtů do sestavy položky výpočtu řadí abecedně podle názvu. Pořadí, ve kterém se položky výpočtu zobrazují v sestavě, lze změnit zadáním vlastnosti Ordinal. Určení pořadí položek výpočtu pomocí vlastnosti Pořadové číslo nezmění prioritu, pořadí, ve kterém se vyhodnocují položky výpočtu. Nezmění také pořadí, ve kterém se položky výpočtu zobrazují v Průzkumníku tabulkových modelů.
Chcete-li zadat pořadovou vlastnost pro položky výpočtu, je nutné přidat druhý sloupec do skupiny výpočtů. Na rozdíl od výchozího sloupce, ve kterém je datový typ Text, má druhý sloupec použitý pro řazení položek výpočtu datový typ Celé číslo. Jediným účelem tohoto sloupce je zadat číselné pořadí, ve kterém se zobrazí položky výpočtu ve skupině výpočtů. Vzhledem k tomu, že tento sloupec v sestavě neposkytuje žádnou hodnotu, je nejlepší nastavit vlastnost Hidden na Hodnotu True.
Po přidání druhého sloupce do skupiny výpočtů můžete zadat hodnotu řadové vlastnosti pro položky výpočtu, které chcete uspořádat.
Další informace najdete v tématu Pořadí položek výpočtu.
Úvahy
Model hodnotí změnu datového typu na variantu
Jakmile se do sémantického modelu přidá skupina výpočtů, sestavy Power BI budou pro všechny míry používat datový typ varianty . Pokud jsou následně všechny skupiny výpočtů z modelu odebrány, budou míry znovu vráceny do jejich původních datových typů.
To může způsobit , že řetězce dynamického formátu pro míry používající míru pro opakované použití zobrazí chybu. Pomocí funkce FORMAT DAX vynutíte, aby se míra varianty znovu rozpoznala jako datový typ řetězce.
FORMAT([Dynamic format string], "")
Případně můžete výraz znovu použít pro řetězce dynamického formátu s uživatelem definovanou funkcí DAX .
Chyba vizualizace při použití matematické operace na nečíselné hodnotě
Nečíselné míry se běžně používají pro dynamické názvy ve vizuálech a v řetězcích dynamického formátu pro míry. Chyba Nelze převést hodnotu ... z typu Text na typ Číselný se zobrazuje u ovlivněných vizuálů. Výraz položky výpočtu se tomu může vyhnout přidáním kontroly, která před použitím matematické operace zjistí, jestli je míra číselná. V položce výpočtu použijte ISNUMERIC .
Calculation item safe =
IF (
// Check the measure is numeric
ISNUMERIC( SELECTEDMEASURE() ),
SELECTEDMEASURE() * 2,
// Don't apply the calculation on a non-numeric measure
SELECTEDMEASURE()
)
Omezení
Zabezpečení na úrovni objektů (OLS) definované v tabulkách skupin výpočtů se nepodporuje. OLS je však možné definovat v jiných tabulkách ve stejném modelu. Pokud položka výpočtu odkazuje na zabezpečený objekt OLS, vrátí se obecná chyba.
Zabezpečení na úrovni řádků (RLS) se nepodporuje. Definujte RLS u tabulek ve stejném modelu, ale ne u skupin výpočtů samotných (přímo nebo nepřímo).
Výrazy řádků podrobností nejsou podporovány u skupin výpočtů.
Inteligentní prvky vyprávění v Power BI nejsou ve skupinách výpočtů podporovány.
Implicitní agregace sloupců v Power BI nejsou podporované pro modely se skupinami výpočtů. Pokud je vlastnost DiscourageImplicitMeasures nastavená na false (výchozí), zobrazí se možnosti agregace, ale nelze je použít. Pokud je hodnota DiscourageImplicitMeasures nastavená na hodnotu true, možnosti agregace se nezobrazí.
Při vytváření sestav Power BI pomocí Živého připojení se dynamické formátovací řetězce nepoužijí na míry na úrovni sestav.
Viz také
Vytváření skupin výpočtů v Power BIzobrazení TMDLzobrazení dotazu DAXDynamické formátování řetězců pro opatřeníPrůzkumník modelů v zobrazení modelu Power BIDAX v tabulkových modelech
Referenční dokumentace jazyka DAX