Zpracování chyb
Podobně jako má Excel a jazyk IFERROR
DAX funkci, má Power Query vlastní syntaxi pro testování a zachycení chyb.
Jak je uvedeno v článku o řešení chyb v Power Query, můžou se chyby zobrazovat na úrovni kroku nebo buňky. Tento článek se zaměřuje na to, jak zachytit a spravovat chyby na základě vlastní konkrétní logiky.
Poznámka:
K předvedení tohoto konceptu tento článek používá jako zdroj dat excelový sešit. Zde uvedené koncepty platí pro všechny hodnoty v Power Query, nejen pro ty, které pocházejí z excelového sešitu.
Ukázkový zdroj dat pro tuto ukázku je excelový sešit s následující tabulkou.
Tato tabulka z excelového sešitu obsahuje chyby Excelu, například #NULL!, #REF! a #DIV/0! ve sloupci Standardní sazba . Při importu této tabulky do editoru Power Query ukazuje následující obrázek, jak vypadá.
Všimněte si, jak se chyby z excelového sešitu zobrazují s [Error]
hodnotou v jednotlivých buňkách.
V tomto článku se dozvíte, jak nahradit chybu jinou hodnotou. Kromě toho se dozvíte, jak zachytit chybu a použít ji pro vlastní konkrétní logiku.
Poskytnutí alternativní hodnoty při hledání chyb
V tomto případě je cílem vytvořit v ukázkovém zdroji dat nový sloupec Konečná sazba , který používá hodnoty ze sloupce Standardní sazba . Pokud dojde k nějakým chybám, použije se hodnota z odpovídajícího sloupce Zvláštní sazba .
Pokud chcete vytvořit nový vlastní sloupec, přejděte do nabídky Přidat sloupec a vyberte Vlastní sloupec. V okně Vlastní sloupec zadejte vzorec try [Standard Rate] otherwise [Special Rate]
. Pojmenujte tento nový sloupec Konečná sazba.
Tento vzorec se pokusí vyhodnotit sloupec Standardní sazba a vypíše jeho hodnotu, pokud se nenašly žádné chyby. Pokud jsou ve sloupci Standardní sazba nalezeny chyby, pak výstupem je hodnota definovaná za otherwise
příkazem, což je v tomto případě sloupec Zvláštní sazba .
Po přidání správných datových typů do všech sloupců v tabulce ukazuje následující obrázek, jak vypadá konečná tabulka.
Poznámka:
Jako alternativní přístup můžete také zadat vzorec try [Standard Rate] catch ()=> [Special Rate]
, který je ekvivalentní předchozímu vzorci, ale pomocí klíčového slova catch s funkcí, která nevyžaduje žádné parametry.
Klíčové catch
slovo bylo představeno v Power Query v květnu 2022.
Zadejte vlastní logiku podmíněné chyby.
Pomocí stejného ukázkového zdroje dat jako v předchozí části je novým cílem vytvořit nový sloupec pro konečnou sazbu. Pokud hodnota ze standardní sazby existuje, použije se tato hodnota. V opačném případě se použije hodnota ze sloupce Zvláštní sazba s výjimkou řádků s libovolnou #REF!
chybou.
Poznámka:
Jediným účelem vyloučení #REF!
chyby je demonstrační účely. S koncepty, které jsou uvedené v tomto článku, můžete cílit na libovolná pole podle vašeho výběru ze záznamu chyby.
Když vyberete některou z prázdných znaků vedle chybové hodnoty, zobrazí se podokno podrobností v dolní části obrazovky. Podokno podrobností obsahuje důvod DataFormat.Error
chyby i chybovou zprávu: Invalid cell value '#REF!'
Můžete vybrat jenom jednu buňku najednou, takže můžete efektivně zkoumat pouze chybové součásti jedné chybové hodnoty najednou. V tomto okamžiku vytvoříte nový vlastní sloupec a použijete try
výraz.
Použití try
s vlastní logikou
Pokud chcete vytvořit nový vlastní sloupec, přejděte do nabídky Přidat sloupec a vyberte Vlastní sloupec. V okně Vlastní sloupec zadejte vzorec try [Standard Rate]
. Pojmenujte tento nový sloupec Všechny chyby.
Výraz try
převede hodnoty a chyby na hodnotu záznamu, která označuje, jestli try
výraz zpracoval chybu nebo ne, a správnou hodnotu nebo chybový záznam.
Tento nově vytvořený sloupec můžete rozbalit s hodnotami záznamů a podívat se na dostupná pole, která se mají rozbalit, výběrem ikony vedle záhlaví sloupce.
Tato operace zveřejňuje tři nová pole:
- Všechny chyby.HasError – zobrazuje, zda hodnota ze sloupce Standardní sazba měla chybu, nebo ne.
- Všechny chyby.Value – pokud hodnota ze sloupce Standardní sazba neměla žádnou chybu, zobrazí tento sloupec hodnotu ze sloupce Standardní sazba . Pro hodnoty s chybami toto pole není k dispozici a během operace rozbalení má
null
tento sloupec hodnoty. - Všechny chyby.Error – pokud hodnota ze sloupce Standardní sazba měla chybu, zobrazí tento sloupec záznam chyby pro hodnotu ze sloupce Standardní sazba . Pro hodnoty bez chyb není toto pole k dispozici a během operace rozbalení má
null
tento sloupec hodnoty.
Pro další šetření můžete rozbalit sloupec Všechny chyby.Error a získat tři komponenty záznamu chyby:
- Důvod chyby
- Chybová zpráva
- Podrobnosti o chybě
Po dokončení operace rozbalení se v poli Všechny chyby.Error.Message zobrazí konkrétní chybová zpráva, která vám přesně řekne, jakou chybu Excelu má každá buňka. Chybová zpráva je odvozena z pole Chybová zpráva záznamu chyby.
Teď s každou chybovou zprávou v novém sloupci můžete vytvořit nový podmíněný sloupec s názvem Konečná sazba a následující klauzule:
- Pokud se hodnota ve sloupci All Errors.Errors.Message rovná
null
, pak výstup je hodnota ze sloupce Standardní sazba . - Jinak platí, že pokud se hodnota ve sloupci All Errors.Errors.Message nerovná
Invalid cell value '#REF!'.
, je výstup hodnotou ze sloupce Zvláštní sazba . - Else, null.
Po uložení pouze sloupců Account, Standard Rate, Special Rate a Final Rate (Sazba) a Final Rate (Konečná sazba) a přidání správného datového typu pro každý sloupec ukazuje následující obrázek, jak vypadá konečná tabulka.
Použití try
a catch
s vlastní logikou
Alternativně můžete také vytvořit nový vlastní sloupec pomocí klíčových try
slov a catch
klíčových slov.
try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null