Share via


Lämplig användning av felfunktioner

När du som datamodellerare skriver ett DAX-uttryck som kan generera ett utvärderingsfel kan du överväga att använda två användbara DAX-funktioner.

  • Funktionen ISERROR , som tar ett enda uttryck och returnerar TRUE om uttrycket resulterar i fel.
  • Funktionen IFERROR , som tar två uttryck. Om det första uttrycket resulterar i ett fel returneras värdet för det andra uttrycket. Det är i själva verket en mer optimerad implementering av kapsling av ISERROR-funktionen i en IF-funktion .

Men även om dessa funktioner kan vara användbara och kan bidra till att skriva lättförst förstå-uttryck, kan de också avsevärt försämra beräkningsprestandan. Det kan inträffa eftersom dessa funktioner ökar antalet genomsökningar av lagringsmotorn som krävs.

De flesta utvärderingsfel beror på oväntade BLANK:er eller nollvärden eller ogiltig datatypskonvertering.

Rekommendationer

Det är bättre att undvika att använda funktionerna ISERROR och IFERROR. Använd i stället defensiva strategier när du utvecklar modellen och skriver uttryck. Strategier kan omfatta:

  • Säkerställa att kvalitetsdata läses in i modellen: Använd Power Query-transformeringar för att ta bort eller ersätta ogiltiga eller saknade värden och för att ange rätt datatyper. En Power Query-transformering kan också användas för att filtrera rader när fel, till exempel ogiltig datakonvertering, inträffar.

    Datakvaliteten kan också styras genom att ställa in egenskapen Är nullbar för modellkolumnen till Av, vilket misslyckas med datauppdateringen om BLANK:er påträffas. Om det här felet inträffar kommer data som läses in till följd av en lyckad uppdatering att finnas kvar i tabellerna.

  • Med funktionen IF: If-funktionens logiska testuttryck kan avgöra om ett felresultat skulle inträffa. Observera att precis som funktionerna ISERROR och IFERROR kan den här funktionen resultera i ytterligare genomsökningar av lagringsmotorn, men fungerar förmodligen bättre än dem eftersom inget fel behöver genereras.

  • Använda feltoleranta funktioner: Vissa DAX-funktioner testar och kompenserar för feltillstånd. Med de här funktionerna kan du ange ett alternativt resultat som returneras i stället. Funktionen DIVIDE är ett exempel. Mer information om den här funktionen finns i artikeln DAX: DIVIDE-funktionen kontra dividera operatorn (/).

Exempel

Följande måttuttryck testar om ett fel skulle uppstå. Den returnerar BLANK i den här instansen (vilket är fallet när du inte anger IF-funktionen med ett värde-om-falskt-uttryck).

Profit Margin
= IF(ISERROR([Profit] / [Sales]))

Nästa version av måttuttrycket har förbättrats med hjälp av funktionen IFERROR i stället för funktionerna IF och ISERROR.

Profit Margin
= IFERROR([Profit] / [Sales], BLANK())

Den här slutliga versionen av måttuttrycket uppnår dock samma resultat, men ändå mer effektivt och elegant.

Profit Margin
= DIVIDE([Profit], [Sales])