# 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 wymiarze wyliczanym jako pól logicznych za pośrednictwem skryptu ładowania, jeśli to możliwe. CalcDim() oferuje sposób kontrolowania zachowania silnika w scenariuszach, w których ładowanie pola wyliczanego ze skryptu nie jest moż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 do tego pola, podobnie jak do 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”. Ta transformacja może być pożądana w celu zagwarantowania podobnego zachowania dla wszystkich wymiarów wyliczanych, gdzie model danych może uniemożliwiać użycie obliczenia pola tymczasowego w niektórych przypadkach, ale nie w innych.

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

CalcDim(expr)

Typ zwracanych danych: Dual

Argumenty

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

## Kiedy używać

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.

Domyślnie Qlik Sense automatycznie decyduje, czy tworzyć i odwoływać się do pól wewnętrznych w modelu danych, gdy używasz niestandardowego wyrażenia wymiaru. Qlik Sense tworzy i używa tych pól wewnętrznych zawsze, gdy 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 przypadku użycia, 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 użyj 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, która używa tego wymiaru, zostanie przetworzone i wyświetlone jako wybór w powiązanej wartości pola Year z modelu danych.<br><br>I odwrotnie, załóżmy, że nie zawijasz wyrażenia w CalcDim(). W tym przypadku wyglądałoby to tak:<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/sense/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.

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

* Dokonaj wyborów w tabeli, aby zaobserwować różnicę w zachowaniu.

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 następujących 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ść JohnDoe. Zauważ, że na pasku narzędzi wyboru wartość jest wybrana jako wartość z pola o nazwie =FirstName' 'LastName.

Wyczyść selekcję.

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

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

## Przykład 2 – Praktyczny przypadek użycia do modyfikacji domyślnego zachowania

[](https://help.qlik.com/en-US/sense/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.

* Dokonaj wyborów w tabeli, aby zaobserwować różnicę w zachowaniu.

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 zmiennej

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 następujących wyrażeń jako wymiary w tabeli:

* =if(Year $(vCutoffYear), 'Older', Year)

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

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

Tabela Qlik SenseQlik Sense z przykładowymi wynikami

| date | Year | amount | if(Year $(vCutoffYear), 'Older', Year) | =CalcDim(if(Year $(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: Zachowanie bez CalcDim()

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

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

Następnie zmień Definicję zmiennej vCutoffYear na 2024. Zauważ, że podczas gdy pole wyboru =if(Year2023,'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 $(vCutoffYear), 'Older', Year), wybór Older zostanie dokonany w nowym polu: =if(Year2024,'Older',Year).

Zasadniczo, dla każdej wartości zmiennej vCutoffYear wewnętrznie tworzone jest 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 $(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 zaznaczenia Year jest takie samo, zachowuje zaznaczoną wartość 2023, a dane w tabeli zmieniły się, jak widać bez CalcDim(). Jednakże, jeśli teraz wybierzesz Older w kolumnie =CalcDim(if(Year $(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 zapobiega pojawianiu się zaśmieconych, złożonych wyrażeń w słupku zaznaczeń, gdy użytkownicy korzystają z treści analitycznych.

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

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