Doppelte Personen + Assets per ASQL Filter finden (UUX)

Der AD-Datenprovider rastet aus, Empirum Konnektor macht Probleme oder deine Kollegen haben immer noch nicht verstanden, wie man richtig nach Assets sucht und legen ständig die schon vorhanden an?

Keine Sorge, es gibt einen einfachen Weg über eigene Filter doppelte Personen, Benutzerkonten oder Assets zu finden. Dafür brauchen wir zwar etwas ASQL und ein kleines Subquery, aber wir erklären alles ganz einfach und verständlich. So zumindest die Idee 😉

Du solltest außerdem bereits wissen, wie man eigene Filter in der UUX anlegen kann.

Doppelte Personen via Vor- und Nachname finden

filter für doppelte personen matrix42 stammdaten

Basisklasse der Datenquelle: SPSUserClassBase

ID In Subquery(SPSUserClassBase AS UCB, base.ID, base.LastName = UCB.LastName AND base.FirstName = UCB.FirstName AND base.ID<>UCB.ID)
Erklärung

Wir fangen mit der Erklärung mal von vorne an (bitte nicht falsch verstehen), da es so zumindest für mich einfacher zu erklären ist. Da es sich hierbei um einen Datenquellfilter des Navigationselements „Personen“ handelt, kann man sich das ganz Statement in Etwa so vorstellen:

Select UnsereDefiniertenSpaltenInderDatenquelle from SPSUserClassBase where 
ID In Subquery(SPSUserClassBase AS UCB, base.ID, base.LastName = UCB.LastName AND base.FirstName = UCB.FirstName AND base.ID<>UCB.ID) 

Die Bedingung:

Der Filter besagt, die ID des Objektes der Datenquelle (sprich im Falle vom Navigationselement Personen die ID aus der SPSUserClassBase) muss von dem Subquery zurückgegeben werden.

Das Subquery

Das Subquery kann man sich in ASQL wie eine eigene Select-Abfrage vorstellen, dessen Syntax durch Subquery() initiiert wird und durch 3 kommagetrennte Parameter in der Klammer bestimmt ist.

Parameter 1: Die Tabelle

SPSUserClassBase AS UCB,

Der erste Teil bestimmt, welche Tabelle aufgerufen wird und welchen Alias sie bekommt, in unserem Fall können wir also die 2te SPSUserClassBase innerhalb des Subquery mit „UCB“ ansteuern.

Parameter 2: Der Rückgabewert

base.ID,

base.ID ist der Rückgabewert des Subquery, welches für alle Datensätze zurückgegeben wird, auf die die Bedingung (nächster Parameter) zutrifft. Via „base“ können wir übrigens die Basisklasse ansteuern.

Genau das ist das besondere am Subquery! Wir haben 2 Tabellen (Die Basistabelle, wir nennen sie UserClassBase1 & die UserClassBase2 aus dem Subquery) und können diese miteinander vergleichen.

Parameter 3: Where Abfrage

base.LastName = UCB.LastName AND base.FirstName = UCB.FirstName AND base.ID<>UCB.ID

Nun da wir beide Tabellen referenzieren können und den Rückgabewert festgelegt haben, können wir entscheiden, welche Datensätze wir zurückliefern wollen. In diesem Fall alle, bei denen:

  1. Nachname der Basisklasse und der 2ten Klasse identisch sind (UCB)
  2. Vorname der Basisklasse und der 2ten Klasse identisch sind (UCB)
  3. IDs der Basisklasse und der 2ten Klasse NICHT identisch sind

Somit bekommen wir als Rückgabe des Subquerys alle IDs von Einträgen der SPSUserClassBase, deren Vor- und Nachname identisch sind, deren IDs sich aber unterscheiden. Also höchstwahrscheinlich doppelte Datensätze.

Verstanden oder verwirrter als vorher? Falls du noch Fragen hast, lass gerne ein Kommentar da!

Doppelte Computer via Name finden

filter für doppelte computer objekte matrix42 asset management

Basisklasse der Datenquelle: SPSAssetClassBase

ID In Subquery(SPSAssetClassBase AS ACB, base.ID, base.T(SPSComputerClassBase).Name = ACB.T(SPSComputerClassBase).Name AND base.ID<>ACB.ID)

Vielen Dank fürs Lesen! Ich hoffe, dir hat der Artikel gefallen und du hast jetzt das nötige Handwerkszeug, eigene Filter zu schreiben.

Falls du praktische Filter hast, die der Matrix42 Gemeinschaft nützen können, schreibe doch einfach ein Kommentar und teile deinen Filter mit uns!

3 Gedanken zu „Doppelte Personen + Assets per ASQL Filter finden (UUX)“

  1. Super! Immer wieder eine gute Anlaufstelle, deine Website.

    Ich prüfe hier, ob es doppelte Telefonnummern innerhalb der gleichen OU bei zwei Attributen gibt:

    ID IN SUBQUERY(SPSUserClassBase AS UCB, base.ID, (
     (
     base.BusinessPhone = UCB.BusinessPhone OR
     base.BusinessPhone = UCB.MobilePhone OR
     base.MobilePhone = UCB.BusinessPhone OR
     base.MobilePhone = MobilePhone
     )
     AND base.T(SPSCommonClassBase).OU = UCB.T(SPSCommonClassBase).OU

    AND base.ID<>UCB.ID)

    Danach noch nach OU gruppieren und schon hat man alle doppelten Telefonnummern je OU.

    Antworten
  2. Hallo ich versuche die doppelten Inventarnummer zu filtern, komme aber leider zu keinem Ergebnis.
    Folgendes habe ich versucht:
    ID IN SUBQUERY(SPSAssetClassBase AS ACB, base.ID, (base.InventoryNumber = ACB.InventoryNumber))
    bzw.
    ID IN SUBQUERY(SPSAssetClassBase AS ACB, base.ID, ACB.Name = base.Name AND ACB.ID <> base.ID)

    Hast du eine Idee?
    Danke im Voraus, beste Grüße

    Antworten

Schreibe einen Kommentar