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, v Power Pivot v Excelu nebo SSAS Tabular.
K tomuto tématu je k dispozici také video:
V následující části příspěvku si ukážeme jeden z možných způsobů, jak vyhledat duplicity v tabulkách nahraných v Power BI modelu.
Vyhledání duplicit v tabulce pomocí DAX
V příkladu budeme pracovat s tabulkou 'Produkty_duplicity', která je oproti originální verzi tabulky 'Product' ze cvičné databáze AdwentureWorks mírně upravena pro účely tohoto příspěvku. Tento upravený soubor je k dispozici ke stažení níže pod tímto příspěvkem.
Jak je možné vidět na obrázku výše, mezi tabulkou 'Produkty_duplicity' a tabulkou 'Sales' je relace M:N, protože tabulka 'Produkty_duplicity' obsahuje duplicitní řádky které znemožňují vytvoření standardní relace 1:N.Pokud bychom chtěli vyhledat ty řádky, které se v tabulce 'Produkty_duplicity' opakují, můžeme použít přímo jazyk DAX a počítaný sloupec v této tabulce. V novém sloupci si jednoduše spočítáme, kolikrát se aktuální řádek vyskytuje v použité 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:
Výraz COUNTROWS(Produkty_duplicity) je vyhodnocen v kontextu filtru každého řádku, který je vytvořen funkcí CALCULATE(), a to 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.
Na obrázku výše můžeme vidět, že v tabulce 'Produkty_duplicity' je jeden stejný řádek dvakrát. Pokud jeden z duplicitních řádků odstraníme, například v Power Query, můžeme mezi tabulkami vytvořit požadovanou relaci 1:M.
Jak vyhledat opakující se hodnoty v jednom sloupci
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:
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, v našem příkladu kromě sloupce s názvy produktů. Výsledkem nového počítaného sloupce je tedy počet výskytů produktů se stejným názvem.
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.
Komentáře
Okomentovat