Dynamisk K-means-klustring i Qlik Sense

K-means-kluster är en teknik att dela in dimensioner med två mätvärden i olika grupperingar med hjälp av en matematisk algoritm. Funktionen finns sedan en tid i Sense och med den kan man enkelt färglägga dimensionsvärden i en scatter plot.



En fast graf skapas med en vanlig scatter plot - välj en dimension och två uttryck för X- och Y-axlarna. K-means kommer in under färginställningarna.


=pick(aggr(KMeans2D(3,

sum((SalesAmount-CostAmount)/SalesAmount), // Gross Margin

sum(SalesAmount) // Alaes Amount

),

CustomerName

)+1,$(=''''&concat(chr(65+valueloop(0,2)),''',''')&''''))


Det här är ett komplex uttryck, men om du inte vill förstå det i grunden räcker det att kopiera hela uttrycket och byta ut valda delar:


=pick(aggr(KMeans2D(3,

sum((SalesAmount-CostAmount)/SalesAmount), // Gross Margin

sum(SalesAmount) // Sales Amount

),

CustomerName

)+1,$(=''''&concat(chr(65+valueloop(0,2)),''',''')&''''))


Blå 3: Antal kluster du vill ha

Rött uttryck: Uttrycket för Y-axeln

Grönt uttryck: Uttrycket för X-axeln

Turkos dimension: Dimensionen som utgör bollarna i diagrammet

Lila 2: Antal kluster minus 1, så om blå sattes till 3 ska detta vara 2.


För att ge användaren största möjliga flexibilitet kan man göra själva grafen dynamisk. Användaren får då styra vilken dimension, vilka uttryck och hur många kluster man vill ha. På så sätt kan användaren enkelt vrida och vända på sitt data och finna nya insikter.


Skapa fyra stycken variabler som kommer att användas för styrningen: vDim, vMeasure1, vMeasure2 och vNoClusters.


Lägg till fyra stycken motsvarande Variable input (finns under Custom objects -> Qlik Dashboard bundle) och knyt respektive objekt till respektive variabel. Sätt Show as till Drop down för att få en drop-down-meny som användaren kan välja från.


I detta fall väljer vi att hårdkoda värdena som användaren kan välja. För dimensions-valet lägger vi till fasta värden för de dimensioner som ska finnas i menyn.



För vMeasure1 och vMeasure2 lägger vi på snarlikt sätt till fasta värden för våra uttryck. För att komma åt vilket värde som är valt väljer vi att först lägga till en beskrivning av uttrycket och sedan själva uttrycket. Vi skiljer på de två olika delarna med ett pipe-tecken. Till exempel för Sales Amount anger vi följande värde: "Sales Amount|sum(SalesAmount)" (utan citationstecken). Vi kommer senare att dela upp detta när vi ska använda uttrycken.



Till slut för vNoClusters lägger vi in en lista på värden för antalet kluster användaren ska kunna välja. Till exempel 1,2,3,4,5.


Nu ska du kunna testa dina variabel inputs och se att användaren får fram en lista med värden att välja på.


Om allt fungerar fint ska vi nu skapa en scatter chart som bygger på dessa variabler. Lägg till en scatter chart och lägg i den till följande dimension:

Dimension: =$(vDim)


Lägg till två mått med uttrycken:

Mått 1: =$(=subfield('$(vMeasure1)','|',2))

Mått 2: =$(=subfield('$(vMeasure2)','|',2))


Måttuttrycken plockar ut den delen av variabelvärdet som följer efter pipe-tecknet |. Vi vill också plocka ut beskrivningen (det som finns före pipe-tecknet) i Label-fältet:

='$(=subfield('$(vMeasure1)','|',1))'

='$(=subfield('$(vMeasure2)','|',1))'


Till sist ska vi också ställa in färguttrycket. Det är som tidigare, men nu använder vi variablerna istället för hårt valda värden:


pick(aggr(KMeans2D($(vNoClusters),

$(=subfield('$(vMeasure1)','|',2)),

$(=subfield('$(vMeasure2)','|',2))

),

$(vDim)

)+1,$(=''''&concat(chr(65+valueloop(0,$(vNoClusters)-1)),''',''')&''''))


Med hjälp av detta får vi en dynamisk scatter plot där användaren kan välja vad de vill se på många sätt.




 

Skriven av: Morgan Kejerhag

Morgan Kejerhag har arbetat med Qlik-plattformen sedan 2005 och är en av Sveriges mest erfarna konsulter. Under åren har Morgan arbetat med flertalet multinationella bolag där han lett arbetet i att bygga upp stora Qlik-miljöer såväl som små kunder. LinkedIn Kontaktuppgifter