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:
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.
Wykonaj następujące czynności:
- Wybierz dostępną tabelę zatytułowaną Using If() on Invoice dates.
Otworzy się panel właściwości. - Kliknij przycisk Dodaj kolumnę i wybierz Miara.
- Kliknij symbol .
Otwiera się edytor wyrażeń. - Wprowadź: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Kliknij przycisk Zastosuj.
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:
- Wybierz dostępną tabelę Sum(Amount).
Otworzy się panel właściwości. - Kliknij przycisk Dodaj kolumnę i wybierz Miara.
- Kliknij symbol .
Otwiera się edytor wyrażeń. - Wprowadź: If( [Invoice Date]>= 41323, Sum(Sales) )
- Kliknij przycisk Zastosuj.
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:
- Kliknij przycisk Dodaj kolumnę i wybierz Miara.
- Kliknij symbol .
Otwiera się edytor wyrażeń. - Wprowadź: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Kliknij przycisk Zastosuj.
Alternatywnie funkcję If() można wstawić wewnątrz funkcji Sum():
Sum(If([Invoice Date]>= Date(41323), Sales) )
Wykonaj następujące czynności:
- Kliknij przycisk Dodaj kolumnę i wybierz Miara.
- Kliknij symbol .
Otwiera się edytor wyrażeń. - Wprowadź: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Kliknij przycisk Zastosuj.
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.