Napredni vodič

Set analysis v Qliku: praktični vodič s primeri

Kako izračunati letošnjo in lansko prodajo v istem grafu, številke, ki ne upoštevajo izborov, in kupce, ki lani so in letos niso kupovali.

Vsaka mera v Qliku se privzeto izračuna nad trenutnimi izbori. Če uporabnik izbere leto 2025, Sum(Prodaja) vrne prodajo leta 2025. Kaj pa, če želite v isti tabeli prikazati še prodajo leta 2024? Ali delež v skupni prodaji, ki se ne sme spremeniti, ko uporabnik izbere regijo?

Za to je set analysis: način, da agregaciji poveste, nad katerim naborom podatkov naj računa — ne glede na to, kaj je trenutno izbrano.

Osnovna sintaksa

Set izraz zapišete v zavite oklepaje takoj za odprtim oklepajem agregacijske funkcije:

Sum( {<Leto = {2024}>} Prodaja )

Preberemo: vsota prodaje za trenutne izbore, a z letom, nastavljenim na 2024. Set izraz ima tri dele:

DelPrimerPomen
Identifikator$, 1, $1Izhodiščni nabor: trenutni izbori ($, privzeto), vsi podatki (1), prejšnji izbori ($1) ali zaznamek.
Modifikator<Leto = {2024}>Spremembe izborov za posamezna polja.
Množica vrednosti{2024}, {'Gorenjska'}Vrednosti, ki naj veljajo kot izbrane.

Osnovni primeri

Fiksna vrednost

// Prodaja za leto 2024 in regijo Gorenjska
Sum( {<Leto = {2024}, Regija = {'Gorenjska'}>} Prodaja )

Številke pišite brez narekovajev, besedilne vrednosti v enojnih narekovajih. Več modifikatorjev ločite z vejico.

Prezri izbore v enem polju

// Prodaja vseh regij, ostali izbori (leto, izdelek …) še vedno veljajo
Sum( {<Regija = >} Prodaja )

Prazen modifikator Regija = pomeni »počisti izbor v polju Regija«. Tipična uporaba je delež:

Sum(Prodaja) / Sum( {<Regija = >} Prodaja )
Preizkusite: izberite eno ali več regij. Stolpec Prodaja upošteva izbor, stolpec Sum({<Regija=>} Prodaja) ga prezre, izbor leta 2025 pa še vedno velja. KPI desno spodaj s {1} prezre vse izbore — tudi leto. Vzorčni podatki v k€.

Prezri vse izbore

// Celotna prodaja v aplikaciji, ne glede na izbore
Sum( {1} Prodaja )

Primerjava obdobij

Najpogostejša uporaba set analysis je primerjava letošnjega in lanskega leta. Namesto fiksne letnice uporabimo razširitev z znakom za dolar (dollar-sign expansion), ki izraz izračuna, preden se izvede set analysis:

// Prodaja v zadnjem (izbranem) letu
Sum( {<Leto = {$(=Max(Leto))}>} Prodaja )

// Prodaja v letu pred tem
Sum( {<Leto = {$(=Max(Leto) - 1)}>} Prodaja )

Če uporabnik izbere leto 2025, $(=Max(Leto)) postane 2025, druga mera pa računa za 2024. Če izbere tudi mesec marec, obe meri upoštevata marec — dobite primerjavo »marec letos proti marcu lani«.

Rast v odstotkih

Sum( {<Leto = {$(=Max(Leto))}>} Prodaja )
  / Sum( {<Leto = {$(=Max(Leto) - 1)}>} Prodaja ) - 1

Mero oblikujte kot odstotek. V praksi obe meri shranite kot glavna elementa ali spremenljivki, da jih ne pišete vsakič znova. YTD, prejšnji mesec in drseča obdobja so podrobno opisani v vodiču Glavni koledar in časovne primerjave.

Preizkusite: izberite leto. $(=Max(Leto)) se razširi v izbrano leto, druga mera pa v leto prej — brez izbora je to zadnje leto v podatkih (2025). Pri letu 2023 lanskih podatkov ni, zato je stolpec prazen.

Zadnjih 12 mesecev

Sum( {<Datum = {">=$(=Date(AddMonths(Max(Datum), -12) + 1))<=$(=Date(Max(Datum)))"},
       Leto =, Mesec = >} Prodaja )

Pozor na dvoje: datum, ki ga vrne Date(), mora biti v enaki obliki kot vrednosti v polju Datum, sicer iskanje ne najde ničesar. In ker filtriramo po datumu, počistimo izbore v poljih Leto in Mesec — sicer bi se izbor »2025« in razpon zadnjih 12 mesecev izključevala.

Iskanje v set izrazih

Namesto naštevanja vrednosti lahko v dvojnih narekovajih uporabite iskanje:

// Vsi kupci, katerih ime se začne na "A"
Sum( {<Kupec = {"A*"}>} Prodaja )

// Računi nad 1.000 €
Sum( {<Znesek = {">1000"}>} Znesek )

// Kupci, ki imajo skupaj več kot 10.000 € prodaje
Sum( {<Kupec = {"=Sum(Prodaja) > 10000"}>} Prodaja )

Zadnji primer je napredno iskanje: za vsakega kupca posebej se izračuna izraz za enačajem, izberejo se tisti, pri katerih je rezultat resničen.

Enojni ali dvojni narekovaji? {'Gorenjska'} pomeni natančno to vrednost. {"Gor*"} pomeni iskanje z nadomestnimi znaki ali pogojem. Če dvojne narekovaje uporabite za navadno vrednost, bo pogosto delovalo — dokler vrednost ne bo vsebovala znaka, ki ima pri iskanju poseben pomen.

Dodajanje, odvzemanje in operatorji

ZapisPomen
Regija += {'Gorenjska'}Trenutnim izborom v polju dodaj Gorenjsko.
Regija -= {'Gorenjska'}Iz trenutnih izborov odstrani Gorenjsko.
{"*"} - {'Gorenjska'}Vse regije razen Gorenjske.
+Unija — vrednosti iz ene ali druge množice.
*Presek — vrednosti, ki so v obeh množicah.
-Razlika — vrednosti iz prve, ki niso v drugi.
/Simetrična razlika — vrednosti, ki so le v eni od množic.
// Prodaja vseh regij razen Gorenjske, ne glede na izbor regije
Sum( {<Regija = {"*"} - {'Gorenjska'}>} Prodaja )

Funkciji P() in E()

P() vrne možne vrednosti polja za podan nabor, E() pa izključene. S tem odgovorite na vprašanja, ki se jih s klikanjem ne da:

// Letošnja prodaja kupcem, ki so kupovali že lani
Sum( {<Leto = {$(=Max(Leto))},
       Kupec = P({<Leto = {$(=Max(Leto) - 1)}>} Kupec)>} Prodaja )

// Število kupcev, ki so lani kupovali, letos pa (še) ne
Count( {<Leto = {$(=Max(Leto) - 1)},
         Kupec = E({<Leto = {$(=Max(Leto))}>} Kupec)>} DISTINCT Kupec )

Drugi primer je klasičen seznam za prodajno ekipo: kateri lanski kupci se letos še niso vrnili?

Vzorčni podatki, zadnje leto 2025. Tabela uporablja isti set izraz kot KPI, z dimenzijo Kupec in merama Sum({<Leto={2024}, Kupec=E({<Leto={2025}>} Kupec)>} Prodaja) ter prodajo v letu 2025, ki je povsod prazna.

Set izraz za celoten izraz

Novejše različice Qlik Sense omogočajo, da set izraz zapišete pred celotnim izrazom. Velja za vse agregacije v njem, kar izraze precej skrajša:

// Namesto ponavljanja istega seta v števcu in imenovalcu
{<Leto = {$(=Max(Leto))}>} Sum(Prodaja) / Count(DISTINCT Kupec)

Če ima posamezna agregacija še svoj (notranji) set izraz, ta podeduje zunanjega; kjer se oba nanašata na isto polje, velja notranji.

Najpogostejše napake

  • Set analysis se izračuna enkrat za cel graf, ne za vsako vrstico. $(=Max(Leto)) v tabeli po letih ne pomeni »leto v tej vrstici«, temveč največje leto v trenutnih izborih. Za izračune po vrsticah potrebujete Above(), Aggr() ali ustrezen podatkovni model.
  • Neujemajoč se format datuma. Iskanje {">=1.1.2025"} ne najde ničesar, če je polje oblikovano kot 2025-01-01.
  • Pozabljena odvisna polja. Če filtrirate po Datum, uporabnik pa je izbral Mesec, veljata oba hkrati (presek) in rezultat je pogosto prazen. Počistite povezana polja: Leto =, Mesec =.
  • Imena polj s presledki ali šumniki zapišite v oglate oklepaje: {<[Poslovna enota] = {'Kranj'}>}.
  • Preverjanje z razširitvijo. Ko izraz ne deluje, ga začasno prikažite kot besedilo, npr. ='$(=Max(Leto) - 1)', in preverite, kaj se v resnici razširi.

Povzetek

Želim …Izraz
fiksno letoSum({<Leto={2024}>} Prodaja)
prezreti izbor regijeSum({<Regija=>} Prodaja)
prezreti vse izboreSum({1} Prodaja)
zadnje izbrano letoSum({<Leto={$(=Max(Leto))}>} Prodaja)
leto prejSum({<Leto={$(=Max(Leto)-1)}>} Prodaja)
vse razen ene vrednostiSum({<Regija={"*"}-{'Gorenjska'}>} Prodaja)
kupce z lansko prodajoKupec=P({<Leto={2024}>} Kupec)