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:
| Del | Primer | Pomen |
|---|---|---|
| Identifikator | $, 1, $1 | Izhodišč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 )
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.
$(=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.
{'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
| Zapis | Pomen |
|---|---|
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?
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 potrebujeteAbove(),Aggr()ali ustrezen podatkovni model. - Neujemajoč se format datuma. Iskanje
{">=1.1.2025"}ne najde ničesar, če je polje oblikovano kot2025-01-01. - Pozabljena odvisna polja. Če filtrirate po
Datum, uporabnik pa je izbralMesec, 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 leto | Sum({<Leto={2024}>} Prodaja) |
| prezreti izbor regije | Sum({<Regija=>} Prodaja) |
| prezreti vse izbore | Sum({1} Prodaja) |
| zadnje izbrano leto | Sum({<Leto={$(=Max(Leto))}>} Prodaja) |
| leto prej | Sum({<Leto={$(=Max(Leto)-1)}>} Prodaja) |
| vse razen ene vrednosti | Sum({<Regija={"*"}-{'Gorenjska'}>} Prodaja) |
| kupce z lansko prodajo | Kupec=P({<Leto={2024}>} Kupec) |