Skip to content

feat: Yardi transaction pipeline (stg/int/fct)#1

Open
smorbad-byte wants to merge 1 commit into
mainfrom
feature/yardi-transaction-pipeline
Open

feat: Yardi transaction pipeline (stg/int/fct)#1
smorbad-byte wants to merge 1 commit into
mainfrom
feature/yardi-transaction-pipeline

Conversation

@smorbad-byte
Copy link
Copy Markdown
Contributor

Yardi Transaction Pipeline (stg / int / fct)

Three-layer dbt transformation pipeline for RAW.TRANS, addressing all identified data quality issues.

Pipeline Flow

RAW.TRANS
  │
  ▼
stg_yardi__transactions          (view)
  │
  ▼
int_yardi__transaction_details   (ephemeral)
  │
  ▼
fct_transactions                 (incremental merge)

Data Quality Issues Fixed

Issue Source Column Fix
5 inconsistent date formats DTEFFECTIVE (TEXT) parse_mixed_date macro with 5-format TRY_TO_DATE chain
Magic-number status codes ISTATUS (0/1/2/3) Mapped to posted / pending / reversed / archived
Magic-number void flag BVOID (0/1) Cast to boolean is_voided
Identifiers stored as NUMBER SCHECKNO, SGLACCTCODE Cast to VARCHAR
Zero-value FK = "no record" HVENDOR = 0 NULLIF(HVENDOR, 0)
7 denormalized text columns SPROPNAME, STENANTNAME, etc. Dropped in staging; resolved via joins in intermediate
Unparseable dates DTEFFECTIVE _stg_effective_date_parse_failed observability flag

Files Changed

New files (4):

  • macros/parse_mixed_date.sql — Reusable 5-format date parser macro
  • models/staging/stg_yardi__transactions.sql — Staging model
  • models/intermediate/int_yardi__transaction_details.sql — Intermediate model (7 dimension joins + derived columns)
  • models/marts/fct_transactions.sql — Fact table (incremental merge, surrogate key)

Updated files (4):

  • models/staging/_sources.yml — Populated with 9 RAW table declarations + freshness checks
  • models/staging/_schema.yml — Tests & docs for staging model
  • models/intermediate/_schema.yml — Tests & docs for intermediate model
  • models/marts/_schema.yml — Tests & docs for mart model

Design Decisions

  • Voided transactions kept — 101 voided rows (5.1%) are flagged with is_voided = true so audit trails are preserved; consumers filter as needed
  • Incremental strategy — Merge on transaction_id using created_at as watermark; handles both new inserts and late-arriving updates (e.g., voided after initial load)
  • Wide factfct_transactions includes denormalized dimension attributes for direct BI consumption, plus FK columns for joining to separate dim tables
  • Ephemeral intermediateint_yardi__transaction_details is materialized as ephemeral since it's only consumed by fct_transactions

How to Run

# Full pipeline
dbt run --select +fct_transactions

# Tests
dbt test --select +fct_transactions

Three-layer dbt transformation pipeline for RAW.TRANS:

- stg_yardi__transactions: cleans types, renames columns, maps status codes,
  parses 5 date formats, drops 7 denormalized columns, adds QA flag
- int_yardi__transaction_details: enriches via 7 dimension joins,
  adds derived business columns (days_to_post, net_amount, etc.)
- fct_transactions: incremental merge fact table with surrogate key

Also adds:
- parse_mixed_date macro (reusable 5-format TRY_TO_DATE chain)
- Source declarations with freshness checks for 9 RAW tables
- Full test coverage (unique, not_null, accepted_values, relationships)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant