# Praca ze tabelami krzyżowymi w skrypcie ładowania danych

Tabela krzyżowa to często spotykany typ tabeli. Stanowi ona macierz wartości między dwiema ortogonalnymi listami danych nagłówka. Jeśli chcesz utworzyć asocjację między tymi danymi a innymi tabelami danych, zwykle nie jest to optymalny format danych.

W tym temacie opisano sposób cofania przestawienia danych w formacie tabeli krzyżowej, czyli transponowania jej części na wiersze za pomocą prefiksu crosstable w instrukcji LOAD w skrypcie ładowania danych.



## Cofanie przestawiania tabeli krzyżowej z jedną kolumną kwalifikującą

Na początku tabeli krzyżowej często znajduje się kilka kolumn kwalifikujących, które należy odczytywać bezpośrednio. W tym przypadku mamy jedną kolumnę kwalifikującą Year oraz macierz danych sprzedaży dla poszczególnych miesięcy.

Tabela krzyżowa z jedną kolumną kwalifikującą

| Year | Jan | Feb | Mar | Apr | May | Jun |
| --- | --- | --- | --- | --- | --- | --- |
| 2008 | 45 | 65 | 78 | 12 | 78 | 22 |
| 2009 | 11 | 23 | 22 | 22 | 45 | 85 |
| 2010 | 65 | 56 | 22 | 79 | 12 | 56 |
| 2011 | 45 | 24 | 32 | 78 | 55 | 15 |
| 2012 | 45 | 56 | 35 | 78 | 68 | 82 |

Zwykłe załadowanie takiej tabeli do Qlik Sense spowoduje utworzenie jednego pola dla kolumny Year i jednego pola dla każdego z miesięcy. Zazwyczaj nie takie działanie jest oczekiwane. Wygodniej byłoby wygenerować trzy pola:

* Kolumnę kwalifikującą, w tym przypadku Year, zaznaczoną w powyższej tabeli na zielono.
* Pole atrybutu, w tym przypadku reprezentowane przez nazwy miesięcy Jan - Jun zaznaczone na żółto. Polu można nadać nazwę Month.
* Wartości macierzy danych, zaznaczone na niebiesko. W tym przypadku reprezentują one dane sprzedaży, można im nadać nazwę Sales.

Efekt ten można osiągnąć, dodając prefiks crosstable do instrukcji LOAD lub SELECT, na przykład:

`crosstable (Month, Sales) LOAD * from ex1.xlsx;`

Spowoduje to utworzenie w programie Qlik Sense następującej tabeli:

Tabela z prefiksem crosstable dodanym do instrukcji LOAD lub SELECT

| Year | Month | Sales |
| --- | --- | --- |
| 2008 | Jan | 45 |
| 2008 | Feb | 65 |
| 2008 | Mar | 78 |
| 2008 | Apr | 12 |
| 2008 | May | 78 |
| 2008 | Jun | 22 |
| 2009 | Jan | 11 |
| 2009 | Feb | 23 |
| ... | ... | ... |

## Cofanie przestawiania tabeli krzyżowej z dwiema kolumnami kwalifikującymi

W tym przypadku pierwsze dwie kolumny od lewej to kolumny kwalifikujące, po których następują kolumny macierzy.

Tabela krzyżowa z dwiema kolumnami kwalifikującymi

| Salesman | Year | Jan | Feb | Mar | Apr | May | Jun |
| --- | --- | --- | --- | --- | --- | --- | --- |
| A | 2008 | 45 | 65 | 78 | 12 | 78 | 22 |
| A | 2009 | 11 | 23 | 22 | 22 | 45 | 85 |
| A | 2010 | 65 | 56 | 22 | 79 | 12 | 56 |
| A | 2011 | 45 | 24 | 32 | 78 | 55 | 15 |
| A | 2012 | 45 | 56 | 35 | 78 | 68 | 82 |
| B | 2008 | 57 | 77 | 90 | 24 | 90 | 34 |
| B | 2009 | 23 | 35 | 34 | 34 | 57 | 97 |
| B | 2010 | 77 | 68 | 34 | 91 | 24 | 68 |
| B | 2011 | 57 | 36 | 44 | 90 | 67 | 27 |
| B | 2012 | 57 | 68 | 47 | 90 | 80 | 94 |

Liczbę kolumn kwalifikujących można podać jako trzeci parametr prefiksu crosstable w następujący sposób:

`crosstable (Month, Sales, 2) LOAD * from ex2.xlsx;`

W programie Qlik Sense zwrócony zostanie następujący wynik:

Tabela z kolumnami kwalifikującymi podanymi jako trzeci parametr prefiksu crosstable

| Salesman | Year | Month | Sales |
| --- | --- | --- | --- |
| A | 2008 | Jan | 45 |
| A | 2008 | Feb | 65 |
| A | 2008 | Mar | 78 |
| A | 2008 | Apr | 12 |
| A | 2008 | May | 78 |
| A | 2008 | Jun | 22 |
| A | 2009 | Jan | 11 |
| A | 2009 | Feb | 23 |
| ... | ... | ... | ... |

## Dowiedz się więcej

* [Crosstable](https://help.qlik.com/pl-PL/sense/November2024/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/crosstable.htm)