Del via


Riktig bruk av feilfunksjoner

Når du som datamodellerer skriver et DAX uttrykk som kan oppstå en evalueringstidsfeil, kan du vurdere å bruke to nyttige DAX funksjoner.

  • Funksjonen ISERROR, som tar ett uttrykk og returnerer TRUE hvis uttrykket resulterer i feil.
  • Funksjonen IFERROR, som tar to uttrykk. Hvis det første uttrykket resulterer i feil, returneres verdien for det andre uttrykket. Det er faktisk en mer optimalisert implementering av nesting av ISERROR-funksjonen i en IF-funksjon.

Men selv om disse funksjonene kan være nyttige og kan bidra til å skrive uttrykk som er enkle å forstå, kan de også redusere ytelsen til beregninger betydelig. Det kan skje fordi disse funksjonene øker antallet lagringsmotorskanninger som kreves.

De fleste evalueringstidsfeil skyldes uventede BLANK-er eller nullverdier eller ugyldig datatypekonvertering.

Anbefalinger

Det er bedre å unngå å bruke funksjonene ISERROR og IFERROR. Bruk i stedet defensive strategier når du utvikler modellen og skriver uttrykk. Strategier kan omfatte:

  • Sikre at kvalitetsdata lastes inn i modellen: Bruk Power Query-transformasjoner til å fjerne eller erstatte ugyldige eller manglende verdier, og for å angi riktige datatyper. En Power Query-transformasjon kan også brukes til å filtrere rader når feil, for eksempel ugyldig datakonvertering, forekommer.

    Datakvaliteten kan også kontrolleres ved å angi modellkolonnen Egenskapen Er nullstillbar til Av, noe som vil mislykke dataoppdateringen dersom BLANK-er oppstår. Hvis denne feilen oppstår, vil data som lastes inn som et resultat av en vellykket oppdatering, forbli i tabellene.

  • Bruke IF-funksjonen: Logisk testuttrykk for IF funksjon kan avgjøre om det ville oppstå et feilresultat. Vær oppmerksom på at denne funksjonen, i likhet med funksjonene ISERROR og IFERROR, kan resultere i flere skanninger av lagringsmotoren, men vil sannsynligvis yte bedre enn dem fordi ingen feil må utløses.

  • Bruk av feiltolerante funksjoner: Noen DAX funksjoner vil teste og kompensere for feilforhold. Med disse funksjonene kan du angi et alternativt resultat som returneres i stedet. Funksjonen DIVIDE er et slikt eksempel. Hvis du vil ha mer veiledning om denne funksjonen, kan du lese artikkelen DAX: DIVIDE funksjon kontra divideringsoperator (/).

Eksempel

Følgende måluttrykk tester om en feil vil bli utløst. Den returnerer BLANK i denne forekomsten (som er tilfellet når du ikke angir IF-funksjonen med et verdi-hvis-usann-uttrykk).

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

Denne neste versjonen av måluttrykket er forbedret ved hjelp av IFERROR-funksjonen i stedet for funksjonene IF og ISERROR.

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

Denne endelige versjonen av måluttrykket oppnår imidlertid det samme resultatet, men mer effektivt og elegant.

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