Beschreibung

Es soll ein einfaches Text Minning erstellt werden mit Qlik Sense das es ermöglich wie die Daten mehr oder weniger dynamisch zu gruppieren. Ohne dass ein User gross eingreifen muss, aber es muss auch einfach möglich sein die Cluster anzupassen.
Am besten via Excel oder ein Tabelle in der Quelle.

Es könnte eine Situationen sein wie die beschriebene hier. Mehrere Werte sollen zu einer neune Gruppe zusammen gefasst werden, Beispiel einzelne Firmen einer Holding werden zu einem Cluster unter dem Holding Namen, so dass dieser Ausgewertet werden kann (z.B. Migros hat Digitec, Galaxus, Molino, SportX als Tochter, diese sollen alle unter Migros zusammen gefasst werden).

Die Daten werden anhand eines Teilstrings in einem Feld geclustert und ein neues Feld wird mit dem Wert erstellt.
Wie das gehen kann, wird hier erklärt.

Wie macht das QlikSense

Das kann QlikSense sehr einfach machen mit der Funktion

     MapSubstring('MappingTablle', Expression)

Die Funktion ist sehr ähnlich wie die ApplayMap Funktion, nur dass diese Funktion auf Teilstrings geht.

Die Parameter sind gleich bei beiden Methoden, die MappingTabelle muss auch hier mit Mapping Load oder Mapping Select geladen werden. Die Expression ist das Feld aus der Basis Tabelle. Das ist noch gleich wie bei ApplayMap Funktion.

Beispiel einer Mapping Tabelle mit Inline Load. Diese Tabelle kann auch aus einem Excel oder DB Tabelle stammen.

Map_Group_Name:
Mapping Load upper(Key) as Key, '@<@'& Value &'@>@' as Value Inline [
Key, Value
Molino, Migros
Digitec, Migros
Galaxus, Migros
SprotX, Migros
];

Was ist nun anders, die Funktion MapSubstring, sucht alle Werte die mit der Mappingtabelle übereinstimmen und fügt die Werte in das Feld ein. Wenn es mehrere Treffer gibt, werden diese zu einem Feld zusammen gefasst. Kann ein Wert nicht übersetzt werden wird der originale Wert eingefügt.

Siehe auch in der Qlik Help nach.

Das sind die Grundlagen, nun kommt noch die Magie des Minings dazu....

Wie geht das Mining nun genau mit Qlik Sense

Damit das Mining nun funktioniert, muss noch was gemacht werden bei der Mapping Tabelle und diese neu geladen werden mit Resident. Im Resident muss nun mit einem If-Statement bestimmt werden welche Werte wie ersetzt werden sollen. Dafür wurden die Values in der Mapping Tabelle speziell markiert mit '@<@' und '@>@', so kann nun bestimmt werden welche Werte als Gruppe ausgegeben werden sollen. Wenn kein Value definiert wurde, wird das Original Feld verwendet.

Hier ein Beispiel für das Qlik Script

NeueTabelle:
Load *,

    if (len(TextBetween(MapSubString('Map_Group_Name', Projekttitel_Upper), '@<@', '@>@')) =0,
        Projekttitel
    ,
        TextBetween(MapSubString('Map_Group_Name', Projekttitel_Upper) , '@<@', '@>@')
    ) as GroupProjekttitel
Resident BasisTabelle;

Das neue Feld "GroupProjekttitel" enthält nun den Cluster der gemäss der Tabelle erstellt wurde. Falls die Default Values nicht dem Original Feld entsprechen sollen, kann der erste Teil der If-Klausel angepasst werden durch ein Standard Wert wie 'NA' oder so ähnlich. Im Else Fall wird der Markierte Text (Markiert mit '@<@' und '@>@' ) ausgegeben.

 

Das ganze Beispiel wurde mal an einem Treffen der Qlik Dev Group Zürich vorgestellt von Philipp Leimgruber.