# Unisci

Il prefisso Merge può essere aggiunto a qualsiasi istruzione LOAD o SELECT nello script per specificare che dovrebbe aggiungere record a un'altra tabella. Specifica anche che questa istruzione dovrebbe essere eseguita in un ricaricamento parziale.

Il caso tipico di utilizzo riguarda il caricamento di un registro dei cambiamenti che si desidera utilizzare per applicare inserts, updates e deletes a una tabella esistente.

Nota informaticaAffinché il ricaricamento parziale funzioni correttamente, aprire l'app con i dati prima di attivare un ricaricamento parziale.

Eseguire un ricaricamento parziale usando il pulsante Ricarica. Per ulteriori informazioni, vedere [Pulsante](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Visualizations/Button/button.htm). È anche possibile utilizzare Qlik Engine JSON API.

Sintassi:

Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)

Argomenti:

Argomenti

| Argomento | Descrizione |
| --- | --- |
| only | Un qualificatore opzionale che denota che l'istruzione dovrebbe essere eseguita solo durante i caricamenti parziali. L'istruzione viene ignorata durante i ricaricamenti normali (non parziali). |
| SequenceNoField | Il nome del campo contenente una data e ora o un numero di sequenza che definisce l'ordine delle operazioni. |
| SequenceNoVar | Il nome della variabile che viene assegnata al valore massimo per SequenceNoField della tabella unita. |
| ListOfKeys | Un elenco separato da virgole di nomi di campo che specifica la chiave primaria. |
| Operation | Il primo campo dell'istruzione LOAD deve contenere l'operazione come una stringa di testo: sono accettati anche 'Insert', 'Update' o 'Delete'. ‘i’, ‘u’ e ‘d’. |

## Funzionalità generale

Durante un caricamento normale (non parziale), la costruzione LOAD Unisci funziona come una normale istruzione Load ma con la funzionalità aggiuntiva di rimuovere i record vecchi e obsoleti e i record contrassegnati per l'eliminazione. Il primo campo dell'istruzione Load deve presentare informazioni sull'operazione: Insert, Update o Delete.

Per ciascun record caricato, l'identificatore record verrà confrontato con i record precedentemente caricati e verrà conservato solo il record più recente (in base al numero di sequenza). Se il record più recente è contrassegnato con Delete, non ne verrà conservato nessuno.

### Tabella di destinazione

Quale tabella modificare è determinato dal set di campi. Se una tabella con lo stesso set di campi (tranne il primo campo; l'operazione) esiste già, sarà questa la tabella da modificare. In alternativa, un prefisso Concatena può essere utilizzato per specificare la tabella. Se la tabella di destinazione non viene determinata, il risultato della costruzione Unisci LOAD viene archiviato in una nuova tabella.

Se viene utilizzato il prefisso Concatena, la tabella risultante ha un insieme di campi corrispondenti all'unione della tabella esistente e l'input per unire. Pertanto, la tabella di destinazione può avere più campi rispetto al registro delle modifiche utilizzato come input per l'unione.

Un ricaricamento parziale consente di ottenere lo stesso risultato di un ricaricamento completo. Una differenza è che un ricaricamento parziale raramente crea una nuova tabella. A meno che non sia stata utilizzata la clausola Solo, esiste sempre una tabella di destinazione con lo stesso set di campi dell'esecuzione precedente dello script.

### Numero di sequenza

Se il registro delle modifiche caricato è di tipo accumulato, ovvero contiene modifiche già caricate, il parametro SequenceNoVar può essere utilizzato in una clausola Where per limitare la quantità di dati di input. La costruzione Unisci LOAD può quindi essere realizzata per caricare soltanto i record in cui il campo SequenceNoField è superiore a SequenceNoVar. Al completamento, la costruzione Unisci LOAD assegna un nuovo valore a SequenceNoVar con il valore massimo visto nel campo SequenceNoField.

### Operazioni

Unisci LOAD può avere meno campi rispetto alla tabella di destinazione. Le operazioni diverse trattano i campi mancati in modo diverso:

Inserisci: i campi mancanti in Unisci LOAD, ma esistenti nella tabella di destinazione, aggiungono un valore NULL nella tabella di destinazione.

Elimina: i campi mancanti non influenzano il risultato. I record rilevanti vengono eliminati comunque.

Aggiorna: i campi elencati in Unisci LOAD sono aggiornati nella tabella di destinazione. I campi mancanti non vengono modificati. Ciò significa che le due istruzioni seguenti non sono identiche:

* Merge on Key Concatenate Load 'U' as Operation, Key, F1, Null() as F2 From ...;
* Merge on Key Concatenate Load 'U' as Operation, Key, F1 From ...;

La prima istruzione aggiorna i record elencati e cambia F2 in NULL. La seconda non cambia F2, ma lascia i valori nella tabella di destinazione.

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Merge.htm)

#### Esempi

## Esempio 1: unione semplice con una tabella specificata

In questo esempio, una tabella inline denominata Persons è caricata con tre righe. Unisci quindi modifica la tabella nel modo seguente:

* Aggiunge la riga, Mary, 4.
* Elimina la riga, Steven, 3.
* Assegna il numero 5 a Jake.

La variabile LastChangeDate è impostata al valore massimo nella colonna ChangeDate dopo l'esecuzione di Unisci.

### Script di caricamento

Aggiungere lo script di esempio all'app ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna risultati a un foglio nell'app dell'utente.

```
Set DateFormat='D/M/YYYY';
Persons:
load * inline [
Name, Number
Jake, 3
Jill, 2
Steven, 3
];

Merge (ChangeDate, LastChangeDate) on Name Concatenate(Persons)
LOAD * inline [
Operation, ChangeDate,   Name,     Number
Insert,    1/1/2021,     Mary,     4
Delete,    1/1/2021,     Steven, 
Update,    2/1/2021,     Jake,     5
];
```

Per ulteriori informazioni sull'utilizzo di caricamenti inline, vedere [Utilizzo dei caricamenti inline per caricare i dati](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/inline-loads-qs.htm).

### Risultato

Prima di Unisci LOAD, la tabella risultante appare come segue:

Resulting table

| Name | Number |
| --- | --- |
| Jake | 3 |
| Jill | 2 |
| Steven | 3 |

A seguito del comando Unisci LOAD, la tabella appare come segue:

Resulting table

| ChangeDate | Name | Number |
| --- | --- | --- |
| 2/1/2021 | Jake | 5 |
| - | Jill | 2 |
| 1/1/2021 | Mary | 4 |

Quando i dati vengono caricati, la finestra di dialogo Avanzamento caricamento dati mostra le operazioni che vengono eseguite:

Finestra di dialogo Avanzamento caricamento dati

![Finestra di dialogo Avanzamento caricamento dati.](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Resources/Images/ui_gen_data_load_merge.png)

## Esempio 2: script di caricamento dei dati con campi mancanti

In questo esempio, vengono caricati gli stessi dati di cui sopra, ma ora con un ID per ciascuna persona.

Unisci cambia la tabella nel modo seguente:

* Aggiunge la riga, Mary, 4.
* Elimina la riga, Steven, 3.
* Assegna il numero 5 a Jake.
* Assegna il numero 6 a Jill.

### Script di caricamento

Qui utilizziamo due istruzioni Unisci LOAD, una per ‘Inserisci’ ed ‘Elimina’ e una per ‘Aggiorna’.

Aggiungere lo script di esempio all'app ed eseguirlo. Per visualizzare il risultato, aggiungere i campi elencati nella colonna risultati a un foglio nell'app dell'utente.

```
Set DateFormat='D/M/YYYY';
Persons:
Load * Inline [
PersonID, Name, Number
1, Jake, 3
2, Jill, 2
3, Steven, 3
];

Merge (ChangeDate, LastChangeDate) on PersonID Concatenate(Persons)
Load * Inline [
Operation, ChangeDate,   PersonID, Name,     Number
Insert,    1/1/2021,     4,        Mary,     4
Delete,    1/1/2021,     3,        Steven, 
];

Merge (ChangeDate, LastChangeDate) on PersonID Concatenate(Persons)
Load * Inline [
Operation, ChangeDate,   PersonID, Number
Update,    2/1/2021,     1,        5
Update,    3/1/2021,     2,        6
];
```

### Risultato

Seguendo le istruzioni Unisci LOAD, la tabella avrà il seguente aspetto:

Resulting table

| PersonID | ChangeDate | Name | Number |
| --- | --- | --- | --- |
| 1 | 2/1/2021 | Jake | 5 |
| 2 | 3/1/2021 | Jill | 6 |
| 4 | 1/1/2021 | Mary | 4 |

Notare che la seconda istruzione Unisci non include il campo Nome, e come conseguenza, i nomi non sono stati cambiati.

## Esempio 3: script di caricamento dei dati - ricaricamento parziale usando un'istruzione Where con ChangeDate

Nell'esempio seguente, l'argomento Solo specifica che il comando Unisci viene eseguito solo durante un ricaricamento parziale. Gli aggiornamenti vengono filtrati in base al valore LastChangeDate precedentemente acquisito. Al termine dell'operazione Unisci, alla variabile LastChangeDate è assegnato il valore massimo della colonna ChangeDate elaborato durante l'unione

### Script di caricamento

```
Merge Only (ChangeDate, LastChangeDate) on Name Concatenate(Persons)
LOAD Operation, ChangeDate,  Name, Number 
from [lib://ChangeFilesFolder/BulkChangesInPersonsTable.csv] (txt)
where ChangeDate >='$(LastChangeDate)';
```

## Ulteriori informazioni

* [Caricamento parziale](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/PartialReload.htm)
* [Load](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm)
* [Concatenate](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/concatenate.htm)
* [Map](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Map.htm)
* [Only](https://help.qlik.com/it-IT/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Scripting/Only.htm)