Čtení metadat modelu pomocí DAX INFO funkcí v Power BI

Úvodní obrázek

V jazyku DAX jsou od roku 2024 k dispozici informativní funkce, které sloučí k načítání metadat modelu. Všechny INFO funkce vrací tabulky, se kterými ale můžeme dále manipulovat pomocí standardních DAX funkcí. V tomto příspěvku si na jednoduchých příkladech ukážeme, jak se INFO funkce používají a k čemu mohou být dobré.

Všechny INFO funkce vrací tabulky a můžeme je používat v kombinaci s ostatními DAX funkcemi. INFO funkce se primárně používají při psaní DAX dotazů, protože až na čtyři výjimky není jejich použití v měřítku, v počítaném sloupci nebo v počítané tabulce oficiálně podporováno.

Pokud na kartě Zobrazení dotazů DAX napíšeme za klíčové slovo EVALUATE slovo INFO, uvidíme v kontextové nabídce všechny INFO funkce seřazené abecedně.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI

INFO funkce, které můžeme bezpečně používat také v počítaném sloupci, v měřítku anebo v počítané tabulce, mají v názvu na druhém místě za klíčovým slovem INFO slovo VIEW.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 2

Jak můžeme vidět na obrázku výše, funkce INFO.VIEW jsou čtyři. Jak z názvu těchto funkcí vyplývá, jedná se o funkce, které vrací informace o tabulkách, sloupcích, relacích a měřítcích. Tyto funkce vrací, oproti všem ostatním funkcím, srozumitelněji strukturované informace, které můžeme přímo použít pro dokumentaci aktuálního modelu, například pomocí počítaných tabulek.

Zbylé INFO funkce pak vrací někdy detailnější informace, ale obvykle obsahují místo názvů některých atributů pouze ID hodnoty těchto atributů, a jejich názvy získáme až při propojení s ostatními INFO funkcemi, například pomocí DAX funkce NATURALINNERJOIN().

V následující části příspěvku si ukážeme příklady použití INFO funkcí v rámci DAX dotazů.

Příklady použití DAX INFO funkcí v Power BI

V následujících příkladech budeme pracovat s modelem Adwenture Works 2020, který navíc obsahuje výpočty z článku Analýza chování zákazníků. Všechny DAX dotazy tedy budou vracet metadata z tohoto modelu, nicméně stejné dotazy si čtenář může zkopírovat a spustit ve vlastním Power BI souboru a získat tak aktuální informace o svém modelu. 

Zobrazené výsledky DAX dotazů mohou být pro účely tohoto příspěvku zkráceny. Kompletní výsledky budou k dispozici v přiloženém souboru po spuštění jednotlivých DAX dotazů.

V prvním DAX dotazu bude použita funkce INFO.VIEW.MEASURES(), kterou můžeme používat také v objektech modelu a můžeme ji tak použít například pro dokumentaci měřítek v počítané tabulce.

DAX dotaz:

EVALUATE
SELECTCOLUMNS
(
    INFO.VIEW.MEASURES(),
    "Název", [Name],
    "Tabulka", [Table],
    "Datový typ", [DataType],
    "Výpočet", [Expression]
)

Výsledkem výše uvedeného DAX dotazu bude tabulka se čtyřmi sloupci.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 3

Výsledná tabulka obsahuje jeden řádek pro každé měřítko vytvořené v modelu. V prvním sloupci jsou pak názvy měřítek, dále tabulka, do které měřítko patří, datový typ měřítka a v posledním sloupci definice měřítka.

V dalším příkladu budeme pracovat s funkcí INFO.CALCDEPENDENCY(), která obsahuje informace o závislostech mezi jednotlivými objekty v modelu. Následující DAX dotaz bude vracet pouze ta měřítka, která jsou použita v jiných DAX výpočtech, ať už se jedná o počítané sloupce, počítané tabulky nebo další měřítka.

DAX dotaz:

// měřítka použita v jiných výpočtech
// nezaměňovat s měřítky použitými ve vizuálech nebo v jiných objektech reportu
EVALUATE
SELECTCOLUMNS
(
    FILTER
    (
        INFO.CALCDEPENDENCY(),
        [REFERENCED_OBJECT_TYPE] = "MEASURE"
    ),
    "Měřítko", [REFERENCED_OBJECT],
    "Definice měřítka", [REFERENCED_EXPRESSION],
    "Použito v (typ)", [OBJECT_TYPE],
    "Použito v (název)", [OBJECT]
)

Výsledkem je tabulka se čtyřmi sloupci.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 4

Výsledná tabulka obsahuje měřítka a objekty, ve kterých je dané měřítko použito jako součást výpočtu.

Podobným způsobem si můžeme nechat vypsat měřítka, která naopak nejsou použita v jiných objektech modelu. Zde je nutné upozornit, že objekty modelu nelze zaměňovat s objekty reportů. Níže uvedený DAX dotaz bude vracet měřítka která nejsou použita v počítaných sloupcích, počítaných tabulkách nebo v jiných měřítcích. Tato měřítka ale mohou být použita přímo ve vizuálech nebo v jiných objektech reportů, a nelze proto říci že tato měřítka nejsou použita vůbec a mohou být odstraněna z modelu.

DAX dotaz:

// měřítka která nejsou použita v jiných výpočtech (měřítka, počítané sloupce, počítané tabulky)
// měřítka ale mohou být použita přímo ve vizuálech, nebo nepřímo ve vizuálech
// například pro nastavení podmíněného formátu, filtrů atd.
// nejde tedy říct že tato měřítka nejsou použita a můžeme je odstranit z modelu
// protože tato měřítka mohou být použita ve vizuálech nebo jiných objektech reportu

EVALUATE
FILTER
(
    SELECTCOLUMNS
    (
        INFO.MEASURES(),
        "Měřítko",[Name],
        "Výpočet", [Expression]
    ),
    NOT [Měřítko] IN
    SELECTCOLUMNS
    (
        FILTER
        (
            INFO.CALCDEPENDENCY(),
            [REFERENCED_OBJECT_TYPE] = "MEASURE"
        ),
        [REFERENCED_OBJECT]
    )
)

Výsledek výše uvedeného DAX dotazu vypadá v použitém modelu následovně.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 5

Další DAX dotaz pak bude vracet seznam tabulek nahraných v modelu.

DAX dotaz:

// tabulky
EVALUATE
SELECTCOLUMNS
(
    INFO.VIEW.TABLES(),
    "Název", [Name],
    "Typ úložiště", [StorageMode],
    "Definice počítané tabulky", [Expression]
)

Pokud je tabulka v modelu počítaná tabulka, ve třetím sloupci výsledného DAX dotazu uvidíme definici této počítané tabulky.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 6

Pokud bychom chtěli, v například v rámci dokumentace modelu, získat pouze informace o počítaných tabulkách, můžeme použít následující DAX dotaz.

DAX dotaz:

// počítané tabulky

EVALUATE
SELECTCOLUMNS
(
    FILTER
    (
        INFO.VIEW.TABLES(),
        [Expression] <> ""
    ),
    "Název", [Name],
    "Typ úložiště", [StorageMode],
    "Definice počítané tabulky", [Expression]
)

Výsledkem DAX dotazu je následující tabulka.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 7

Další INFO funkce z kategorie VIEW, tedy INFO funkce, které můžeme používat také v počítaných tabulkách nebo v měřítcích a počítaných sloupcích, je funkce INFO.VIEW.RELATIONSHIPS().

DAX dotaz:

// relace

EVALUATE
SELECTCOLUMNS
(
    INFO.VIEW.RELATIONSHIPS(),
    "Relace", [Relationship],
    "Kardinalita", [FromCardinality] & "-To-" & [ToCardinality],
    "Směr filtrace", [CrossFilteringBehavior],
    "Je aktivní", [IsActive]
)

Výsledek výše uvedeného DAX dotazu vypadá v použitém modelu následovně.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 8

Výsledná tabulka obsahuje pět řádku, jeden řádek pro každou relaci. Zajímavostí může být, že v modelu jsou ve skutečnosti pouze čtyři relace. Důvod, proč vidíme ve výsledné tabulce relací pět, je relace 1:1 mezi tabulkou 'Sales' a tabulkou 'Sales Order'. 

Každá relace 1:1 je totiž DAX Enginem zpracována jako dvě relace 1:M, jedna relace v každém směru. Proto například nemůžeme mezi tabulkami ve vztahu 1:1 změnit směr filtrace z obousměrné na jednosměrnou, pokud tedy nezměníme samotnou kardinalitu relace.

Pro zjištění informací o sloupcích nahraných v modelu můžeme použít funkci INFO.VIEW.COLUMNS() například následujícím způsobem.

DAX dotaz:

// sloupce

EVALUATE
SELECTCOLUMNS
(
    INFO.VIEW.COLUMNS(),
    "Název", [Name],
    "Tabulka", [Table],
    "Datový typ", [DataType],
    "Typ sloupce", [Type]
)

Výsledkem výše uvedeného DAX dotazu je tabulka s následující strukturou.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 9

Výsledná tabulka obsahuje jeden řádek pro každý sloupec nahraný v modelu. Zajímavostí může být sloupec typu RowNumber, který můžeme najít v každé tabulce. Jedná se o sloupec, který obsahuje jedinečný identifikátor řádků tabulky, a který si Vertipaq Engine vytvoří pro interní účely při importu dat do modelu. Tento sloupec nemůžeme používat v DAX výpočtech.

Pokud bychom chtěli, například pro účely dokumentace, vypsat pouze počítané sloupce, můžeme použít následující DAX dotaz.

DAX dotaz:

// počítané sloupce

EVALUATE
SELECTCOLUMNS
(
    FILTER
    (
        INFO.VIEW.COLUMNS(),
        [Type] = "Calculated"
    ),
    "Název", [Name],
    "Tabulka", [Table],
    "Typ sloupce", [Type],
    "Výpočet", [Expression]
)

Výsledkem bude tabulka s jedním řádkem pro každý počítaný sloupec.

Čtení metadat modelu pomocí DAX INFO funkcí v Power BI 10

Ukázky DAX dotazů v tomto příspěvku zdaleka nezachycují rozsah informací, které můžeme o modelu získat prostřednictvím INFO funkcí. Tyto funkce navíc můžeme kombinovat s ostatními DAX funkcemi, díky čemuž můžeme jednoduše filtrovat nebo propojovat jednotlivé tabulky, které jsou výsledkem INFO funkcí.

Oficiální Microsoft dokumentace INFO funkcí:
https://learn.microsoft.com/cs-cz/dax/info-functions-dax

Stáhnout soubor s řešením.
č. 119

Komentáře