How Functional Transformation Modeling United Logic, Lineage, and Requirements â a Decade Ahead of Its Time
Summary
âBefore YAML, before DBT, before Coalesce â
we were already modeling transformations as metadata.âIn the previous article, we explored the marriage of data models and data movement, and how modelers and engineers finally began speaking the same language. This story now goes deeper â into a real-world architecture that quietly achieved that unity long before the modern data stack existed.
At De Volksbank (now ASN), the data modeling team extended PowerDesigner beyond its traditional boundaries â transforming it from a schema design tool into a metadata-driven engineering platform.

What emerged was a system that:
- Modeled data transformations step by step in logical form,
- Generated SQL code and unit tests directly from metadata,
- Linked requirements, mappings, and lineage in one environment,
- And enabled a culture where everyone became a data modeler.
đď¸ PowerDesigner as a Metadata Platform
For most organizations, PowerDesigner was used to model data structures â conceptual, logical, and physical. But at Volksbank, it became the foundation for data movement modeling â using extended metamodels and custom stereotypes.
The Innovation
We customized the Logical Data Model (LDM) to include functional transformation logic. Each entity in the LDM could represent not only data at rest but also data in motion.
We introduced new entity stereotypes:
Press enter or click to view image in full size

Each transformation step (such as select, derive, filter, aggregate, pivot, or expose) was modeled functionally using mapping objects inside PowerDesigner. No SQL was written by hand â SQL was generated.
đ Modeling Transformations Functionally
Instead of embedding logic in stored procedures or ETL jobs, we expressed it in metadata form.
Example â A Functional Mapping
Target: BUSINESS_AGREEMENT
Source: SOURCE_ACCESS_AGREEMENT
Steps:
1. SELECT agreement_id, customer_id, amount, start_date
2. DERIVE agreement_type = CASE WHEN loan_flag=1 THEN âMORTGAGEâ ELSE âINVESTMENTâ END
3. FILTER start_date >= â2018-01-01â
4. AGGREGATE SUM(amount) BY customer_id
Each operation corresponded to a function stereotype, defined within PowerDesignerâs metamodel:
FilterFunctionScalarFunctionWindowFunction
By modeling transformations this way, we could:
- Validate them visually,
- Apply naming and lineage rules, and
- Generate executable SQL through Jinja-like templates.
âď¸ From Metadata to Code
The transformation logic was exported from PowerDesigner and rendered into executable SQL. A Jinja template engine generated SQL views or stored procedures for each entity type.
Example (simplified):
â {{ entity.name }}
SELECT
{{ select_clause }},
{{ derive_clause }},
{{ filter_clause }}
FROM {{ source_entity }}
{% if aggregate_clause %}
GROUP BY {{ aggregate_clause }}
Each stereotype controlled how a portion of SQL was emitted. For example, a BusinessEntity might generate a view, while an AggregateEntity generated a table.
Outcome:Â modeling became code generation â and PowerDesigner became a compiler for transformations.
đ Linking Requirements (RQM)
One of the boldest design decisions was to connect Logical Data Models directly to Requirement Models (RQM) within PowerDesigner. Each entity, attribute, and mapping was linked to one or more business requirements.
Benefit:Â end-to-end traceability â from business requirement to physical implementation.
When stakeholders asked:
âWhere is this requirement implemented in the data warehouse?â
we could trace it through the model itself, not through a separate document.
đ§Ź Inheritance and Subtypes â Semantic Unification
To unify data from multiple sources under shared semantics, we leveraged inheritance.
We distinguished between:
- Functional subtypes â conceptual variations, e.g.
MORTGAGE_AGREEMENT,ÂINVESTMENT_AGREEMENT - Source subtypes â physical variants per source, e.g.
MORTGAGE_AGREEMENT_SOURCE_A,ÂMORTGAGE_AGREEMENT_SOURCE_B
These were both subtypes of a common supertype â AGREEMENT.
Because both source subtypes inherited from MORTGAGE_AGREEMENT, the system could automatically generate UNION logic to integrate them:
SELECT * FROM MORTGAGE_AGREEMENT_SOURCE_A
UNION ALL
SELECT * FROM MORTGAGE_AGREEMENT_SOURCE_B
The source access models handled raw-to-logical transformation, preparing each source for mapping onto the business LDM.
The business model unified those sources through inheritance and metadata-driven SQL generation.
The result: semantic integration and physical consolidation â driven entirely by metadata.
đ§Ş Test Scenarios as Metadata
We also modeled test cases directly inside PowerDesigner.
Each mapping could have one or more test scenarios, including expected input-output pairs or conditions. These were exported and transformed into Gherkin / SpecFlow unit tests:
Feature: Agreement mapping validation
Scenario: Verify derived agreement type
Given an agreement with loan_flag=1
When the transformation runs
Then the agreement_type should be âMORTGAGEâ
Tests and SQL were generated from the same metadata source.
If the model changed, tests evolved automatically.
đ§ Model Checks and Validation Rules
The LDMs included custom validation rules:
- Mandatory attributes for certain entity types
- Conformance of naming conventions
- Allowed transformation types per entity stereotype
- Requirement-to-attribute coverage checks
These ensured the model was not only consistent but also governed by logic.
The model didnât just describe the data â it policed its own quality.
đĽ Everyone Became a Data Modeler
Perhaps the most profound change wasnât technical â it was organizational.
By expressing transformations as metadata:
- Engineers, analysts, and architects all worked in the same logical model.
- Business users could understand transformation flows visually.
- Developers focused on automation templates rather than hard-coded SQL.
âThe engineers built the templates; the modelers built the logic.â
Together, they co-authored the data warehouse.
This approach blurred the line between data modeling and data engineering â laying the foundation for todayâs metadata-driven development.
đ°ď¸ A Decade Ahead of Its Time
Looking back, the Volksbank / ASN implementation anticipated nearly every major trend of the modern data stack:

PowerDesigner became the DBT + Coalesce + Great Expectations + Confluence of its time â wrapped inside one integrated metadata ecosystem.
â¤ď¸ The Legacy
The Volksbank approach wasnât just about automation â it was about cognition. It allowed data teams to see, reason, and act on metadata as a single living model.
Today, as we move to open environments like VS Code and YAML-based modeling, weâre not reinventing the idea â weâre reviving it.
đ Coming Next
In Part 3, weâll rebuild this architecture in modern form:
đ§°Â Building the Integrated VS Code Environment â Where Modelers and Engineers Live Under One Roof.
Weâll explore:
- Folder structures and schemas for metadata-as-code
- YAML entity definitions and transformation specs
- Jinja macros for inheritance and unification
- AI-assisted modeling and validation
- And how VS Code becomes the new data house â with AI as the building crew.
Stay tuned â the marriage now gets a modern home. đĄ