Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

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.

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.

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 arkuszuNaked field references znajduje się tabela zatytułowana Using If() on Invoice dates.

  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 symbol Wyrażenie.
    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.

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

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).

  1. Wybierz dostępną tabelę Sum(Amount).
    Otworzy się panel właściwości.
  2. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  3. Kliknij symbol Wyrażenie.
    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().

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki wyrażenia

WskazówkaNie 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))

  1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  2. Kliknij symbol Wyrażenie.
    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().

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki różnych wyrażeń

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

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

  1. Kliknij przycisk Dodaj kolumnę i wybierz Miara.
  2. Kliknij symbol Wyrażenie.
    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().

Tabela przedstawiająca rok, sumę sprzedaży za każdy rok oraz wyniki różnych wyrażeń

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.

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!