Gestione degli errori
Analogamente al modo in cui Excel e il linguaggio DAX hanno una IFERROR
funzione, Power Query ha la propria sintassi per testare e intercettare gli errori.
Come accennato nell'articolo sulla gestione degli errori in Power Query, gli errori possono essere visualizzati a livello di passaggio o cella. Questo articolo è incentrato su come rilevare e gestire gli errori in base alla propria logica specifica.
Nota
Per illustrare questo concetto, questo articolo usa una cartella di lavoro di Excel come origine dati. I concetti illustrati di seguito si applicano a tutti i valori in Power Query e non solo a quelli provenienti da una cartella di lavoro di Excel.
L'origine dati di esempio per questa dimostrazione è una cartella di lavoro di Excel con la tabella seguente.
Questa tabella di una cartella di lavoro di Excel contiene errori di Excel, ad esempio #NULL!, #REF!e #DIV/0! nella colonna Frequenza standard. Quando si importa questa tabella nell'editor di Power Query, l'immagine seguente mostra l'aspetto.
Si noti che gli errori della cartella di lavoro di Excel vengono visualizzati con il [Error]
valore in ognuna delle celle.
Questo articolo illustra come sostituire un errore con un altro valore. Si apprenderà anche come rilevare un errore e usarlo per una logica specifica.
In questo caso, l'obiettivo è creare una nuova colonna Frequenza finale nell'origine dati di esempio che usa i valori della colonna Frequenza standard. In caso di errori, usa il valore della colonna Frequenza speciale corrispondente.
Per creare una nuova colonna personalizzata, passare al menu Aggiungi colonna e selezionare Colonna personalizzata. Nella finestra Colonna personalizzata immettere la formula try [Standard Rate] otherwise [Special Rate]
. Assegnare alla nuova colonna il nome Frequenza finale.
Questa formula tenta di valutare la colonna Frequenza standard e restituisce il relativo valore se non vengono rilevati errori. Se vengono rilevati errori nella colonna Frequenza standard, l'output è il valore definito dopo l'istruzione otherwise
, che in questo caso è la colonna Tariffa speciale.
Dopo aver aggiunto i tipi di dati corretti a tutte le colonne della tabella, l'immagine seguente mostra l'aspetto della tabella finale.
Nota
Come approccio alternativo, è anche possibile immettere la formula try [Standard Rate] catch ()=> [Special Rate]
, equivalente alla formula precedente, ma usando la parola chiave catch con una funzione che non richiede parametri.
La catch
parola chiave è stata introdotta in Power Query a maggio 2022.
Usando la stessa origine dati di esempio della sezione precedente, il nuovo obiettivo consiste nel creare una nuova colonna per la frequenza finale. Se il valore della tariffa standard esiste, viene usato tale valore. In caso contrario, viene utilizzato il valore della colonna Frequenza speciale, ad eccezione delle righe con qualsiasi #REF!
errore.
Nota
L'unico scopo dell'esclusione dell'errore #REF!
è a scopo dimostrativo. Con i concetti illustrati in questo articolo, è possibile scegliere come destinazione tutti i campi scelti dal record di errore.
Quando si seleziona uno degli spazi vuoti accanto al valore di errore, si ottiene il riquadro dei dettagli nella parte inferiore della schermata. Il riquadro dei dettagli contiene sia il motivo dell'errore, DataFormat.Error
che il messaggio di errore , Invalid cell value '#REF!'
:
È possibile selezionare una sola cella alla volta, in modo da poter esaminare in modo efficace solo i componenti di errore di un valore di errore alla volta. A questo punto si crea una nuova colonna personalizzata e si usa l'espressione try
.
Per creare una nuova colonna personalizzata, passare al menu Aggiungi colonna e selezionare Colonna personalizzata. Nella finestra Colonna personalizzata immettere la formula try [Standard Rate]
. Assegnare alla nuova colonna il nome Tutti gli errori.
L'espressione try
converte valori ed errori in un valore di record che indica se l'espressione try
ha gestito o meno un errore e il valore appropriato o il record di errore.
È possibile espandere questa colonna appena creata con valori di record ed esaminare i campi disponibili da espandere selezionando l'icona accanto all'intestazione di colonna.
Questa operazione espone tre nuovi campi:
- All Errors.HasError: indica se il valore della colonna Frequenza standard ha o meno un errore.
- Tutti gli errori.valore: se il valore della colonna Frequenza standard non ha avuto alcun errore, questa colonna visualizza il valore della colonna Frequenza standard. Per i valori con errori questo campo non è disponibile e durante l'operazione di espansione questa colonna ha
null
valori. - Tutti gli errori.Errore: se il valore della colonna Frequenza standard ha avuto un errore, in questa colonna viene visualizzato il record di errore per il valore della colonna Frequenza standard. Per i valori senza errori, questo campo non è disponibile e durante l'operazione di espansione questa colonna ha
null
valori.
Per ulteriori indagini, è possibile espandere la colonna All Errors.Error per ottenere i tre componenti del record di errore:
- Motivo dell'errore
- Messaggio d'errore
- Dettagli errore
Dopo aver eseguito l'operazione di espansione, il campo All Errors.Error.Message visualizza il messaggio di errore specifico che indica esattamente l'errore di Excel di ogni cella. Il messaggio di errore è derivato dal campo Messaggio di errore del record di errore.
A questo punto, con ogni messaggio di errore in una nuova colonna, è possibile creare una nuova colonna condizionale con il nome Tasso finale e le clausole seguenti:
- Se il valore nella colonna All Errors.Errors.Message è uguale
null
a , l'output è il valore della colonna Frequenza standard. - In caso contrario, se il valore nella colonna All Errors.Errors.Message non è uguale
Invalid cell value '#REF!'.
a , l'output è il valore della colonna Frequenza speciale. - Else, null.
Dopo aver mantenuto solo le colonne Account, Tariffa standard, Tariffa speciale e Tariffa finale e l'aggiunta del tipo di dati corretto per ogni colonna, l'immagine seguente illustra l'aspetto della tabella finale.
In alternativa, è anche possibile creare una nuova colonna personalizzata usando le try
parole chiave e catch
.
try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null