Salta al contenuto principale

Microsoft Excel - Power Query - Validazione di righe

Problema

Abbiamo una tabella con 3 campi e una serie di righe.

tabella di esempio

 Vogliamo aggiungere una quarta colonna che contiene i valori

  • non validato se in una colonna c'è il valore null o la cella vuota ""
  • OK se tutte e tre le colonne sono valide

Soluzione

Creiamo una funzione ValidaRiga in power query

(param1, param2, param3) as text =>
let
   ToText = (val) => if val = null then null else Text.From(val),
   p1 = ToText(param1),
   p2 = ToText(param2),
   p3 = ToText(param3),
   IsNullOrEmpty = (val) => val = null or val = "",
   CountInvalid = List.Count(List.Select({p1, p2, p3}, IsNullOrEmpty)),
   Result = if CountInvalid > 0 then "non validato" else "OK"
in
   Result

 

Soluzione avanzata

Creiamo una funzione ValidaRiga in power query

 

(campi as list, valoriNonValidi as list) as text =>
let
   ToText = (val) => if val = null then null else Text.From(val),
   campiTesto = List.Transform(campi, ToText),
   IsNonValido = (val) => List.Contains(valoriNonValidi, val),
   countNonValidi = List.Count(List.Select(campiTesto, IsNonValido)),
   Result = if countNonValidi > 0 then "non validato" else "OK"
in
   Result

Passaggio di parametri

Passaggio dei campi

Nella query della tua tabella, chiami la funzione così 

= Table.AddColumn(
   TabellaSource,
   "Validazione",
   each ValidaRiga(
       { [param1], [param2], [param3] },
       { null, "", " " }
   )
)

Passaggio della lista dei valori non validi 

I valori non validi sono contenuti nel file 

ListaValoriNonValidi.csv 

Conviene aggiungere un piccolo step di pulizia nella query ListaValoriNonValidi per essere sicuri di avere sia null che "":

 

Passaggio della lista dei valori non validi contenuti nella tabella ListaValoriNonValidi.csv 

Alla query ListaValoriNonValidi aggiungi un ultimo step per estrarre la colonna come lista:

= ListaValoriNonValidi[valore]

 

Passa la lista alla funzione

= Table.AddColumn(
   TabellaSource,
   "Validazione",
   each fnValida(
       { [param1], [param2], [param3] },
       ListaValoriNonValidi[valore]
   )
)

 

 

 

sfs

 

Allegato
pattern.csv (137 byte)
campioni.csv (230 byte)