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

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:
- Nachname der Basisklasse und der 2ten Klasse identisch sind (UCB)
- Vorname der Basisklasse und der 2ten Klasse identisch sind (UCB)
- 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

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!
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.
👍🙌
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