Setup Guide
Complete deployment of Konsolidat: ClickHouse, Airbyte, dbt, Frappe/Konsol, and Excel VBA.
Prerequisites
| Component | Version | Purpose |
|---|---|---|
| Docker Desktop | 24+ | ClickHouse container |
| Python | 3.10+ | dbt Core, Frappe Bench |
| Node.js | 18+ | Frappe assets |
| Excel | 2016+ | VBA reporting |
| D365 F&O | Any | Source ERP (optional for demo) |
1. Clone the Repository
git clone https://github.com/your-org/konsolidat.git
cd konsolidat
cp .env.example .env
Edit .env to set your ClickHouse password:
CLICKHOUSE_PASSWORD=your_secure_password
2. Start ClickHouse
Tip:
./deploy.shis the primary one-click entrypoint — it provisions ClickHouse and the rest of the stack in one step. The manual steps below are useful when you want to bring up services individually.
docker compose up -d
This starts a single ClickHouse container with:
- HTTP API on port 8123
- Native protocol on port 9000
- PostgreSQL wire protocol on port 15432
- Init SQL creates databases:
epm_bronze,epm_staging,epm_silver,epm_gold
Verify:
curl "http://localhost:8123/?query=SHOW+DATABASES"
3. Set Up Airbyte (D365 Extraction)
Skip this section if using seed data only (demo mode).
3.1 Install Airbyte
curl -fsSL https://get.airbyte.com | bash # Installs abctl
abctl local install
Airbyte UI will be available at http://localhost:8000.
3.2 Register a D365 App in Azure AD
- Go to Azure Portal → App Registrations
- New registration → name:
Konsolidat Airbyte - Under API permissions → Add:
Dynamics 365 Finance and Operations → Ax.FullAccess - Under Certificates & secrets → New client secret → copy the value
- Note:
Tenant ID,Client ID,Client Secret,D365 Environment URL
3.3 Configure Airbyte Connection
Source: Dynamics 365 Finance & Operations (OData)
- Tenant ID, Client ID, Client Secret, Environment URL from step 3.2
- Enable
cross_company=trueon all streams
Destination: ClickHouse
- Host:
host.docker.internal(Docker-to-host), Port:8123 - Database:
epm_bronze, User:default, Password: from.env
Streams (15 entities):
| OData Entity | Bronze Table |
|---|---|
GeneralJournalAccountEntries | bronze_general_journal_account_entries |
GeneralJournalEntries | bronze_general_journal_entries |
MainAccounts | bronze_main_accounts |
MainAccountCategories | bronze_main_account_categories |
LegalEntities | bronze_legal_entities |
FiscalCalendars | bronze_fiscal_calendars |
FiscalCalendarYears | bronze_fiscal_calendar_years |
FinancialDimensions | bronze_financial_dimensions |
FinancialDimensionValues | bronze_financial_dimension_values |
ExchangeRateCurrencyPairs | bronze_exchange_rate_currency_pairs |
ExchangeRateTypes | bronze_exchange_rate_types |
BudgetRegisterEntries | bronze_budget_register_entries |
BudgetTransactionLines | bronze_budget_transaction_lines |
ConsolidationAccountGroups | bronze_consolidation_account_groups |
LedgerTrialBalanceFiscalYearSnapshotDataEntity | bronze_trial_balance_snapshot |
3.4 Run Initial Sync
Trigger a full sync from the Airbyte UI or CLI. This populates epm_bronze tables.
4. Install and Run dbt
cd dbt_project
pip install dbt-core dbt-clickhouse
Create ~/.dbt/profiles.yml (if not present):
open_epm:
target: dev
outputs:
dev:
type: clickhouse
host: localhost
port: 8123
user: default
password: "your_password"
schema: epm
secure: false
Build:
dbt deps # Install dbt packages
dbt seed # Load 13 CSV seeds into epm_gold schema
dbt build # Build all models + run 150+ tests
Seed Files (13)
| Seed | Purpose |
|---|---|
allocation_rules.csv | Multi-step allocation rules |
allocation_drivers_headcount.csv | Headcount driver values |
allocation_drivers_sqm.csv | Square meter driver values |
allocation_drivers_revenue.csv | Revenue driver values |
budget_annual_input.csv | Annual budget line items |
spread_profiles.csv | Monthly spread weights (EVEN, SEASONAL_RETAIL) |
consolidation_groups.csv | Entity → group mapping with ownership % |
consolidation_adjustments.csv | Top-side journal entries |
ic_elimination_rules.csv | Intercompany elimination rules |
scenario_definitions.csv | Scenario metadata (actuals, budget, forecast) |
entity_fiscal_calendars.csv | Entity → fiscal calendar mapping |
dimension_mappings.csv | Canonical dimension value harmonization (macro-consumed) |
test_consolidation_hierarchy.csv | Fixture for the consolidation hierarchy tests |
5. Set Up Frappe / Konsol
5.1 Install Frappe Bench
pip install frappe-bench
bench init frappe-bench --frappe-branch version-15
cd frappe-bench
5.2 Install Konsol App
bench get-app /path/to/konsol # Or git URL
bench new-site konsolidat.local --db-type mariadb --admin-password admin
bench --site konsolidat.local install-app konsol
bench start
Frappe is now running at http://localhost:8069.
5.3 Configure EPM Settings
- Log in to Frappe Desk (
http://localhost:8069) - Navigate to Setup → EPM Settings
- Fill in:
| Field | Value |
|---|---|
| ClickHouse Host | localhost |
| ClickHouse Port | 8123 |
| ClickHouse User | default |
| ClickHouse Password | Your .env password |
| Airbyte API URL | http://localhost:8000 |
| Airbyte Connection ID | From Airbyte UI |
| dbt Project Path | /path/to/konsolidat/dbt_project |
- Save
6. Set Up Excel VBA
6.1 Import the VBA Module
- Open Excel → Alt+F11 (VBA Editor)
- File → Import File →
excel/OpenEPM.bas - Close VBA Editor
- Save workbook as
.xlsm
6.2 Add References (Required)
In the VBA Editor: Tools → References → check:
Microsoft Scripting Runtime(forScripting.Dictionary)Microsoft XML, v6.0(forMSXML2.XMLHTTP60)
6.3 Configure Server URL
Run EPM_SetServer macro (Alt+F8) and enter your Frappe URL (e.g., http://localhost:8069).
This saves the URL as a Custom Document Property in the workbook, so it persists across sessions.
6.4 Log In and Test
- Run
EPM_Login→ enter Frappe credentials - In any cell:
=EPM("USMF", 2024, 5, "401100") - Press Ctrl+Shift+R to refresh
7. Optional: Excel Task Pane Add-in
The Office.js task pane provides pipeline orchestration (trigger sync + dbt from Excel).
Sideload for Development
- Copy
excel-addin/manifest.xml - In Excel: Insert → My Add-ins → Upload My Add-in → select the manifest
- The task pane appears on the Home tab as "Konsolidat"
The task pane connects to Frappe at http://localhost:8069 and allows:
- Login with Frappe credentials
- Viewing latest pipeline run status
- Triggering new pipeline runs (Airbyte sync + dbt build)
Verification Checklist
-
docker psshowskonsolidat_clickhousehealthy -
curl http://localhost:8123/?query=SHOW+DATABASESreturns 4 databases -
dbt buildcompletes with 0 errors - Frappe Desk accessible at
http://localhost:8069 - EPM Settings saved with ClickHouse connection
-
=EPM("USMF", 2024, 5, "401100")returns a numeric value after Ctrl+Shift+R
Next Steps
- Configuration Reference — All settings in detail
- Excel VBA Guide — Building reports with EPM formulas
- D365 Integration — Azure AD, OData entity details
- Deployment Guide — Production deployment