Pagina 1 di 1

Convertire in base36

Inviato: mar 20 dic 2022, 16:24
da Michelaprova
Buongiorno,
come posso trasformare una stringa che è in formato testo (alfanumerico) in un numero in base 36?
ho provato sia tramite l'editor di powerbi che tramite le formule ma non riesco, sovente mi dà l'errore che non si puo convertire quella stringa in numero. in excel ottengo il valore desiderato tramite la formula DECIMALE(string,36)

Grazie

Convertire in base36

Inviato: mar 20 dic 2022, 16:40
da Andrea90
Michelaprova,

Non penso esista la controparte della funzione DECIMALE di excel nel mondo Dax.

Se conosci la logica da applicare per la trasformazione puoi provare a crearti una funzione personalizzata in PowerQuery.

Andrea

Convertire in base36

Inviato: mer 21 dic 2022, 9:36
da Andrea90
Michelaprova,

Ho provato ad inventare qualcosa per generare una funzione custom che ho chiamato "char_converter", il cui codice è:

Codice: Seleziona tutto

(char_to_convert as any, position_of as number) as number=>
let 
    list_alfa = {"0".."9", "a".."z"},
    pos_list_alfa = List.PositionOf(list_alfa, Text.Lower(char_to_convert)),
    result = pos_list_alfa * Number.Power(36, position_of as number)
in    
    result
Poi ho utilizzato questa funzione all'interno di una tabella che esporta dei codici alfanumerici, ed esegue la conversione in base 36. (Nella seconda colonna della tabella c'è il risultato ottenuto con la formula DECIMAL() per un confronto).

Codice: Seleziona tutto

let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Stringhe", type text}, {"Result", Int64.Type}}),
    #"Added Custom" = Table.AddColumn(
                        #"Changed Type", 
                        "Test", 
                        each 
                            List.Last(
                                List.Generate(
	                            ()=>[Start=0, Funct=char_converter(List.Reverse(Text.ToList([Stringhe])){0}, 0), String=List.Reverse(Text.ToList([Stringhe]))],
	                            each [Start]<List.Count([String]),
	                            each [Start=[Start]+1,Funct= char_converter([String]{[Start]+1}, [Start]+1) + [Funct], String=[String]]
                                    )
                                   )[Funct])
in
    #"Added Custom"
Lascio a te testare il suo corretto funzionamento.

Andrea