# CalcDim — funkcja wykresu

W wyrażeniu wymiaru funkcja CalcDim() zastępuje automatyczną interpretację aparatu dotyczącą wewnętrznej obsługi wyrażenia. W szczególności funkcja zapobiega tworzeniu nowego pola wewnętrznego w modelu danych. Zamiast tego, wybory dokonane w aplikacji są traktowane jak wybory w odpowiednich polach oryginalnego modelu danych.

Tej funkcji nie można używać w skrypcie ładowania. Ponadto najlepszą praktyką w zakresie wydajności systemu jest ładowanie pól używanych w wyliczanym wymiarze jako pól logicznych za pośrednictwem skryptu ładowania, jeśli to możliwe. CalcDim() oferuje sposób kontrolowania zachowania silnika w sytuacjach, w których ładowanie wyliczanego pola ze skryptu jest niemożliwe.

W Qlik Sense wyrażenie wymiaru jest domyślnie realizowane jako „pole w locie”, czyli jako rzeczywiste, tworzone na żądanie pole widoczne na bieżącym pasku wyboru. Wybory są stosowane i wnioskowane w tym polu, podobnie jak w przypadku każdego pola logicznego ze skryptu.

Wyrażenie opakowane w CalcDim() będzie działać tak samo jak wszystkie wyrażenia wymiaru wyliczanego działają w QlikView, co polega na doraźnym mapowaniu wyliczanych wartości na bazowe wartości pola źródłowego. Wszystkie obliczenia „pola w locie” można przenieść do wymiarów wyliczanych za pomocą funkcji CalcDim(), ponieważ wymiar wyliczany musi spełniać mniej wymagań opartych na modelu danych niż odpowiadające mu obliczenia „pola w locie”. Transformacja ta może być pożądana w celu zagwarantowania podobnego działania dla wszystkich wyliczanych wymiarów, w przypadku których model danych może uniemożliwić użycie pola wyliczanego w locie w niektórych sytuacjach, ale nie w innych.

[Pola obliczane](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

Składnia:

CalcDim(expr)

Typ zwracanych danych: wartość podwójna

Argumenty

| Argument | Opis |
| --- | --- |
| expr | Wyrażenie używane jako wymiar lub jako segment w wyrażeniu wymiaru. |

## Kiedy używać CalcDim

Funkcja CalcDim() jest przydatna, gdy potrzebna jest większa kontrola nad sposobem, w jaki silnik Qlik obsługuje pola wywoływane w wyrażeniu wymiaru.

Qlik Sense domyślnie decyduje automatycznie, czy utworzyć pola wewnętrzne w modelu danych i odwołać się do nich, gdy używane jest niestandardowe wyrażenie wymiaru. Qlik Sense tworzy i wykorzystuje te wewnętrzne pola, gdy tylko jest to możliwe. Jeśli nie jest to możliwe, wyrażenie jest obsługiwane w odniesieniu do istniejących pól modelu danych, na których się opiera.

W zależności od zastosowania to automatyczne przetwarzanie może nie zawsze być pożądane. Na przykład, jeśli używasz zmiennej w wyrażeniu wymiaru, automatyczne tworzenie nowych pól może stać się problematyczne. W takim przypadku należy użyć CalcDim(), aby wymusić obsługę wyrażenia bez tej metody.

Oto najczęstsze zastosowania:

* Zawartość QlikView została zmigrowana do Qlik Sense i chcesz zachować metodę przetwarzania QlikView dla wyliczanych wymiarów.

* Chcesz uprościć działanie wyboru w swojej aplikacji. Na przykład wolisz wyświetlać wybory pól jako wybory w polach z oryginalnego modelu danych, a nie jako wybory w nowych polach.

* Ta sytuacja wymaga wyrażenia ad-hoc w celu zapewnienia spójności i wydajności. Na przykład, jeśli wyrażenie wymiaru zawiera kontrolowane przez użytkownika dynamiczne parametry wizualizacji, takie jak kontrolowane formatowanie, wartości odcięcia lub okresy.

Przykłady funkcji

| Przykład | Wynik |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Dokonanie wyboru w wizualizacji wykorzystującej ten wymiar zostanie przetworzone i wyświetlone jako wybór w powiązanej wartości pola Year z modelu danych.<br><br>I odwrotnie, powiedzmy, że nie opakowujesz wyrażenia w CalcDim(). W tym przypadku wyglądałoby to następująco:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Dokonanie wyboru w powyższym wyrażeniu zostałoby przetworzone i wyświetlone jako wybór w wewnętrznym polu =if(Year &lt; 2023, 'Older', Year), które nie znajduje się w modelu danych. |

## Przykład 1 — Proste porównanie

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### Wyrażenia wykresu i wyniki

Przegląd

W tym przykładzie wykonasz następujące czynności:

* Dodaj wbudowaną tabelę i załaduj dane do aplikacji.

* Utworzysz tabelę w celu wizualizacji danych i wykonania obliczeń.

* Dokonasz wyborów w tabeli, aby zaobserwować różnicę w działaniu.

Otwórz Edytor ładowania danych i dodaj następujący skrypt ładowania do nowej sekcji.

Skrypt ładowania ładuje wbudowaną tabelę. Tabela ta zawiera dwa pola: pole imienia i pole nazwiska danej osoby.

Skrypt ładowania

```
Names:

Load * inline [
FirstName,LastName
John,Doe
Amanda,Honda
Amalia,Craig
Cart,Lynch
];
```

Tworzenie tabeli

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* FirstName

* LastName

Następnie dodaj każde z obserwowanych wyrażeń jako wymiary w tabeli:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

Tabela powinna wyglądać następująco.

Tabela Qlik SenseQlik Sense z przykładowymi wynikami

| FirstName | LastName | =FirstName & ' ' & LastName | =CalcDim(FirstName & ' ' & LastName) |
| --- | --- | --- | --- |
| John | Doe | John Doe | John Doe |
| Amanda | Honda | Amanda Honda | Amanda Honda |
| Amalia | Craig | Amalia Craig | Amalia Craig |
| Cart | Lynch | Cart Lynch | Cart Lynch |

Porównanie: dokonywanie wyboru

W kolumnie =FirstName & ' ' & LastName tabeli wybierz wartość John Doe. Zauważ, że na pasku narzędzi wyboru wartość jest wybrana jako wartość z pola o nazwie =FirstName&' '&LastName.

Wyczyść wybór.

W kolumnie =CalcDim(FirstName & ' ' & LastName) tabeli wybierz wartość John Doe. Na pasku narzędzi wyboru wartość jest wybierana jako wartości z dwóch różnych pól: FirstName i LastName.

Te dwa wyrażenia przedstawiają te same informacje: konkatenację pól FirstName i LastName. Różnica polega na tym, że bez CalcDim() tworzone jest pole syntetyczne do przechowywania obliczeń. W przypadku CalcDim() oryginalne pola z modelu danych są używane jako podstawa dla wyliczanego wymiaru.

## Przykład 2 — Praktyczne zastosowanie do modyfikacji domyślnego działania

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### Wyrażenia wykresu i wyniki

Przegląd

W tym przykładzie tworzymy dynamiczne wyrażenia wymiaru odwołujące się do zmiennej, a nie do wartości statycznych.

W tym przykładzie wykonasz następujące czynności:

* Dodaj wbudowaną tabelę i załaduj dane do aplikacji.

* Utworzysz zmienną do dynamicznego przechowywania wartości.

* Utwórz tabelę, aby wizualizować dane i wykonywać obliczenia.

* Dokonasz wyborów w tabeli, aby zaobserwować różnicę w działaniu.

Otwórz Edytor ładowania danych i dodaj następujący skrypt ładowania do nowej sekcji.

Skrypt ładowania ładuje wbudowaną tabelę. Tabela ta zawiera pole daty i pole wyliczane, Year, które jest wyprowadzane z nieprzetworzonych dat.

Skrypt ładowania

```
SET DateFormat='MM/DD/YYYY';
						
Transactions:

Load *,

RowNo() as ID,
Year(date) as Year
;

Load * Inline
[
date,amount
'1/19/2022',37.23
'2/28/2022',88.27
'3/16/2022',53.80
'4/1/2022',82.06
'5/16/2022',87.21
'6/26/2022',45.89
'7/9/2022',36.23
'8/2/2022',76.11
'9/26/2022',84.21
'10/29/2022',67.67
'1/1/2023',100.49
'2/24/2023',99.47
'3/6/2023',50.02
'4/10/2023',2.05
'5/20/2023',75.64
'6/25/2023',98.11
'7/19/2023',30.00
'9/27/2023',76.11
'10/26/2023',43.21
'11/12/2023',135.41
'1/15/2024',67.24
];
```

Tworzenie zmiennych

Załaduj dane i otwórz arkusz. Utwórz zmienną o nazwie vCutoffYear i nadaj jej następującą Definicję: 2023

Tworzenie tabeli

Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:

* date

* Year

* amount

Następnie dodaj każde z obserwowanych wyrażeń jako wymiary w tabeli:

* =if(Year &lt; $(vCutoffYear), 'Older', Year)

* =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year))

Tabela powinna wyglądać następująco.

Tabela Qlik SenseQlik Sense z przykładowymi wynikami

| date | Year | amount | if(Year &lt; $(vCutoffYear), 'Older', Year) | =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) |
| --- | --- | --- | --- | --- |
| 1/19/2022 | 2022 | 37.23 | Older | Older |
| 2/28/2022 | 2022 | 88.27 | Older | Older |
| 3/16/2022 | 2022 | 53.80 | Older | Older |
| 4/1/2022 | 2022 | 82.06 | Older | Older |
| 5/16/2022 | 2022 | 87.21 | Older | Older |
| 6/26/2022 | 2022 | 45.89 | Older | Older |
| 7/9/2022 | 2022 | 36.23 | Older | Older |
| 8/2/2022 | 2022 | 76.11 | Older | Older |
| 9/26/2022 | 2022 | 84.21 | Older | Older |
| 10/29/2022 | 2022 | 67.67 | Older | Older |
| 1/1/2023 | 2023 | 100.49 | 2023 | 2023 |
| 2/24/2023 | 2023 | 99.47 | 2023 | 2023 |
| 3/6/2023 | 2023 | 50.02 | 2023 | 2023 |
| 4/10/2023 | 2023 | 2.05 | 2023 | 2023 |
| 5/20/2023 | 2023 | 75.64 | 2023 | 2023 |
| 6/25/2023 | 2023 | 98.11 | 2023 | 2023 |
| 7/19/2023 | 2023 | 30.00 | 2023 | 2023 |
| 9/27/2023 | 2023 | 76.11 | 2023 | 2023 |
| 10/26/2023 | 2023 | 43.21 | 2023 | 2023 |
| 11/12/2023 | 2023 | 135.41 | 2023 | 2023 |
| 1/15/2024 | 2024 | 67.24 | 2024 | 2024 |

Porównania, część 1: Działanie bez CalcDim()

W powyższej tabeli nie ma różnicy między dwiema kolumnami wyliczanego wymiaru.

W kolumnie if(Year &lt; $(vCutoffYear), 'Older', Year) tabeli wybierz wartość 2023. Zauważ, że na pasku narzędzi wyboru wartość jest wybrana jako wartość z pola o nazwie =if(Year&lt;2023,'Older',Year).

Następnie zmień Definicję zmiennej vCutoffYear na 2024. Zauważ, że podczas gdy pole wyboru =if(Year&lt;2023,'Older',Year) jest takie samo i zachowuje wybraną wartość 2023, dane w tabeli uległy zmianie. Wartość 2023 została zmieniona na wartość Older. Jeśli wybierzesz Older w kolumnie if(Year &lt; $(vCutoffYear), 'Older', Year), wybór Older zostanie dokonany w nowym polu: =if(Year&lt;2024,'Older',Year).

Zasadniczo dla każdej wartości zmiennej vCutoffYear tworzone jest wewnętrznie nowe pole. Podczas pracy z jednoczesnymi i zmieniającymi się wyborami takie działanie może nie być pożądane i może zwiększyć złożoność interpretacji danych.

Porównania, część 2: Działanie bez CalcDim()

Teraz, gdy widziałeś zachowanie wyrażenia, gdy nie jest ono zawinięte w CalcDim(), wyczyść wszystkie zaznaczenia w aplikacji. Zresetuj vCutoffYear zmienną do wartości 2023.

W kolumnie =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) tabeli wybierz wartość 2023. Zauważ, że na pasku narzędzi wyboru wartość jest wybrana jako wartość z pola bazowego o nazwie Year.

Następnie zmień Definicję zmiennej vCutoffYear na 2024. Pole wyboru Year jest takie samo, zachowuje wybraną wartość 2023, a dane w tabeli uległy zmianie, jak widać bez CalcDim(). Jeśli jednak teraz wybierzesz Older w kolumnie =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)), wartość 2024 zostanie wybrana w Year.

Wszystkie wybory dokonane w wymiarze wyliczanym opakowanym w CalcDim() zostaną odzwierciedlone jako wybory w polach bazowych przywoływanych z oryginalnego modelu danych. Może to uprościć interpretację danych i zapobiec pojawianiu się zagmatwanych, złożonych wyrażeń na pasku narzędzi wyboru, gdy użytkownicy korzystają z treści analitycznych.

## Dowiedz się więcej

* [Pola obliczane](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [Wymiary wyliczane](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)