COMBINEVALUES
Si applica a: Calcolo visivo misura tabella calcolata colonna calcolata
unisce due o più stringhe di testo in una sola. Lo scopo principale di questa funzione è supportare le relazioni a più colonne nei modelli DirectQuery. Pe altri dettagli, vedere la sezione Osservazioni.
Sintassi
COMBINEVALUES(<delimiter>, <expression>, <expression>[, <expression>]…)
Parametri
Termine | Definizione |
---|---|
delimiter | Separatore da usare durante la concatenazione. Deve essere un valore costante. |
expression | Espressione DAX il cui valore verrà unito a una singola stringa di testo. |
Valore restituito
Stringa concatenata.
Osservazioni:
La funzione COMBINEVALUES presuppone, ma non convalida, il fatto che quando i valori di input sono diversi, anche le stringhe di output sono diverse. In base a questo presupposto, quando si usa COMBINEVALUES viene per creare colonne calcolate, allo scopo di creare una relazione che unisca più colonne di due tabelle DirectQuery, durante l'esecuzione della query viene generata una condizione di join ottimizzata. Ad esempio, se gli utenti vogliono creare una relazione tra Table1(Column1, Column2) e Table2(Column1, Column2), possono creare due colonne calcolate, una per ogni tabella, come segue:
Table1[CalcColumn] = COMBINEVALUES(",", Table1[Column1], Table1[Column2])
e
Table2[CalcColumn] = COMBINEVALUES(",", Table2[Column1], Table2[Column2])
e quindi creare una relazione tra
Table1[CalcColumn]
eTable2[CalcColumn]
. A differenza di altre funzioni e operatori DAX, che vengono convertiti letteralmente nelle funzioni e negli operatori SQL corrispondenti, la relazione precedente genera un predicato di join SQL come:(Table1.Column1 = Table2.Column1 OR Table1.Column1 IS NULL AND Table2.Column1 IS NULL)
e
(Table1.Column2 = Table2.Column2 OR Table1.Column2 IS NULL AND Table2.Column2 IS NULL)
Potenzialmente, il predicato di join può offrire prestazioni di query molto migliori rispetto a quelle che coinvolgono funzioni e operatori SQL complessi.
La funzione COMBINEVALUES si basa sul presupposto che l'utente scelga il delimitatore appropriato per garantire che combinazioni univoche di valori di input producano stringhe di output distinte, ma non convalida che il presupposto sia veritiero. Ad esempio, se l'utente sceglie
"| "
come delimitatore, ma una riga in Tabella1 haTable1[Column1] = "| "
eTable2 [Column2] = " "
, mentre una riga in Tabella2 haTable2[Column1] = " "
eTable2[Column2] = "| "
, i due output concatenati saranno entrambi"|| "
, il che sembra indicare che le due righe rappresentano una corrispondenza nell'operazione di join. Le due righe non vengono unite in join se entrambe le tabelle appartengono alla stessa origine DirectQuery, sebbene vengano unite in join se entrambe le tabelle vengono importate.
Esempio
La query DAX seguente:
EVALUATE
DISTINCT (
SELECTCOLUMNS ( Date, "Month", COMBINEVALUES ( ", ", [MonthName], [CalendarYear] ) )
)
Restituisce la tabella seguente con una singola colonna:
[Month] |
---|
Gennaio 2020 |
Febbraio 2020 |
Marzo 2020 |
Aprile 2020 |
Maggio 2020 |
Giugno 2020 |
Luglio 2020 |
Agosto 2020 |
Settembre 2020 |
Ottobre 2020 |
Novembre 2020 |
Dicembre 2020 |
Gennaio 2021 |
Gennaio 2021 |
Febbraio 2021 |
Marzo 2021 |
Aprile 2021 |
Maggio 2021 |
Giugno 2021 |
Luglio 2021 |
Agosto 2021 |
Settembre 2021 |
Ottobre 2021 |
Novembre 2021 |
Dicembre 2021 |