Hi Bob,
Relations:
Relations in Dynamic AI terms is a "front-end" type relation - allowing us to mix information from any data-sources. However with the limitation that the links can only be viewed - i.e. not merged or manipulated as one source. E.g. If you have customer ID in a table on a SQL Server - a Dynamic AI relation can help you to relate the Customer ID content from the SQL Server to e.g. an Order system on Oracle - by using the SQL Server Customer ID as a criteria for the jump to the Oracle data.
This can be achieved as part of a drill down on a report where the Customer ID can be used as a drill-down criteria - OR - as a link to a FORM. E.g. The SQL Server Customer ID can be part of a report ending up in a detailed listing where clicking to the Form can then bring the Customer ID as a criteria for showing Oracle order data for that particular Customer ID. Finally you can also insert related sub-forms which is probably the most useful way of using relate - where you can browse the Customer data on one database and display sub-forms of reports from other data-sources using the related ID as a criteria.
I believe the documentation refers to the fact that you can also relate a data-source to itself - in order to force Dynamic AI to use a specific ID as a criteria for displaying form data. That is the most efficient way instead of scrolling the underlying data-set for form-data (can be relevant on large datasets). Dynamic AI however offers other ways to do this nowadays - such as using a "forcedsort-key" in the dictionary and I believe we also support the use of a unique key (conditions page) to achieve the same results.
Partitions:
Partitions where originally used solely to have one report point to time-partitioned data-sources based on the user selecting a partition-value from a drop-down filter. E.g. If you have daily "as per" balances in separate data tables like GL20090101, GL20090102 etc. partitioning in Dynamic AI would support the inclusion of the physical tables matching a user-selected parameter when e.g.: producing a Profit and Loss statement, a balance sheet etc. This can be a fast optimizer for large data-sets that grows over time and makes a database table unnecessary slow - and it eliminates the need for sophisticated DB partitioning features. Some call it "poor man's partitioning"
The functionality to replace a value in the underlying SQL to a report - what we in this case call partitioning - can however also be used to restrict subsets of data within a single data-source (or even across multiple data-sources eventually using partition p1,p2,... parameters) as you mention. As the partitioning table options available to the end-user can be dynamically created / restricted / computed - the combinations of it's use are almost "unlimited".
Best regards
Carsten