Ein typischer Anwendungsfall: Denken Sie an eine SQL-Datenbank, in der die Beziehungen nicht auf Serverebene festgelegt sind (was häufiger vorkommt als man denkt), oder an zwei lose zusammenhängende Tabellen, in denen der Schlüssel eine Kombination aus mehreren Feldern sein kann. Oder Sie haben eine gemischte Datenquelle, z.B. eine CSV-Datei und eine XML-Datei, die über ein ID-Feld verknüpft sind. Während es für den letztgenannten Fall seit einiger Zeit eine codebasierte Lösung gibt, lebt diese neue Funktion vollständig im Designer. Die Performance hängt stark von der Filterung auf Datenbankebene ab – es wird dringend empfohlen, bei der Verwendung dieser neuen Funktion nur datenbankübersetzbare Filter zu verwenden.
Mit dieser Funktion können Sie sogar virtuelle Beziehungen definieren, z.B. auf Basis von Datumsfeldern. Für ein einfaches Beispiel verwenden wir Microsofts Contoso Beispieldatenbank für SQL Server. Wussten Sie, dass die Demo-Anwendung in der Lage ist, sich an beinahe jede beliebige SQL-Datenquelle zu binden? Wählen Sie einfach „Benutzerdefinierte Datenquelle“ und Sie finden sich im bekannten DataConnection UI-Dialog, der eine Verbindung zu ODBC-, Oracle- oder MS SQL-Daten ermöglicht.
Die Verbindung zur ContosoRetailDW-Datenbank ist dann einfach:
Für ein simples Beispiel einer virtuellen Beziehung entwerfen wir einen Bericht über alle Mitarbeiter in der DimEmployee-Tabelle und – pro Mitarbeiter – über alle Kunden aus der DimCustomer-Tabelle, die am selben Tag geboren wurden. Der erste Schritt ist einfach, lassen Sie einfach einige Felder wie Vorname, Nachname und Geburtsdatum aus der DimEmployees-Tabelle in den Arbeitsbereich fallen, um die Mitarbeitertabelle zu erstellen. Klicken Sie anschließend im Objekt-Fenster auf „Unterelement anhängen“, um die darunter liegende DimCustomer-Tabelle hinzuzufügen. Im Schema gibt es keine direkte Beziehung zwischen den beiden Tabellen, wählen Sie daher „Verknüpfung über Filterbedingung“ aus dem neuen Dialog:
Dies ermöglicht es, aus allen Tabellen in der Datenbank auszuwählen (außer derjenigen, von der aus Sie starten). Wählen Sie hier die Tabelle DimCustomer aus und fahren Sie fort indem Sie einige Felder für die Kundendatenbank aus dem Feldauswahlassistenten auswählen. Es erscheint eine Hinweismeldung mit einer kurzen Beschreibung, was bei der Eingabe der Filterbedingung im nächsten Schritt zu beachten ist.
Die Zuordnung des gewünschten Filters ist in diesem Fall natürlich denkbar einfach. Beachten Sie, dass der Filter in diesem Fall auf dem Datenbanksystem durchgeführt werden kann:
Der Druck des Berichts zeigt dann alle Kunden mit dem gleichen Geburtstag wie gewünscht an, und das hochperformant. Das Wasserzeichen „Demo“ wird in der Demo-Anwendung hinzugefügt, wenn Sie „Benutzerdefinierte Datenquelle“ wählen, da es zu verlockend wäre, die Testversion einfach als vollwertiges SQL-Berichtssystem zu verwenden ;).
Wenn Sie keine unserer Komponenten verwenden, müssen Sie möglicherweise Ihren Druckcode ein wenig anpassen, um mit einem leeren Relationsnamen zu arbeiten, der jetzt neu von LlPrintDbGetCurrentTableRelation() für eine Untertabelle zurückgegeben werden kann. Die erforderlichen Änderungen sind jedoch recht einfach durchzuführen (geben Sie in diesem Fall einfach die „volle“ Kind-Tabelle zurück, gefiltert nach dem Ergebnis von LlPrintDbGetCurrentTableFilter). Und da eine der ersten Fragen, wenn wir etwas Neues hinzufügen, regelmäßig „kann ich das auch ausschalten“ ist: Ja, Sie können (LL_OPTION_COMPAT_PROHIBITFILTERRELATIONS).
Was sind Ihre Ideen für virtuelle Relationen? Können diese auch einige Aufgabenstellungen aus Ihrem täglichen Leben lösen?