Přechod kontextu

Dokončeno

Co se stane, když se míra nebo výraz míry vyhodnotí v kontextu řádku? K tomuto scénáři může dojít ve vzorci počítaného sloupce nebo při vyhodnocení výrazu pomocí funkce iterátoru.

V následujícím příkladu přidáte do tabulky Customer počítaný sloupec, který bude klasifikovat zákazníky do věrnostní třídy. Scénář je jednoduchý: Pokud výnosy vytvořené zákazníkem jsou menší než 2500 USD, zákazník je klasifikován jako Nízký; jinak jsou klasifikovány jako vysoké.

Customer Segment =
VAR CustomerRevenue = SUM(Sales[Sales Amount])
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Na stránce 4 sestavy přidejte sloupec Customer Segment (Segment zákazníků) jako legendu výsečového grafu.

Obrázek ukazuje vizuál výsečového grafu s názvem Revenue by Customer Segment (Výnosy podle segmentu zákazníků). Obsahuje pouze jeden segment: High, což představuje 100 % dat.

Všimněte si, že existuje pouze jedna hodnota Customer Segment (Segment zákazníků). Důvodem je to, že vzorec počítaného sloupce vede k nesprávnému výsledku: Každý zákazník má přiřazenou hodnotu High, protože výraz SUM(Sales[Sales Amount]) není vyhodnocený v kontextu filtru. V důsledku toho se každý zákazník vyhodnotí na základě součtu každé hodnoty sloupce Sales Amount (Částka prodeje) v tabulce Sales (Prodej).

Pokud chcete vynutit vyhodnocení vzorce SUM(Sales[Sales Amount])pro všechny zákazníky, musí proběhnout přechod kontextu, který pro filtrování kontextu použije hodnoty sloupců v kontextu řádku. Tento přechod můžete provést pomocí CALCULATE funkce bez předání výrazů filtru.

Upravte definici počítaného sloupce tak, aby vrátila správný výsledek.

Customer Segment =
VAR CustomerRevenue = CALCULATE(SUM(Sales[Sales Amount]))
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Ve vizuálu výsečového grafu přidejte nový počítaný sloupec do pole Legenda a ověřte, že se teď zobrazují dva výsečové segmenty.

Obrázek ukazuje vizuál výsečového grafu s názvem Revenue by Customer Segment (Výnosy podle segmentu zákazníků). Existují dva segmenty: High (Velký) a Low (Malý). High představuje 76 % dat a Low 24 %.

V tomto případě CALCULATE funkce použije kontextové hodnoty řádku jako filtry, označované jako přechod kontextu. Pokud ale tabulka obsahuje jedinečný sloupec, proces funguje mírně odlišně. Pokud tabulka obsahuje jedinečný sloupec, stačí, když filtr použijete pouze u tohoto sloupce, aby k přechodu došlo. V tomto případě Power BI použije filtr u sloupce CustomerKey pro hodnotu v kontextu řádku.

Pokud odkazujete na míry ve výrazu, který se nevyhodnocuje v kontextu řádku, je přechod kontextu automatický. Proto do funkce nemusíte předávat odkazy na CALCULATE míry.

Upravte definici počítaného sloupce, která odkazuje na míru Revenue (Výnosy), a všimněte si, že i nadále vrací správný výsledek.

Customer Segment = 
VAR CustomerRevenue = [Revenue]
RETURN
    IF(CustomerRevenue < 2500, "Low", "High")

Nyní můžete dokončit vzorec míry Sales Commission (Provize z prodeje). Pokud chcete získat součet, musíte použít funkci iterátoru a provést iteraci ve všech oblastech v kontextu filtru. Výraz funkce iterátoru CALCULATE musí použít funkci k převodu kontextu řádku do kontextu filtru. Všimněte si, že už nemusí testovat, jestli je jedna hodnota sloupce Country (Země) v tabulce Sales Territory (Prodejní oblast ) v kontextu filtru, protože je známo, že filtruje podle jedné země (protože iteruje oblasti v kontextu filtru a oblast patří pouze jedné zemi).

Přepněte na stránku 3 sestavy a upravte definici míry Sales Commission tak, aby používala funkci iterátoru SUMX :

Sales Commission =
SUMX(
    VALUES('Sales Territory'[Region]),
    CALCULATE(
        [Revenue]
        * IF(
            VALUES('Sales Territory'[Country]) = "United States",
            0.15,
            0.1
        )
    )
)

Vizuál tabulky teď zobrazí celkovou provizi z prodeje pro všechny oblasti.

Obrázek ukazuje vizuál tabulky se třemi sloupci: Region (Oblast), Revenue (Výnosy) a Sales Commission (Provize z prodeje). Zobrazují se řádky pro deset oblastí a celkový součet. U celkové provize z prodeje se teď nachází součet.