Przeskocz do zawartości głównej

Odniesienia otwartego pola

Pole jest uważane za otwarte, jeśli nie jest zamknięte w funkcji agregacji.

Odniesienie otwartego pola to tablica, która może zawierać kilka wartości. W takim przypadku Qlik Sense dokona oceny NULL, nie wiedząc, która z tych wartości jest wymagana.

W wyrażeniach zawsze należy używać funkcji agregacji.

W przypadku stwierdzenia, że wyrażenie nie ocenia prawidłowo, istnieje duża szansa, że nie ma ono funkcji agregacji.

Odniesienie pola w wyrażeniu jest tablicą wartości. Na przykład:

Dwie tabele, z których jedna pokazuje, że Max(Invoice Date) jest pojedynczą wartością, a druga pokazuje, że Invoice Date jest tablicą wartości.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

Pole Data faktury należy zamknąć w funkcji agregacji, aby zwijało się ono w jedną wartość.

W przypadku nieużycia funkcji agregacji w wyrażeniu Qlik Sense domyślnie użyje funkcji Only(). Jeśli odniesienie pola zwróci kilka wartości, Qlik Sense zinterpretuje je jako NULL.

Dzielenie dat faktury za pomocą funkcji If()

Funkcja If() ta jest często używana do agregowania warunkowego. Zwraca ono wartość w zależności od tego, czy warunek dostarczony z funkcją daje wynik True czy False.

Wewnątrz aplikacji w arkuszu Naked field references znajduje się tabela zatytułowana Using If() on Invoice dates.

Wykonaj następujące czynności:

  1. Wybierz dostępną tabelę zatytułowaną Using If() on Invoice dates.
    Otworzy się panel właściwości.
  2. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  3. Kliknij Expression Symbol
    Otwiera się edytor wyrażeń.
  4. Wprowadź: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Kliknij przycisk Zastosuj.

Tabela przedstawiająca daty faktury z podziałem na daty referencyjne.

 Table showing invoice dates being split by a reference date.

To wyrażenie sprawdza, czy Invoice Date jest przed datą odniesienia 2/18/2013 i zwraca „Before”, jeśli jest. Jeżeli data jest późniejsza lub równa dacie odniesienia 2/18/2013, zwraca „After”. Data odniesienia jest wyrażona jako liczba całkowita 41323.

Więcej informacji, patrz if – funkcja skryptu i wykresu

Unikanie odniesień otwartego pola

Na pierwszy rzut oka to wyrażenie wygląda poprawnie:

If([Invoice Date]>= Date(41323) 'After', 'Before')

Powinno ocenić daty faktury po dacie odniesienia, zwracając „After” lub w przeciwnym razie Before”. Jednakże Invoice Date to odniesienie otwartego pola, nie posiada funkcji agregacji i jako takie jest tablicą z kilkoma wartościami i będzie oceniać do NULL. W poprzednim przykładzie w naszej tabeli była tylko jedna wartość Invoice Date na wartość Date, więc wyrażenie zostało obliczone poprawnie.

Zobaczmy, jak podobne wyrażenie oblicza się pod inną wartością wymiarową i jak rozwiązać problem z odniesieniami otwartego pola:

Unikanie odniesień otwartego pola w funkcji If()

Będziemy używać podobnego wyrażenia jak poprzednio:

If([Invoice Date]>= Date(41323), Sum(Sales))

Tym razem funkcja ta sumuje sprzedaż po dacie odniesienia.

Wewnątrz aplikacji w arkuszu Naked field references znajduje się tabela zatytułowana Sum(Amount).

Wykonaj następujące czynności:

  1. Wybierz dostępną tabelę Sum(Amount).
    Otworzy się panel właściwości.
  2. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  3. Kliknij Expression Symbol
    Otwiera się edytor wyrażeń.
  4. Wprowadź: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Kliknij przycisk Zastosuj.

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki wyrażenia przy użyciu funkcji If().

 Table showing year, sum of sales for each year, and the results of the expression

Porada: Nie zmieniamy Etykiety dla miar, aby pokazać różnice pomiędzy poszczególnymi wyrażeniami. W kolumnach z wartościami pieniężnymi zmieniamy Formatowanie liczb na Pieniądze, a Wzorzec formatu na $ #,##0;-$ #,##0.

Dla każdego roku istnieje szereg dat faktury, które następują po dacie odniesienia. Ponieważ nasze wyrażenie nie ma funkcji agregacji, daje wynik NULL. Prawidłowe wyrażenie powinno wykorzystywać funkcję agregacji, taką jak Min() lub Max() w pierwszym parametrze funkcji If():

If(Max([Invoice Date])>= Date(41323), Sum(Sales))

Wykonaj następujące czynności:

  1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  2. Kliknij Expression Symbol
    Otwiera się edytor wyrażeń.
  3. Wprowadź: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Kliknij przycisk Zastosuj.

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki różnych wyrażeń przy użyciu funkcji If().

Table showing year, sum of sales for each year, and the results of the different expressions

Alternatywnie funkcję If() można wstawić wewnątrz funkcji Sum():

Sum(If([Invoice Date]>= Date(41323), Sales) )

Wykonaj następujące czynności:

  1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  2. Kliknij Expression Symbol
    Otwiera się edytor wyrażeń.
  3. Wprowadź: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Kliknij przycisk Zastosuj.

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki różnych wyrażeń przy użyciu funkcji If().

Table showing year, sum of sales for each year, and the results of the different expressions

W przedostatnim wyrażeniu funkcja If() była oceniana raz na wartość wymiarową. W ostatnim wyrażeniu jest oceniana raz na wiersz w danych surowych. Różnica w sposobie oceny funkcji powoduje, że wyniki są różne, ale obie zwracają odpowiedź. Pierwsze wyrażenie po prostu dokonuje oceny NULL. Powyższa ilustracja przedstawia różnicę między wyrażeniami, używając 2/18/2013 jako daty odniesienia.