Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo zusammen,
ich bin neu bei Qlik Sense und bräucht ein wenig Untertsützung.
ich bräuchte z.B. eine Formel die mir angibt wieviele "ProdNr" zugleich ein 1P7 haben als auch ein 04K.
Das müsste doch ein Count(if offen "K8k" like ... and PDCC "1P7" like ... , ProdNr) oderso sein..
Ich bin nicht wirklich geübt in der Notation..
LG
Hallo @marcus_sommer
WOW - das geht in die richtige Richtung! Du bist echt der Hammer!
count({< Produkt = {'A'}> * < Produkt = {'B'}> } distinct Kunde)
count({< [product group (rev)] = {'Deskphone'}> * < [product group (rev)] = {'DECT-Telefone'}> } distinct ID)
Liefert ein korrektes Ergebnis, 🙂 🙂 🙂 vielen herzlichen Dank dafür.
Zu der Formel habe ich noch zwei Fragen.
Kann ich diese Formel auf Produkt = C, D, E erweitern und wenn ja, wie?
Hab paar Varianten probiert aber ohne Erfolgt,
count({< Produkt = {'A'}> * < Produkt = {'B'}> } distinct Kunde)
Kann man die Fomel in eine Aggr einbinden, damit ich ein Auswahlfeld zum Selektieren habe.
Beispiel meiner aggr Formel für Umsatz Cluster.
if(aggr(sum ([Umsatz]) , [ID])<101 and aggr (sum ([Umsatz]) , [ID]) >=1,'Umsatz 1-100 ',
Im text wäre diese so, aber leider ohne Ergebnis.
if(aggr(count([Produkt]) , [ID])='A' and aggr (count([Produkt]) , [ID]) = 'B','kauft produkt A+B '
VG
Es sollten sich auch weitere Produkte integrieren lassen, wie hier:
count({< Produkt = {'A'}> * < Produkt = {'B'}> * < Produkt = {'C'}> * < Produkt = {'D'}> } distinct Kunde)
Für eine selektierbares Cluster benötigt man nur eine aggr() und bevor man etliche If-Abfragen verschachtelt, könnte man auch class nehmen, vielleicht so:
class(aggr(sum(< Produkt = {'A'}> * < Produkt = {'B'}> } Umsatz), ID), $(vClusterGröße))
und steuert dann das Cluster flexibel über eine Variable.
Super
count({< Produkt = {'A'}> * < Produkt = {'B'}> * < Produkt = {'C'}> * < Produkt = {'D'}> } distinct Kunde)
Bitte Schritt für Schritt 🙂 klappt bei mir nicht ganz.
Ich versuche erst mal, nur zu aggr
count({< Produkt = {'A'}> * < Produkt = {'B'}> * < Produkt = {'C'}> * < Produkt = {'D'}> } distinct Kunde)
aggr()
=aggr (count({< [product group (rev)] = {'Deskphone'}> * < [product group (rev)] = {'DECT-Telefone'}> } distinct ID), 'kaufen produkt A+B')
it if hab ich es auch nicht geklappt
Es ist nicht ganz klar, was hier erreicht werden soll und warum?
Hallo @marcus_sommer ,
erst mal herzlichen Dank für deinen Support und deine Geduld.
Erreicht werden soll:
Dass ich die bestimmten Käufer in gewissen Gruppen einteilen kann.
Das Ermitteln der Kennzahlen klappt, denke ich. In deiner Formel kann ich sowohl einschließen und aufschließen ->.
Jetzt würde ich gern, angelehnt an den Ergebnis, ein Selektionfeld generien. In dem ich dann zur Auswahl die Ergebnisse habe.
Beispiel: buy Deskphone + Dect-Telefon. Beim Selektieren, werden nun alle 1.087 Kunden selektiert, somit kann ich a pürfen, ob das Eregbnis Valide ist und B alles andere sehen, was mit diesem Ergebnis zusammen hängt.
Nur die Anzahl, ist zu wenig um mit dem Ergebnis weiter arbeiten zu können.
Beim Umsatz Cluster, habe ich das hinbekommen.
Deine Formel bekomme ich aber leider nicht darauf angepasst. 😞
Beispiel1.
count({< [product group (rev)] = {'Deskphone'}> * < [product group (rev)] = {'DECT-Telefone'}> } distinct ID)
Beispiel2:
count({< [year (rev)] = {'2021'}> * -< [year (rev)] = {'2022'}> * -< [year (rev)] = {'2023'}>* -< [year (rev)] = {'2020'}> } distinct ID)
Was mache ich falsch hier, um einen Auswahlwert zu erhalten?
=
if(aggr(count({< [product group (rev)] = {'Deskphone'}> * < [product group (rev)] = {'DECT-Telefone'}> } distinct [ID]) ,'buy Deskphone + DECT-Telefone',
if(aggr(count({< [product group (rev)] = {'Deskphone'}> * -< [product group (rev)] = {'DECT-Telefone'}> } distinct ID) ,'buy only Deskphone ',
))))
Liefern ein Ergebnis, siehe oben Bild.
buy Deskphone + DECT-Telefone (1.087)
count({< [product group (rev)] = {'Deskphone'}> * < [product group (rev)] = {'DECT-Telefone'}> } distinct ID)
buy only Deskphone (1.740)
count({< [product group (rev)] = {'Deskphone'}> * -< [product group (rev)] = {'DECT-Telefone'}> } distinct ID)
VG MIch
UND-Verknüpfungen sind teilweise sehr tricky - insbesondere wenn nicht nur Felder, sondern auch Feld-Werte, zueinander in einer UND-Beziehung stehen sollen. Die Komplexität wird schnell unterschätzt und mit den ODER-Verknüpfungen gleichgesetzt, wobei die wesentlichen Zusammenhänge zwischen den Daten leicht übersehen werden können.
Normale BI Datenmodelle (nicht nur in Qlik) sind hierfür nicht ausgelegt und es hängt durchaus von den Datenstrukturen im Datenmodell ab (Fakten oder Dimensionen sowie Einzel-Werte pro relevante ID oder Multiple-Werte) sowie dann auch von den Objekt-Dimensionen und Auswahlen, ob und wie UND-Verknüpfungen darstellbar sind oder eben auch nicht. Falls man hier wirklich gesteigerte Anforderungen hat, kommt man meist nicht um entsprechend aufbereitete bzw. spezialisierte Datenmodelle nicht herum.
Früher in QlikView gab es hierfür auch ein spezielles Features, den AND-Mode, den es in Sense nicht mehr gibt - sondern workarounds, die in die oben erwähnte Richtung von:
count({< Produkt = {'A', 'B'}>} distinct Kunde) * -(count({< Produkt = {'A', 'B'}>} distinkt Produkt)=2)
gehen. Das bedeutet verkürzt gesagt, nehme die Ausgangs-Formel mit ODER-Bedingungen und setze die UND-Bedingung als ein boolesches WAHR/FALSCH Ergebnis dagegen. In Deinem Fall könnte das dann vielleicht so aussehen:
=class(aggr(
sum({< [KPI] = p([KPI AND]) >} [Value]) *
rangemax(1, -(count({< [KPI] = p([KPI AND]) >} distinct [KPI])=getselectedcount([KPI AND]))),
[Kategorie]), $(var))
wobei [KPI] deinem Prüf-Feld entspricht und [KPI AND] aus einer Island-Table stammt (also nicht verbunden mit dem Datenmodell) und die distinkten Werte des Prüf-Feldes enthalten. Bedeutet, über eine extra List-Box lässt sich steuern, welche Feld-Werte in einer ODER-Beziehung in der sum() und count() berücksichtigt werden und die count() wird dann mit der Anzahl der möglichen Feld-Werte abgeglichen. Die rangemax() fängt den Fall ab, dass keine UND-Verknüpfungen gesetzt sind.
Das Ganze ist dann in eine aggr() eingebettet, die dann noch die erforderlichen Dimensionalitäten benötigt - hier einfach mit Kategorie angegeben - sowie dann in eine Clusterung per class(), deren Größe über eine Variable gesteuert werden könnte. Somit sind auch sehr dynamische Sichten grundsätzlich implementierbar.
Hier mal noch ein paar Links mit Hintergrund-Infos:
AND-Mode - Qlik Community - 1471352
Generating AND, OR , NOT selection logic in Qlik S... - Qlik Community - 1479510
@marcus_sommer Puuh, ich komme etwas an meine Grenzen.
Ich versuche mein Bestes, die Informationen richtig zu verarbeiten.
Beispiel aus - Generating AND, OR , NOT selection logic in Qlik S... - Qlik Community - 1479510
Konnte ich nachstellen. 🙂
Mit deiner Formel bin ich aber ehrlich gesagt, überfordert.
Du hast es sicherlich verständlich erklärt, nur bekomme ich die Bezüge nicht ganz auf meine Daten abgeleitet.
http://qlik.binom.net/training/qlik-cookbook/design/set-analysis/p-und-e/
Das erklärt p (muss mich in alles einlesen) Ich bin absoluter Beginner.
=class(aggr(
sum({< [KPI] = p([KPI AND]) >} [Value]) *
rangemax(1, -(count({< [KPI] = p([KPI AND]) >} distinct [KPI])=getselectedcount([KPI AND]))),
[Kategorie]), $(var))
[KPI] deinem Prüf-Feld entspricht und [KPI AND] aus einer Island-Table stammt
https://community.qlik.com/t5/QlikView-App-Dev/island-Table/td-p/1250731 ( Island-Table) 🙂
ID = Kunde
Produkt (rev) = Kategorie
KPI und KPI and ist mir noch nicht ganz klar
Was setzte ich für -- ein 😞
$(var)
KPI= Prüf-Feld entspricht
KPI and (wie sieht sowas aus?) = Island-Table
Value
Puuuh, aller Anfang ist schwer
p() und e() sind spezielle Set Analysis Funktionen, die die möglichen bzw. ausgeschlossen Feld-Werte des jeweiligen Feldes zurückgeben. Standalone werden sie eher selten eingesetzt, denn hier entsprechen sie weitgehend dem Auswahl-Status und wären so eine redundante Anweisung. In Kombination mit weiteren Bedingungen und/oder Identifier und/oder auch mit eigener Set Analysis verschachtelt, sind sie jedoch sehr mächtig - und trotzdem einfach zu nutzen.
In dem Beispiel oben, wird sie genutzt, um die Auswahlen von zwei Feldern zu synchronisieren - zum Einen (linke Seite) das normale Feld aus dem Datenmodell und auf der rechte Seite wird die Selektion des extra generierten Navigations-Feldes abgefragt. Übertragen auf Deine Felder wäre das dann:
=class(aggr(
sum({< [Produkt (rev)] = p([Produkt (rev) X]) >} [Value]) *
rangemax(1, -(count({< [Produkt (rev)] = p([Produkt (rev) X]) >} distinct [Produkt (rev)])
=getselectedcount([Produkt (rev) X]))),
[Kunde]), $(var))
Diese Navigations-Feld könnte per Inline-Tabelle oder von Extern (die Produkt-Stammdaten-Tabelle o.ä.) geladen werden, aber auch von den bereits geladenen Daten abgeleitet werden, z.B. per:
[IslandTable]: load fieldvalue('Produkt (rev)', recno()) as [Produkt (rev) X]
autogenerate fieldvaluecount('Produkt (rev)');
am Ende des Load-Scripts. $(var) ist ein Platzhalter für eine beliebige numerische Variable - lass sie erstmal weg und setze hier einfach manuell 100 ein.