Lämplig användning av felfunktioner
När du som datamodellerare skriver ett DAX-uttryck som kan generera utvärderingstidsfel 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 ett fel.
- Funktionen IFERROR, som tar två uttryck. Om det första uttrycket resulterar i fel returneras värdet för det andra uttrycket. Det är i själva verket en mer optimerad implementering som bäddar in ISERROR-funktionen i en IF-funktion.
Men även om dessa funktioner kan vara användbara och kan bidra till att skriva lättförståeliga uttryck, kan de även märkbart försämra prestandan för beräkningar. Det beror på att de här funktionerna ökar antalet genomsökningar som krävs för lagringsmotorn.
De flesta utvärderingstidsfel beror på oväntade tomma värden eller nollvärden, eller ogiltig datatypskonverteringar.
Rekommendationer
Det är bättre att undvika att använda ISERROR- och IFERROR-funktionerna. Använd i stället defensiva strategier när du utvecklar modellen och skriver uttryck. Strategier kan vara:
Säkerställa att kvalitetsdata läses in i modellen: Använd Power Query-omvandlingar för att ta bort eller byta ut ogiltiga eller saknade värden och för att ange rätt datatyper. En Power Query-omvandling kan även användas för att filtrera rader när fel som ogiltig datakonvertering inträffar.
Datakvalitet kan även styras genom att du anger egenskapen för modellkolumnen Is Nullable till av, vilket gör att datauppdateringen misslyckas om tomma värden påträffas. Om det här felet uppstår kvarstår data i tabellerna som lästs in vid en lyckad uppdatering.
Använda IF-funktionen: IF-funktionens logiska testuttryck kan fastställa om ett felresultat skulle inträffa. Observera, precis som funktionerna ISERROR och IFERROR, kan den här funktionen resultera i ytterligare genomsökningar av lagringsmotorn, men den kommer förmodligen att ha bättre prestanda än dem då inget fel behöver inledas.
Använda feltoleranta funktioner: Vissa DAX-funktioner testar och kompenserar för felvillkor. Med dessa funktioner kan du ange ett alternativt resultat som ska returneras i stället. Funktionen DIVIDE är ett exempel. Ytterligare information om den här funktionen finns i artikeln DAX: DIVIDE-funktionen kontra divide-operatorn (/).
Exempel
Följande måttuttryck testar om ett fel skulle höjas. Den returnerar tom i den här instansen (vilket är fallet när du inte anger IF-funktionen med ett value-if-false-uttryck).
Profit Margin
= IF(ISERROR([Profit] / [Sales]))
Nästa version av måttuttrycket har förbättrats med 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 samma utfall men på ett mer effektivt och elegant sätt.
Profit Margin
= DIVIDE([Profit], [Sales])
Se även
- Utbildningsväg: Använda DAX i Power BI Desktop
- Har du några frågor? Fråga Power BI Community
- Har du förslag? Bidra till att förbättra Power BI