Divisione colonna in righe

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel

Rispondi
Avatar utente

Jacopo
Messaggi: 2 | Topic creati
Iscritto il: lun 18 gen 2021, 14:17

Divisione colonna in righe

Messaggio 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


Avatar utente

Andrea90
Messaggi: 2240 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Divisione colonna in righe

Messaggio 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
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Avatar utente

Autore del topic
Jacopo
Messaggi: 2 | Topic creati
Iscritto il: lun 18 gen 2021, 14:17

Divisione colonna in righe

Messaggio 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😃
Avatar utente

Andrea90
Messaggi: 2240 | Topic creati
Iscritto il: dom 28 giu 2020, 19:41
Luogo: Bologna
Ringraziato: 672 volte
Contatta:

Divisione colonna in righe

Messaggio 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
Se hai gradito l'aiuto che hai ricevuto considera di contribuire alle spese per il mantenimento del forum facendo una libera DONAZIONE --> Link

Ricordarsi di segnare come "RISOLTE" le discussioni per le quali si è ricevuto un feedback positivo. Per vedere come fare --> Link
Rispondi