Pagina 1 di 1

Divisione colonna in righe

Inviato: lun 5 apr 2021, 11:17
da Jacopo
Buongiorno a tutti,
Dividendo una colonna della mia tabella in righe anziché in ulteriori colonne, mi sono posto questa domanda:

Cosa significa e perché viene inserito un "LET ... IN" annidato nella formula?

Vi mostro di seguito il codice così da capire meglio:

Codice: Seleziona tutto

let
    Origine = Excel.Workbook(File.Contents("D:\Esercizi Collect, Combine\C10\C10E06.xlsx"), null, true),
    Products_Table = Origine{[Item="Products",Kind="Table"]}[Data],
    SuddividoColonna = Table.ExpandListColumn(
        Table.TransformColumns(
            Products_Table,
            {"Colors",
            Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv),
            let itemType = (type nullable text)
            meta [Serialized.Text = true]
            in type {itemType}
            }
        ),
        "Colors"
    )
in
    SuddividoColonna
Grazie Mille per l'aiuto!

Jacopo

Divisione colonna in righe

Inviato: lun 5 apr 2021, 21:23
da Andrea90
Ciao Jacopo,

Sinceramente non mi ero mai posto la domanda del perché venga generata, in automatico, quella porzione di codice a seguito di uno split sulle righe.

La Table.TransformColumns() richiede come primo argomento una tabella (Products_Table) e come secondo argomento una transformOperations in formato lista (ecco il perché delle { } ).
Quel let annidato imposta il tipo di dato che dovrà avere la colonna risultante a seguito dello split. Il tipo di dato è per l'appunto definito da itemType.
ItemType viene definito come "type nullable text" pertanto dovrebbe essere un tipo di dato text che consente anche valori null. Ma sinceramente non ho notato gran differenze provando anche a lasciare il solo type text.

Puoi anche provare a rimuovere quella porzione di codice e non dovresti ottenere risultati diversi rispetto alla formulazione originale.
Non so dire quando essa entra in gioco. Se la togli comunque dovresti ottenere un tipo di dato generico (123abc), perciò dovresti poi applicare il modificato tipo.

Comunque io l'ho sempre lasciata tale e quale a come esce da sistema.

A presto,
Andrea

Divisione colonna in righe

Inviato: lun 5 apr 2021, 21:42
da Jacopo
Ok andrea grazie mille, mi hai chiarito il fatto che il let annidato serva a definire il tipo di dato della colonna risultante dallo split.
L’unica cosa che comunque non capisco il significato a livello di codice di quel “meta [Serialized.Text = true]” e del motivo per cui ho quel “in type ...” come output e non un semplice “in”.

Grazie Mille per la disponibilità e cortesia😃

Divisione colonna in righe

Inviato: lun 5 apr 2021, 21:59
da Andrea90
Ciao Jacopo,

Per quel che riguarda i metadata puoi dare un'occhiata a questo breve documento:

https://docs.microsoft.com/en-us/powerquery-m/metadata

Per la seconda questione non comprendo appieno ciò che intendi. Un costrutto let-in permette di suddividere i passaggio della formula in step (ecco perché di norma si vedrà sempre strutturare una query nel seguente modo:

let
step1=....
step2=....
step3=....
in
step3

Poiché dovrai specificare quale è l'output desiderato ed "in" serve proprio a questo.
Sul perché poi i programmatori abbiano previsto questi step per definire il tipo di dato quando viene eseguito uno split per riga non saprei risponderti. Come dicevo non sono nemmeno sicuro della sua effettiva necessità visto che anche rimuovendolo, non riscontro problemi di sorta, tranne per il fatto che perdo il tipo di dati, ottenendone uno generico.

A presto,
Andrea