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 Community,
ich stehe vor dem gleichen Problem und habe versucht, die Formel auf meine Daten anzupassen.
Bin leider bisher nicht so geübt, was Formel und Abfragen anbelangt.
Ziel ist es, zu zählen, wie viel Artikel bei demselben Kunden gekauft wurden.
Also eigentlich eine UND Abfrage.
https://community.qlik.com/t5/user/viewprofilepage/user-id/28038
if(Feld1 = 'a' AND Feld2 = 'b', count(Feld3))
if([product group (rev)] = 'Deskphone' AND [product group (rev)] = 'DECT-Telefone', count(ID))
Geht leider nicht wie erhofft.
Versuch mit einer aggr formel um ein Ergebnis zu erzielen, bedauerlicherweise auch ohne Erfolg.
=
if(aggr( ([product group (rev)]) , [Y_sellout_ID])='Deskphone' and aggr ( ([product group (rev)]) , [Y_sellout_ID]) ='DECT-Telefone','2023 Deskphone and DECT-Telefone',
'no result'
)
Es wäre super, wenn ich einen TIPP bekommen könnte, wie ich eine und Abfrage in einer Dimension hinterlegen muss.
Besten Dank schon mal.
Man könnte das auch direkt im Script machen:
LOAD
//..
Fabs(Feld1 = 'a' AND Feld2 = 'b') AS FeldABZaehler
FROM
//..
Auf dem Arbeitsblatt musst Du dann nur noch dieses Feld aufsummieren: =SUM(FeldABZaehler). Und als Dimension verwendet könntest Du dann auch darauf filtern.
Hallo Steefan,
vielen Dank für die schnelle Antwort.
Leider kann ich die Formel nicht auf unser Datenmodell anwenden, da ich lediglich im Designer agieren kann.
Hast du mir vielleicht eine Möglichkeit, die Abfrage in einer AGGR Formel zu vermitteln?
Ich hatte schon etwas in der Richtung versucht, aber bekomme nicht korrekte Ergebnisse ausgeworfen.
Hintergrund ist hier, dass wenn ich das Kaufjahr änder, Beispiel 2023 - sollte die Aggr nur Ergebnis anpassen auf
2023.
[Y_sellout_ID] =Spalten ID
[ID] = Stammdatensatz (UNIQUE)
=
if(aggr( ([product group (rev)]) , [Y_sellout_ID])='Deskphone' and aggr ( ([product group (rev)]) , [Y_sellout_ID]) ='DECT-Telefone','2023 Deskphone and DECT-Telefone',
'no result'
)
Hatte noch einen anderen Versuch mit, welche noch einen Fehler beinhaltet, den ich nicht auflösen kann.
v_count_product_groug = count (distinct ([product group (rev)])
if(GetSelectedCount([product group (rev)])>0,
count (distinct {< Y_sellout_ID= {"=count (distinct [product group (rev)])= $(v_count_product_group)"} >} ID),
'No Portfolio Indikator selected')
Hoffe, ich habe es anschaulich erklärt.
Viele Grüße
Micha
Zeige mal 3 -5 Datensätze und welches Ergebnis die Zähl-Formel hier ergeben soll und welche tatsächlich rauskommen und warum das nicht als korrekt/erwartet angesehen wird sowie wie sich weitere Auswahlen auswirken?
Hallo @marcus_sommer
Die Ermittlungen der Summen und Selektion auf year und product group (rev) sind korrekt.
1 Account als Beispiel
Zähl-Formel - auf 2 product group (rev)
Dec und Desk - erwartetes Ergebnis = 170, IDs welche beides zutrifft.
Die Formel soll mir ausgeben, bei wie viel Datensätzen, beide Auswahlwette zutreffen.
Sie summiert aber aktuell nur, 3.874
if(GetSelectedCount([product group (rev)])>0,
count (distinct {< Y_sellout_ID= {"=count (distinct [product group (rev)])= $(v_count_product_group)"} >} distinct [ID]),
'No Portfolio Indikator selected')
Vielleicht ist das ja auch der falsche Ansatz?
Schonmal Danke für das Interesse.
Mir ist nicht klar, was gezählt werden soll - die puren Datensätze oder die (distinkte) Kombination von Feldern? Also vielleicht einfach:
count(ID)
oder
count(distinct ID&ProductGroup)
@marcus_sommer 🙂
Es soll gezählt werden count (distinct ID)
Wenn die Produktgruppen ausgewählt ist.
Das können X Auswahlwerte sein.
Allerdings nicht kumuliert gezählt, sondern und (also beide Gruppen wurden gekauft)
Beispiel:
100 IDs = Kunden
Produkt A = 70 kaufende Kunden
Produkt B = 30 kaufende Kunden
Produkt A+B = 15 kaufende Kunden
Beide Produkte kaufen 15 Kunden
Ich suche schon lang nach einem Ansatz. Das müsste doch eigentlich eine ganz normale Auswertung sein, oder?
Probiere mal etwas wie:
count({< Produkt = {'A'}> * < Produkt = {'B'}> } distinct Kunde)
oder
count({< Produkt = {'A', 'B'}>} distinct Kunde) * -(count({< Produkt = {'A', 'B'}>} distinkt Produkt)=2)
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.
Hier mal generalisiert:
if(Feld1 = 'a' AND Feld2 = 'b', count(Feld3))
Hallo Community,
ich stehe vor dem gleichen Problem und habe versucht, die Formel auf meine Daten anzupassen.
Bin leider bisher nicht so geübt, was Formel und Abfragen anbelangt.
Ziel ist es, zu zählen, wie viel Artikel bei demselben Kunden gekauft wurden.
Also eigentlich eine UND Abfrage.
https://community.qlik.com/t5/user/viewprofilepage/user-id/28038
if(Feld1 = 'a' AND Feld2 = 'b', count(Feld3))
if([product group (rev)] = 'Deskphone' AND [product group (rev)] = 'DECT-Telefone', count(ID))
Geht leider nicht wie erhofft.
Versuch mit einer aggr formel um ein Ergebnis zu erzielen, bedauerlicherweise auch ohne Erfolg.
=
if(aggr( ([product group (rev)]) , [Y_sellout_ID])='Deskphone' and aggr ( ([product group (rev)]) , [Y_sellout_ID]) ='DECT-Telefone','2023 Deskphone and DECT-Telefone',
'no result'
)
Es wäre super, wenn ich einen TIPP bekommen könnte, wie ich eine und Abfrage in einer Dimension hinterlegen muss.
Besten Dank schon mal.
Man könnte das auch direkt im Script machen:
LOAD
//..
Fabs(Feld1 = 'a' AND Feld2 = 'b') AS FeldABZaehler
FROM
//..
Auf dem Arbeitsblatt musst Du dann nur noch dieses Feld aufsummieren: =SUM(FeldABZaehler). Und als Dimension verwendet könntest Du dann auch darauf filtern.
Hallo Steefan,
vielen Dank für die schnelle Antwort.
Leider kann ich die Formel nicht auf unser Datenmodell anwenden, da ich lediglich im Designer agieren kann.
Hast du mir vielleicht eine Möglichkeit, die Abfrage in einer AGGR Formel zu vermitteln?
Ich hatte schon etwas in der Richtung versucht, aber bekomme nicht korrekte Ergebnisse ausgeworfen.
Hintergrund ist hier, dass wenn ich das Kaufjahr änder, Beispiel 2023 - sollte die Aggr nur Ergebnis anpassen auf
2023.
[Y_sellout_ID] =Spalten ID
[ID] = Stammdatensatz (UNIQUE)
=
if(aggr( ([product group (rev)]) , [Y_sellout_ID])='Deskphone' and aggr ( ([product group (rev)]) , [Y_sellout_ID]) ='DECT-Telefone','2023 Deskphone and DECT-Telefone',
'no result'
)
Hatte noch einen anderen Versuch mit, welche noch einen Fehler beinhaltet, den ich nicht auflösen kann.
v_count_product_groug = count (distinct ([product group (rev)])
if(GetSelectedCount([product group (rev)])>0,
count (distinct {< Y_sellout_ID= {"=count (distinct [product group (rev)])= $(v_count_product_group)"} >} ID),
'No Portfolio Indikator selected')
Hoffe, ich habe es anschaulich erklärt.
Viele Grüße
Micha
Zeige mal 3 -5 Datensätze und welches Ergebnis die Zähl-Formel hier ergeben soll und welche tatsächlich rauskommen und warum das nicht als korrekt/erwartet angesehen wird sowie wie sich weitere Auswahlen auswirken?
Hallo @marcus_sommer
Die Ermittlungen der Summen und Selektion auf year und product group (rev) sind korrekt.
1 Account als Beispiel
Zähl-Formel - auf 2 product group (rev)
Dec und Desk - erwartetes Ergebnis = 170, IDs welche beides zutrifft.
Die Formel soll mir ausgeben, bei wie viel Datensätzen, beide Auswahlwette zutreffen.
Sie summiert aber aktuell nur, 3.874
if(GetSelectedCount([product group (rev)])>0,
count (distinct {< Y_sellout_ID= {"=count (distinct [product group (rev)])= $(v_count_product_group)"} >} distinct [ID]),
'No Portfolio Indikator selected')
Vielleicht ist das ja auch der falsche Ansatz?
Schonmal Danke für das Interesse.
Mir ist nicht klar, was gezählt werden soll - die puren Datensätze oder die (distinkte) Kombination von Feldern? Also vielleicht einfach:
count(ID)
oder
count(distinct ID&ProductGroup)
@marcus_sommer 🙂
Es soll gezählt werden count (distinct ID)
Wenn die Produktgruppen ausgewählt ist.
Das können X Auswahlwerte sein.
Allerdings nicht kumuliert gezählt, sondern und (also beide Gruppen wurden gekauft)
Beispiel:
100 IDs = Kunden
Produkt A = 70 kaufende Kunden
Produkt B = 30 kaufende Kunden
Produkt A+B = 15 kaufende Kunden
Beide Produkte kaufen 15 Kunden
Ich suche schon lang nach einem Ansatz. Das müsste doch eigentlich eine ganz normale Auswertung sein, oder?
Probiere mal etwas wie:
count({< Produkt = {'A'}> * < Produkt = {'B'}> } distinct Kunde)
oder
count({< Produkt = {'A', 'B'}>} distinct Kunde) * -(count({< Produkt = {'A', 'B'}>} distinkt Produkt)=2)