Dynamisk pivot-tabell

Det är inte ovanligt att man i QlikView har en pivot-tabell med cykliska dimensioner som låter användaren själv bestämma en kombination av olika kolumner. Cykliska grupper finns inte på samma sätt i Sense där man istället oftast arbetar med alternativa dimensioner. Just pivot-tabeller i Sense har inte stöd för alternativa dimensioner utan en annan lösning behöver hittas. I detta inlägg ska vi gå igenom hur dynamiska pivot-tabeller i Sense kan sättas upp.


I tabellen ovan kan användaren genom att klicka på respektive knapp med snurra välja vilket fält som ska visas i kolumnen. På detta sätt kan en pivot-tabell svara på ett mycket stort antal frågor.


Översikt

Vår lösning i Sense kommer att fungera som så att användaren får drop-down-menyer för respektive dynamisk kolumn i pivot-tabellen. Alternativen i menyerna kommer från scriptet och valt fält kommer att läggas i en variabel. Variabeln används sedan för att styra kolumnen i pivot-tabellen som sedan visas precis som den lagts dit manuellt.


Urvalsfält

Det första vi behöver göra är att i scriptet lägga till ett antal frikopplade fält som innehåller namnen på de kolumner som vi ska låta användaren välja mellan. I detta fall har vi listat de exakta fältnamnen, men det skulle också vara möjligt att utöka lösningen till att hantera separata visningsnamn och fältnamn.


Antal fält som vi sätter upp ska vara samma som antalet kolumner vi vill ha möjlighet att visa i pivot-tabellen. I det här exemplet kommer vi att använda tre kolumner, men detta kan enkelt utökas till fler.


I scriptet skapar vi först en tabell och läser sedan från den tre gånger för att skapa upp respektive fält. Namnen på fältet börjar med ett procent-tecken så att vi kan dölja dem från användaren med hjälp av HidePrefix.


Set HidePrefix = '%';

Dims:
Load rowno() as ReportDimID,* INLINE [
    ReportDim
    Country
    SalesOffice
    EmployeeID
    CustomerName
    City
    StateProvince
    ShipperName
    CategoryName
    ProductName
];

Dim1:
Load
    ReportDimID as %ReportDimID1,
    ReportDim as %ReportDim1
resident Dims;

Dim2:
Load
    ReportDimID as %ReportDimID2,
    ReportDim as %ReportDim2
resident Dims;

Dim3:
Load
    ReportDimID as %ReportDimID3,
    ReportDim as %ReportDim3
resident Dims;
drop table Dims;

Variabler

Nästa steg är att skapa tre variabler - en för varje fält som vi vill kunna lägga till i pivot-tabellen. Variablerna kommer vi att använda för att låta hämta värdet från drop-down-menyer koppade till urvalsfälten.



Drop-down-menyer

För att välja fält som ska visas i respektive kolumn kommer vi att använda drop-down-menyer vars värden består av kolumn-namnen - de värden som finns i våra rapportfält från scriptet. Lägg ut tre stycken Variable Input och ställ in dem enligt nedan. Variable Input hittar du under Custom Objects 🡒 Qlik Dashboard Bundle.


För en variable input lägger man till en variabel som kommer att få det valda värdet. Värdena som ska finnas att välja i drop-down-menyn sätter vi in som en dynamisk lista från fälten från scripten. I fälten ska värdena sättas in med ett pipe-tecken mellan sig, t.ex. City|Country|CustomerName.


Denna sammansättning av fältnamn kan vi skapa dynamiska genom att hämta fältvärdena i fälten från scripten och sätta ihop dem pipe-tecken mellan. Detta kan göras med concat()-funktionen. {1} i funktionen innebär att vi tar alla värden från fältet även om användaren på något sätt gjort ett urval. För den andra och tredje drop-down-menyn lägger vi också till ett alternativ "-" först i listan. Detta alternativ kommer vi att använda för att dölja kolumnen om användaren inte vill se den.


Dynamic values för de olika fälten:

1: =concat({1} %ReportDim1,'|')

2: ='-|'&concat({1} %ReportDim2,'|')

3: ='-|'&concat({1} %ReportDim3,'|')


Pivot-tabell

Nästa steg blir att skapa själva pivot-tabellen. Lägg till tre dimensioner i tabellen enligt nedan. Därefter kan det eller de uttryck som behövs läggas till.

Som fält hämtar vi variabelvärdet med $(vReportDim1) osv. Variabelvärdet är det fält som valts i dropdown-menyn, t.ex. Country. Vi sätter också värdet som etikett. För den andra och den tredje kolumnen lägger vi också på ett villkor för att kolumnen ska visas - visa endast om värdet i variabeln/drop-down inte är ett bindestreck. Detta döljer kolumnen om bindestreck är valt.


Den sista inställningen vi ska göra är att hantera ett fel som uppstår om användaren väljer samma fält i flera drop-down-menyer. För att göra detta lägger vi på ett beräkningsvillkor på tabellen och visar ett felmeddelande när samma fält valts. Villkoret som kontrollerar om samma fält valts:

(('$(vReportDim1)'='$(vReportDim2)') + ('$(vReportDim2)'='$(vReportDim3)') + ('$(vReportDim1)'='$(vReportDim3)'))=0

Uttrycket kollar variablerna parvis. Om något fält är lika kommer den jämförelsen ge svaret -1. Värdet av uttrycket kan alltså bli 0 (ingen är sann) eller under noll om någon eller alla av kolumnerna är lika.



Resultatet

Det vi nu fått fram är en pivot-tabell med tre dynamiska kolumner där användaren enkelt kan styra tabellens utseende.



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

Vill du har mer information?

Kontakta oss via informationen på vår kontakt-sida.

DrakeStone AB
Teknikringen 10

583 30 Linköping

Org: 556986-6956

© 2020 Drake Analytics