DAX - Jak vyhledat duplicitní řádky v tabulce

Úvodní obrázek

Při tvorbě Tabulárního modelu se můžeme setkat se situací, kdy se vyskytují duplicitní záznamy v tabulkách, ve kterých by měly být pouze záznamy jedinečné. Odstranit duplicitní záznamy v tabulkách můžeme více různými způsoby, ať už v Power Query nebo přímo ve zdroji, například na SQL Serveru. V tomto příspěvku si ukážeme velice jednoduchý způsob, jak můžeme vyhledat duplicitní řádky v tabulce, která je již nahraná v Tabulárním modelu, například v Power BI, Excelu nebo SSAS.

Vyhledání duplicit v tabulce pomocí DAX

V příkladu můžeme použít dvě tabulky z cvičné databáze AdwentureWorks, tabulku 'Sales' a tabulku 'Products', která je v tomto příkladu mírně upravena tak, aby obsahovala duplicitní záznamy. Tabulka s produkty by měla obvykle obsahovat jedinečné záznamy. To znamená, že každý produkt by se měl vyskytovat v této tabulce pouze jednou. V případě, že pracujeme s tabulkou produktů, která obsahuje i různé verze jednotlivých produktů, měla by mít každá verze stejného produktu jedinečný identifikátor. Tabulka produktů je tedy typický příklad tabulky, která je obvykle ve vztahu ONE-TO-MANY na straně ONE s tabulkou 'Sales', která obsahuje záznamy o jednotlivých prodejích. Pokud nám nejde mezi těmito tabulkami vytvořit relace ONE-TO-MANY, důvodem může být právě duplicitní záznam u některého z produktů. Taková situace je zobrazena na následujícím obrázku, kdy je mezi tabulkami 'Products' a 'Sales' vazba MANY-TO-MANY.

DAX - Vyhledání duplicitních řádků v tabulce 2

Vyhledat duplicitní záznam v tabulce pomocí jazyka DAX je velice jednoduchá úloha. Stačí si vytvořit v tabulce nový počítaný sloupec, ve kterém si spočítáme, kolikrát se každý jeden řádek vyskytuje v uvažované tabulce. V počítaném sloupci tedy budeme sčítat počet řádků ve stejné tabulce pomocí funkce COUNTROWS(). Pro tento výpočet pak vytvoříme filtr, který se bude skládat ze všech hodnot ze všech sloupců v aktuálním řádku tabulky, ve kterém bude výpočet vyhodnocen. Díky principu změny kontextu řádku na kontext filtru je takovýto výpočet velice jednoduchý.

Počítaný sloupec:

Počet výskytů =
CALCULATE
(
    COUNTROWS(Products)
)

Výraz COUNTROWS(Products) je vyhodnocen v kontextu filtru každého řádku, který je vytvořen funkcí CALCULATE(), díky změně kontextu řádku na kontext filtru. Pokud je výsledkem výše uvedeného výpočtu hodnota 1, znamená to, že aktuální záznam je v celé tabulce jedinečný. Pokud je v konkrétním řádku výsledná hodnota větší než 1, stejný záznam se v tabulce vyskytuje opakovaně. Tabulku si tedy můžeme seřadit sestupně podle nového počítaného sloupce, a snadno tak identifikovat duplicitní záznamy.

DAX - Vyhledání duplicitních řádků v tabulce 3

Na obrázku výše můžeme vidět, že v tabulce 'Products' je jeden záznam, který se v tabulce vyskytuje dvakrát. Pokud jeden z duplicitních řádků odstraníme, například v Power Query, můžeme mezi tabulkami vytvořit požadovanou relaci ONE-TO-MANY.

DAX - Vyhledání duplicitních řádků v tabulce 4

Pokud bychom chtěli zjistit počet stejných záznamů v konkrétních sloupcích, můžeme upravit filtr ve funkci CALCULATE(), například pomocí funkce ALLEXCEPT(). Následující výraz bude vracet v každém řádku tabulky počet záznamů se stejným názvem produktu.

Počítaný sloupec:

Počet verzí produktu =
CALCULATE
(
    COUNTROWS(Products),
    ALLEXCEPT(Products, Products[Product])
)

Pomocí funkce ALLEXCEPT() odstraníme filtry vytvořené změnou kontextu řádku na kontext filtru, kromě filtrů ze sloupce uvedeného ve druhém argumentu funkce, tedy sloupce s názvy produktů. Výsledkem nového počítaného sloupce je tedy počet produktů se stejným názvem.

DAX - Vyhledání duplicitních řádků v tabulce 5

Jak můžeme vidět na obrázku výše, v tabulce je poměrně hodně produktů se stejným názvem, a jednotlivé verze produktů se liší buď prodejní cenou, nebo náklady na výrobu.

Shrnutí

V příkladu uvedeném v tomto příspěvku bylo možné vidět, jak lze jednoduše vyhledat duplicitní záznamy v tabulkách nebo v jednotlivých sloupcích pomocí DAX vzorce. Pokud chceme odstranit duplicitní záznamy z tabulky, můžeme použít například nástroj Power Query, nebo opravit tabulky přímo ve zdroji, ze kterého data do Tabulárního modelu čerpáme.

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

Komentáře