Data Builder
SAC / Datasphereintermediate

Building Graphical Views: Joins, Unions, Associations, and Deployment Flow

Explains how to construct graphical views in Data Builder using joins, unions, projections, and associations, and walks through the design-to-deployment runtime flow with troubleshooting guidance.

Explanation

Once a consultant understands the basic object types in Data Builder, the next essential skill is actually building graphical views that correctly combine multiple sources while remaining performant and maintainable. Graphical views are built as a directed flow of nodes on a canvas: you start from one or more source objects (local tables, remote tables, or other views) and apply operations such as Join, Union, Projection, Aggregation, and Script (a controlled code node for specific transformation logic) to shape the output. Joins in Data Builder support standard types (inner, left outer, right outer, full outer) and require you to explicitly map join columns between the two input nodes. A critical design decision is cardinality: incorrect join cardinality (for example, joining a fact table to a dimension table that has duplicate keys) silently multiplies rows and produces wrong aggregated numbers in SAC - this is one of the most common sources of reporting defects traced back to the modeling layer. Data Builder often surfaces cardinality information or lets you validate it, and consultants should always test output row counts against expected source row counts after adding joins. Unions combine structurally similar datasets (e.g., sales data from multiple regional systems with the same or mappable column structure) into a single output stream, and require careful column mapping to avoid null-filled columns from mismatched schemas. Associations are a distinctive modeling concept: rather than physically joining two views together (which flattens data and can cause fan-out row multiplication), an association defines a logical relationship between an entity and another view (commonly a fact view associated to a dimension view) that is resolved at query time by the consuming tool. This is central to good performance and correct aggregation in SAC, because associations preserve the grain of the fact table while still allowing drill-down and filtering by dimension attributes on demand, rather than pre-joining and risking incorrect row multiplication. Calculated columns and restricted/calculated measures can be added directly in the graphical view for business logic like currency conversion, ratio calculations, or conditional flags, keeping simple business logic close to the data rather than pushed entirely into the BI layer. Deployment flow: after saving a view's design, you explicitly deploy it. Deployment triggers validation (checking for broken references, data type mismatches, and unresolved associations) and, if successful, makes the view available at runtime for querying by SAC or other consumers, and for use as a source inside other Data Builder views. If deployment fails, Data Builder surfaces specific error messages referencing the failing node or column, which consultants should read carefully rather than guessing - a common troubleshooting technique is deploying incrementally (deploy each layer view after completing it) rather than one large deployment cascade at the end of a long modeling session. Performance considerations at this stage include: avoiding unnecessary joins in views that are only used as intermediate staging, using aggregation nodes early to reduce row volume in high-cardinality fact processing, and preferring associations over hard joins whenever the relationship is purely for enrichment/drill-down purposes rather than requiring a flattened row-level combination. S/4HANA and cloud integration note: source tables inside these graphical views are frequently remote tables exposed via connections to S/4HANA Cloud, on-premise systems (through appropriate connectivity such as SAP Datasphere's supported connection types), or other cloud sources; behavior around real-time versus replicated access depends on the connection type and is configured outside Data Builder itself, but the graphical view design must account for whether the source is federated (queried live, so heavier transformation logic can affect source system performance) or replicated (data physically copied into Datasphere, generally better for complex transformations and heavier query loads).

Code example

ABAP Code
-- Not raw SQL since this is a graphical modeling task, but here is the-- equivalent SQL logic a graphical view with a Join + Projection + -- Calculated Column would generate, useful for validation/testing: SELECT    f."SALES_ORDER_ID",    f."CUSTOMER_ID",    d."CUSTOMER_NAME",    f."NET_VALUE",    f."CURRENCY_CODE",    -- calculated column example: flag large orders    CASE WHEN f."NET_VALUE" > 10000 THEN 'LARGE' ELSE 'STANDARD' END AS ORDER_SIZE_FLAGFROM "HRM_SALES_ORDERS" fLEFT OUTER JOIN "HRM_CUSTOMERS" d    ON f."CUSTOMER_ID" = d."CUSTOMER_ID"; -- Note: in the real graphical view, the CUSTOMER dimension enrichment-- would often be modeled as an ASSOCIATION rather than a hard JOIN-- if used purely for drill-down/filtering in SAC, to avoid row-- multiplication risk when the dimension table is not perfectly unique.

Real project scenario

During a finance reporting rollout, a consultant builds a graphical view joining a replicated General Ledger fact table with a Cost Center dimension. Initial testing shows total amounts inflated by roughly double the expected value. Investigation reveals the Cost Center source table has duplicate rows per cost center due to a time-dependent attribute history, and the hard join fan-outs the fact rows. The fix is to either deduplicate the dimension view first (using an aggregation/projection to keep only the current record) or replace the hard join with an association so SAC resolves the relationship without flattening the row-level grain.

Common mistakes

โ€ข Using a hard Join to enrich fact data with dimension attributes when an Association would preserve correct row-level grain. โ€ข Not validating output row counts after adding a Join, missing silent fan-out multiplication of measures. โ€ข Building overly complex single views with many chained joins and unions instead of breaking logic into layered, testable views. โ€ข Ignoring deployment error messages and repeatedly redeploying without reading which node or column caused the failure. โ€ข Applying heavy transformation logic directly on federated (live) remote sources, causing performance strain on the source system.

Best practices

โ€ข Always test row counts before and after adding a join to catch unexpected fan-out early. โ€ข Prefer associations over hard joins for dimension enrichment used mainly for filtering and drill-down in SAC. โ€ข Deploy views incrementally, layer by layer, to isolate errors quickly rather than debugging a large cascade of failures. โ€ข Push heavy aggregation and filtering as early as possible in the view chain to reduce data volume downstream. โ€ข Be mindful of whether sources are federated or replicated when placing complex transformation logic, to avoid unnecessary load on live source systems.

Interview angle

A common interview scenario is being asked to diagnose why a report's totals are higher than expected after a new dimension was added to a model, testing whether the candidate understands join cardinality, fan-out risk, and when to use an association instead of a join. Be ready to explain the practical difference between a join and an association in terms of grain preservation.