offdataai
Public Sector & Nonprofit · data model template

Government Budget Execution & Fund Accounting Analytics data model

Kimball warehouse with two facts: an appropriation-grain budget fact (adopted, amended, transfers, final budget per fund/program/object-class/version) and an execution-grain posting fact (encumbrance, expenditure, revenue, transfer, available balance). Conformed dimensions cover GASB fund classification, programs and departments, uniform object classes, budget versions (adopted vs amended), vendors, grant funding sources (with CFDA), and a transaction-type junk dimension. Designed for Snowflake; built-in tagging for GASB / SOX compliance reporting.

Public-sector budget execution and fund accounting analytics for state and local governments. Models GASB fund accounting (governmental, proprietary, fiduciary) with the appropriation -> encumbrance -> expenditure lifecycle against adopted and amended budgets, by fund, program, department, object class, vendor, and grant funding source. Supports CAFR-aligned fund-balance reporting, budget-versus-actual, encumbrance reports for unliquidated commitments, budget-execution rate, and available appropriation. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballPublic Sector & NonprofitGASBSOX
12
tables
100
columns
16
relationships
2
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

budgetexecutionconformed_dimensions

Design decisions

  • Fund accounting at the appropriation grain

    GASB fund accounting requires that legal spending authority be tracked by fund + program + object class. An appropriation-grain fact keyed by fund / program / department / object class / fiscal period / budget version reproduces the legal budget book and supports the CAFR fund-balance roll-up.

  • Separate encumbrance and expenditure tracking

    Unlike corporate ledgers, government budgets reserve spending authority via encumbrances (POs / commitments) before expenditures liquidate them. Carrying encumbrance, pre-encumbrance, expenditure, and available_balance side-by-side on the execution fact lets the warehouse produce encumbrance reports and unliquidated-commitment balances without re-deriving them.

  • Object class for uniform expenditure classification

    Object class (personnel, materials, contractual, capital outlay, debt service, transfers) is the uniform GFOA/NACo expenditure classification required for comparable cross-jurisdictional and Census of Governments reporting. Modelling it as a conformed dimension on both facts keeps reporting consistent.

  • Multi-version budget dimension for adopted-vs-amended variance

    Governments routinely amend the adopted budget mid-year (supplemental appropriations, transfers between programs). A budget-version dimension lets the same appropriation grain carry adopted, amended, and working versions for legally-required variance reporting and year-end final-budget vs actual reconciliations.

  • Grant / funding-source dimension for federal-funds and CFDA tracking

    Federal pass-through funds drive Single Audit / Uniform Guidance obligations and require expenditures be tracked by CFDA / Assistance Listing number. A funding-source dimension on both facts enables Schedule of Expenditures of Federal Awards (SEFA) reporting and restricted-vs-unrestricted fund-balance classification.

Tables in the Government Budget Execution & Fund Accounting Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (2)

fct_budget_appropriation

Grain: one row per fund × program × object class × fiscal period × budget version (adopted/amended/transferred)

Appropriation-grain budget fact — adopted, amended, and transferred spending authority.

ColumnTypeKeys
budget_appropriation_keybigintPK
fiscal_period_keybigint
fund_keybigint
program_keybigint
department_keybigint
object_class_keybigint
budget_version_keybigint
grant_funding_source_keybigint
appropriation_ordinance_idvarchar
adopted_budgetdecimal
amended_budgetdecimal
transfers_indecimal
transfers_outdecimal
final_budgetdecimal
currencyvarchar

fct_budget_execution

Grain: one row per fund × program × object class × fiscal period × posting type (encumbrance/expenditure/revenue)

Execution-grain fact for encumbrance/expenditure/revenue/transfer postings against appropriations.

ColumnTypeKeys
budget_execution_keybigintPK
posting_date_keybigint
fiscal_period_keybigint
fund_keybigint
program_keybigint
department_keybigint
object_class_keybigint
vendor_keybigint
grant_funding_source_keybigint
transaction_type_keybigint
accounting_document_idvarchar
purchase_order_idvarchar
actual_expendituredecimal
encumbrance_amountdecimal
pre_encumbrancedecimal
revenue_amountdecimal
transfer_amountdecimal
available_balancedecimal
currencyvarchar

Dimension tables (10)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_monthsmallint
month_numbersmallint
month_namevarchar
quartersmallint
yearsmallint
is_business_dayboolean

dim_fiscal_period

Grain: one row per government fiscal period (typically Jul-Jun or Oct-Sep)

ColumnTypeKeys
fiscal_period_keybigintPK
fiscal_period_codevarcharBK
fiscal_yearsmallint
fiscal_period_numbersmallint
period_start_datedate
period_end_datedate
is_period_closedboolean
biennial_indicatorboolean

dim_fund

Grain: one row per fund — GASB-classified governmental / proprietary / fiduciary

ColumnTypeKeys
fund_keybigintPK
fund_codevarcharBK
fund_namevarchar
fund_typevarchar
fund_categoryvarchar
is_major_fundboolean
gasb_classificationvarchar

dim_program

Grain: one row per government program (the appropriation unit)

ColumnTypeKeys
program_keybigintPK
program_codevarcharBK
program_namevarchar
program_categoryvarchar
strategic_goalvarchar
functionvarchar

dim_department

Grain: one row per organizational department / agency

ColumnTypeKeys
department_keybigintPK
department_codevarcharBK
department_namevarchar
agencyvarchar
divisionvarchar
managervarcharPII
organization_levelsmallint

dim_object_class

Grain: one row per object class — uniform expenditure classification

ColumnTypeKeys
object_class_keybigintPK
object_classvarcharBK
object_class_namevarchar
object_categoryvarchar
naco_uniform_chartvarchar

dim_budget_version

Grain: one row per budget version (adopted / amended / working / final)

ColumnTypeKeys
budget_version_keybigintPK
budget_versionvarcharBK
version_namevarchar
version_datedate
approved_byvarchar
statusvarchar

dim_vendor

Grain: one row per vendor / payee receiving public funds

ColumnTypeKeys
vendor_keybigintPK
vendor_idvarcharBK
vendor_namevarcharPII
vendor_typevarchar
naics_codevarchar
is_minority_ownedboolean
is_activeboolean

dim_grant_funding_source

Grain: one row per grant or funding source — federal / state / local / private

ColumnTypeKeys
grant_funding_source_keybigintPK
funding_sourcevarcharBK
source_namevarchar
source_typevarchar
cfda_numbervarchar
grant_award_amountdecimal
is_restrictedboolean

dim_transaction_type

Grain: one row per posting transaction type (junk dimension of posting flags)

ColumnTypeKeys
transaction_type_keybigintPK
transaction_typevarcharBK
descriptionvarchar
posting_categoryvarchar
is_budgetaryboolean

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_budget_appropriation.fiscal_period_key → dim_fiscal_period (many-to-one)
  • fct_budget_appropriation.fund_key → dim_fund (many-to-one)
  • fct_budget_appropriation.program_key → dim_program (many-to-one)
  • fct_budget_appropriation.department_key → dim_department (many-to-one)
  • fct_budget_appropriation.object_class_key → dim_object_class (many-to-one)
  • fct_budget_appropriation.budget_version_key → dim_budget_version (many-to-one)
  • fct_budget_appropriation.grant_funding_source_key → dim_grant_funding_source (many-to-one)
  • fct_budget_execution.posting_date_key → dim_date (many-to-one)
  • fct_budget_execution.fiscal_period_key → dim_fiscal_period (many-to-one)
  • fct_budget_execution.fund_key → dim_fund (many-to-one)
  • fct_budget_execution.program_key → dim_program (many-to-one)
  • fct_budget_execution.department_key → dim_department (many-to-one)
  • fct_budget_execution.object_class_key → dim_object_class (many-to-one)
  • fct_budget_execution.vendor_key → dim_vendor (many-to-one)
  • fct_budget_execution.grant_funding_source_key → dim_grant_funding_source (many-to-one)
  • fct_budget_execution.transaction_type_key → dim_transaction_type (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time