Hibakezelés
Az Excel és a DAX nyelv IFERROR
függvényéhez hasonlóan a Power Query saját szintaxisával is rendelkezik a hibák teszteléséhez és felismeréséhez.
A Power Query hibáinak kezeléséről szóló cikkben leírtak szerint a hibák a lépés vagy a cella szintjén is megjelenhetnek. Ez a cikk a hibák saját logikán alapuló fogási és kezelési módjával foglalkozik.
Megjegyzés
Ennek a fogalomnak a bemutatásához ez a cikk egy Excel-munkafüzetet használ adatforrásként. Az itt bemutatott fogalmak a Power Query összes értékére vonatkoznak, és nem csak az Excel-munkafüzetekből származó értékekre.
A bemutató mintaadatforrása egy Excel-munkafüzet, amely az alábbi táblázatot tartalmazza.
Ez az Excel-munkafüzet táblázata Excel-hibákat tartalmaz, például #NULL!, #REF!, és #DIV/0! hibát a Standard ráta oszlopban. Amikor importálja ezt a táblázatot a Power Query-szerkesztőbe, az alábbi képen látható, hogyan néz ki.
Figyelje meg, hogyan jelennek meg az Excel-munkafüzet hibái az [Error]
egyes cellákban lévő értékkel.
Ebből a cikkből megtudhatja, hogyan cserélhet le egy hibát egy másik értékre. Emellett azt is megtanulhatja, hogyan foghat el egy hibát, és hogyan használhatja a saját logikájához.
Ebben az esetben a cél egy új Végső sebesség oszlop létrehozása a mintaadatforrásban, amely a Standard ráta oszlop értékeit használja. Ha bármilyen hiba történt, akkor a megfelelő Speciális kamatláb oszlop értékét használja.
Új egyéni oszlop létrehozásához nyissa meg az Oszlop hozzáadása menüt, és válassza az Egyéni oszlop lehetőséget. Az Egyéni oszlop ablakban adja meg a képletettry [Standard Rate] otherwise [Special Rate]
. Nevezze el ezt az új oszlopot végső sebességnek.
Ez a képlet megpróbálja kiértékelni a Standard Rate oszlopot, és ha nem talál hibát, kimeneteli az értékét. Ha a Standard ráta oszlopban hibák találhatók, akkor a kimenet az utasítás után otherwise
definiált érték, amely ebben az esetben a Speciális díj oszlop.
Miután hozzáadta a megfelelő adattípusokat a táblázat összes oszlopához, az alábbi képen látható, hogyan néz ki az utolsó tábla.
Megjegyzés
Alternatív módszerként megadhatja a képletet try [Standard Rate] catch ()=> [Special Rate]
is, amely egyenértékű az előző képlettel, de a catch kulcsszót egy olyan függvénnyel használja, amely nem igényel paramétereket.
A catch
kulcsszót 2022 májusában vezették be a Power Querybe.
Ugyanazt a mintaadatforrást használja, mint az előző szakaszban, az új cél egy új oszlop létrehozása a végső sebességhez. Ha a standard kamatláb értéke létezik, akkor a rendszer ezt az értéket használja. Ellenkező esetben a Speciális díj oszlop értékét használja a rendszer, kivéve a hibákat tartalmazó #REF!
sorokat.
Megjegyzés
A hiba kizárásának egyetlen célja a #REF!
bemutatás. A cikkben ismertetett fogalmak segítségével a hibarekordból tetszőleges mezőket célozhat meg.
Ha a hibaérték melletti szóközt választja ki, a képernyő alján megjelenik a részletek panel. A részletek panel a hiba okát DataFormat.Error
és a hibaüzenetet is tartalmazza: Invalid cell value '#REF!'
Egyszerre csak egy cellát jelölhet ki, így egyszerre csak egy hibaérték hibaösszetevőit vizsgálhatja meg hatékonyan. Ekkor létrehoz egy új egyéni oszlopot, és használja a try
kifejezést.
Új egyéni oszlop létrehozásához nyissa meg az Oszlop hozzáadása menüt, és válassza az Egyéni oszlop lehetőséget. Az Egyéni oszlop ablakban adja meg a képletettry [Standard Rate]
. Nevezze el ezt az új oszlopot az Összes hiba oszlopnak.
A try
kifejezés az értékeket és a hibákat rekordértékké alakítja, amely jelzi, hogy a try
kifejezés hibát kezelt-e vagy sem, valamint a megfelelő értéket vagy hibarekordot.
Ezt az újonnan létrehozott oszlopot kibonthatja rekordértékekkel, és az oszlopfejléc melletti ikonra kattintva megtekintheti a kibontandó mezőket.
Ez a művelet három új mezőt tesz elérhetővé:
- Minden Errors.HasError – azt jeleníti meg, hogy a Standard rate oszlop értéke hibás volt-e vagy sem.
- Minden Errors.Value – ha a Standard ráta oszlop értéke nem volt hiba, akkor ez az oszlop a Standard ráta oszlop értékét jeleníti meg. A hibákkal rendelkező értékek esetében ez a mező nem érhető el, és a kibontási művelet során ez az oszlop értékekkel rendelkezik
null
. - Minden Errors.Error – ha a Standard ráta oszlop értéke hibás volt, ez az oszlop megjeleníti a Standard rate oszlopban szereplő érték hibarekordját. Hiba nélküli értékek esetén ez a mező nem érhető el, és a kibontási művelet során ez az oszlop értékekkel rendelkezik
null
.
További vizsgálathoz bontsa ki az All Errors.Error oszlopot a hibarekord három összetevőjének lekéréséhez:
- A hiba oka
- Hibaüzenet
- Hiba részletei
A kibontási művelet elvégzése után az All Errors.Error.Message mező megjeleníti az adott hibaüzenetet, amely pontosan jelzi, hogy az egyes cellák milyen Excel-hibával rendelkeznek. A hibaüzenet a hibarekord Hibaüzenet mezőjéből származik.
Most, hogy minden hibaüzenet egy új oszlopban szerepel, létrehozhat egy új feltételes oszlopot végleges ráta néven és a következő záradékokkal:
- Ha az All Errors.Errors.Message oszlop értéke egyenlő
null
, akkor a kimenet a Standard rate oszlop értéke. - Ha az All Errors.Errors.Message oszlop értéke nem egyenlő
Invalid cell value '#REF!'.
, akkor a kimenet a Speciális sebesség oszlop értéke. - Máskülönben null.
Miután megtartotta a Fiók, a Standard ráta, a Különleges díj és a Végső díj oszlopokat, és hozzáadta az egyes oszlopokhoz a megfelelő adattípust, az alábbi képen látható, hogyan néz ki a végleges táblázat.
Másik lehetőségként létrehozhat egy új egyéni oszlopot is a kulcsszavak és catch
a try
kulcsszavak használatával.
try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null