Turner & Townsend / Fabric Medallion

Gold Workspace — Product Backlog Items

← Back to Requirements Notes
# Group Title Description Acceptance Criteria Tasks
1 Infrastructure Create Azure DevOps repo: D365-Fabric-Gold Create a new Azure DevOps Git repository named D365-Fabric-Gold to hold all artefacts for the new shared Gold Fabric workspace.
  • Repo exists in turntownd365 / D365 BI - Kerv DevOps project
  • Default branch is main
  • Create repo in turntownd365 / D365 BI - Kerv DevOps project
  • Set default branch to main
2 Infrastructure Provision Gold Fabric workspace — Dev, UAT, and Prod Create three Fabric workspaces for the Gold layer: Dev, UAT, and Prod. These sit between Silver and the Mart workspaces in the data flow.
  • Three workspaces created: D365-Fabric-Dev-Gold, D365-Fabric-UAT-Gold, D365-Fabric-Prod-Gold
  • Appropriate capacity assigned to each
  • Workspace Identity has PBI Access
  • Workspaces visible in Fabric portal
  • Create three workspaces: D365-Fabric-Dev-Gold, D365-Fabric-UAT-Gold, D365-Fabric-Prod-Gold
  • Assign appropriate capacity to each
  • Grant Workspace Identity PBI Access
  • Verify workspaces are visible in Fabric portal
3 Infrastructure Create Gold Lakehouse in Dev workspace Create a Fabric Lakehouse named Gold in the Dev workspace. UAT and Prod are provisioned via CI/CD pipeline deployment from the repo definition.
  • Gold Lakehouse exists in D365-Fabric-Dev-Gold workspace
  • SQL analytics endpoint accessible
  • Lakehouse definition committed to D365-Fabric-Gold repo
  • Create Gold Lakehouse in D365-Fabric-Dev-Gold workspace
  • Verify SQL analytics endpoint is accessible
  • Commit Lakehouse definition to D365-Fabric-Gold repo
4 Infrastructure Set up VariableLibrary in D365-Fabric-Gold repo Add a VariableLibrary item to D365-Fabric-Gold with value sets for Dev, UAT, and Prod, following the same pattern as existing repos.
  • VariableLibrary committed to repo
  • Value sets exist for Dev, UAT, and Prod
  • Variables include Gold Lakehouse workspace ID and item ID per environment
  • Variables include Management Accounts workspace ID per environment (required by nb_0003_refreshArtifacts)
  • Naming conventions match existing repos
  • Commit VariableLibrary to repo
  • Add value sets for Dev, UAT, and Prod
  • Include Gold Lakehouse workspace ID and item ID per environment
  • Include Management Accounts workspace ID per environment (required by nb_0003_refreshArtifacts)
  • Follow naming conventions from existing repos
5 Infrastructure Set up azure-pipelines.yaml and CI/CD scripts in D365-Fabric-Gold Configure the Azure DevOps CI/CD pipeline for D365-Fabric-Gold, using the deployment script pattern from Bronze and Gold-ManagementAccounts repos.
  • azure-pipelines.yaml committed and pipeline registered in DevOps
  • Pipeline deploys successfully to Dev on merge to main
  • Auth scripts (SPN + user) in place
  • Environment gates match existing repos
  • Repo connected (Git sync) to D365-Fabric-Dev-Gold, D365-Fabric-UAT-Gold, and D365-Fabric-Prod-Gold workspaces
  • Gold Lakehouse deploys successfully to UAT and Prod via pipeline
  • Pipeline runs successfully end-to-end in UAT and Prod after initial deployment
  • Commit azure-pipelines.yaml and register pipeline in DevOps
  • Confirm pipeline deploys successfully to Dev on merge to main
  • Add auth scripts (SPN + user)
  • Match environment gates to existing repos
  • Connect repo (Git sync) to D365-Fabric-Dev-Gold, D365-Fabric-UAT-Gold, and D365-Fabric-Prod-Gold workspaces
  • Deploy Gold Lakehouse to UAT and Prod via pipeline
  • Run pipeline end-to-end in UAT and Prod after initial deployment
6 Migration Migrate gold_config notebook to D365-Fabric-Gold Move the gold_config notebook from D365-Fabric-Gold-ManagementAccounts to D365-Fabric-Gold. gold_config is a config-provider notebook: it contains only table schema definitions (column names, data types, quality checks, source mappings) stored as a Python list, and exits with the config as JSON for other notebooks to consume. It has no Lakehouse or workspace references — no content changes are required on migration.
  • Notebook committed to D365-Fabric-Gold under Notebooks/Config/
  • No content changes required — notebook contains only schema definitions with no Lakehouse or workspace references
  • Notebook runs without error in Dev Gold workspace (verify mssparkutils.notebook.exit completes successfully)
  • Old notebook removed from D365-Fabric-Gold-ManagementAccounts (PBI 17)
  • Copy notebook to D365-Fabric-Gold under Notebooks/Config/ — no content changes needed
  • Run notebook in Dev Gold workspace and confirm mssparkutils.notebook.exit completes without error
  • Remove old notebook from D365-Fabric-Gold-ManagementAccounts (PBI 17)
7 Migration Migrate utility notebooks to D365-Fabric-Gold Move nb_0001_functions_gold and nb_0002_government from D365-Fabric-Gold-ManagementAccounts to D365-Fabric-Gold. nb_0003_refreshArtifacts is handled separately in PBI 8.
  • Both notebooks in D365-Fabric-Gold under Notebooks/Utility/
  • Notebooks deploy and run successfully in Dev Gold workspace
  • No references to old workspace remain in notebook content
  • getSource() fix: The current check if "Gold-" in current_layer in nb_0001_functions_gold will not match the new workspace name (D365-Fabric-Dev-Gold strips to "Gold" via regex, not "Gold-Something"). Update the condition to also handle the plain "Gold" case — e.g. if current_layer == "Gold" or "Gold-" in current_layer
  • Move both notebooks to D365-Fabric-Gold under Notebooks/Utility/
  • Deploy and run both notebooks in Dev Gold workspace
  • Remove any references to the old workspace from notebook content
  • getSource() fix: Update the condition in nb_0001_functions_gold from if "Gold-" in current_layer to also handle the plain "Gold" case — e.g. if current_layer == "Gold" or "Gold-" in current_layer
8 Migration Move nb_0003_refreshArtifacts to D365-Fabric-Gold and update to target Management Accounts workspace Move nb_0003_refreshArtifacts to D365-Fabric-Gold so it sits alongside nb_0001_functions_gold (resolving the %run dependency). Update it to explicitly target the Management Accounts workspace when listing datasets and triggering refreshes, as it will now run from Gold not Management Accounts. Called from the Gold Orchestration pipeline as the final step after all notebooks complete.
  • Notebook moved to D365-Fabric-Gold under Notebooks/Utility/
  • %run nb_0001_functions_gold continues to work — both notebooks are now in Gold
  • list_datasets() updated to pass Management Accounts workspace ID explicitly
  • refreshModel updated to accept and use the Management Accounts workspace ID rather than the current notebook workspace
  • Management Accounts workspace ID sourced from VariableLibrary (Dev, UAT, Prod values)
  • Notebook added as final step in Gold Orchestration pipeline (PBI 12)
  • Notebook runs successfully in Dev and refreshes all semantic models in the Management Accounts workspace
  • Notebook removed from D365-Fabric-Gold-ManagementAccounts
  • Move notebook to D365-Fabric-Gold under Notebooks/Utility/
  • Verify %run nb_0001_functions_gold continues to work with both notebooks in Gold
  • Update list_datasets() to pass Management Accounts workspace ID explicitly
  • Update refreshModel to accept and use the Management Accounts workspace ID rather than the current notebook workspace
  • Source Management Accounts workspace ID from VariableLibrary (Dev, UAT, Prod values)
  • Add notebook as final step in Gold Orchestration pipeline (PBI 12)
  • Run notebook in Dev and confirm it refreshes all semantic models in the Management Accounts workspace
  • Remove notebook from D365-Fabric-Gold-ManagementAccounts
9 Migration Migrate and rename all 16 dim notebooks to D365-Fabric-Gold Move all 16 Management Accounts dimension notebooks to D365-Fabric-Gold, renaming them to generic gold names (no _managementaccounts suffix) and updating write targets to the gold.* schema.
  • All 16 notebooks renamed and committed to D365-Fabric-Gold under Notebooks/Dimensions/
  • Silver Lakehouse remains read source; Gold Lakehouse is write target
  • All 16 run successfully in Dev and write to the correct gold.* tables:
  • NotebookOutput Table
    nb_dim_dategold.dim_accountingdate
    nb_dim_accountgold.dim_chartofaccount
    nb_dim_companygold.dim_company
    nb_dim_cost_center_hierarchygold.dim_costcenter
    nb_dim_financial_counterpartgold.dim_counterpart
    nb_dim_financial_departmentgold.dim_department
    nb_dim_financial_lead_projectgold.dim_leadproject
    nb_dim_financial_officegold.dim_office
    nb_dim_financial_projectgold.dim_project
    nb_dim_customergold.dim_customer
    nb_dim_general_journalgold.dim_generaljournal
    nb_dim_securitygold.dim_security
    nb_dim_suppliergold.dim_supplier
    nb_dim_ultimate_customergold.dim_ultimatecustomer
    nb_dim_workergold.dim_worker
    nb_dim_posting_typegold.dim_postingtype
  • Row counts match pre-migration baseline for all 16 dim tables
  • Rename all 16 notebooks and commit to D365-Fabric-Gold under Notebooks/Dimensions/
  • Confirm Silver Lakehouse as read source and Gold Lakehouse as write target
  • Run all 16 in Dev and verify each writes to the correct gold.* table (see AC for full list)
  • Validate row counts against pre-migration baseline for all 16 dim tables
10 Migration Migrate and rename 3 fact notebooks to D365-Fabric-Gold Move nb_factgeneralledger_managementaccounts, nb_factgeneralledgerbudget_managementaccounts, and nb_factheadcount_managementaccounts from D365-Fabric-Gold-ManagementAccounts to D365-Fabric-Gold, renaming to generic gold names.
  • All 3 notebooks renamed and committed to D365-Fabric-Gold under Notebooks/Facts/
  • Gold Lakehouse is write target; Silver remains read source
  • All 3 run successfully in Dev and write to the correct gold.* tables:
  • NotebookOutput Table
    nb_fact_gl_transactiongold.fct_generalledger
    nb_fact_budgetgold.fct_generalledgerbudget
    nb_fact_headcountgold.fct_headcount
  • Row counts match pre-migration baseline
  • Rename all 3 notebooks and commit to D365-Fabric-Gold under Notebooks/Facts/
  • Confirm Gold Lakehouse as write target and Silver as read source
  • Run all 3 in Dev and verify each writes to the correct gold.* table (see AC for full list)
  • Validate row counts against pre-migration baseline
11 Migration Update all migrated notebooks to write to new Gold Lakehouse Review every migrated notebook and confirm all write operations target the new Gold Lakehouse. Remove any hardcoded references to the old ManagementAccounts Lakehouse.
  • Known hardcoded management_accounts.* schema references fixed in active notebook code:
  • nb_dim_ultimate_customer (was nb_dimultimatecustomer_managementaccounts) — reads management_accounts.dim_customer (line 31) and writes management_accounts.dim_ultimatecustomer (line 41)
    nb_fact_gl_transaction (was nb_factgeneralledger_managementaccounts) — self-references own output table management_accounts.fct_generalledger (line 888), likely for incremental merge pattern
  • All other notebooks scanned and confirmed free of active hardcoded schema references (commented-out references acceptable)
  • Notebook metadata GUIDs are handled by CI/CD deployment — no manual action required
  • PR review completed before merge
  • Fix hardcoded management_accounts.* schema references in active notebook code:
  • nb_dim_ultimate_customer — fix read of management_accounts.dim_customer (line 31) and write of management_accounts.dim_ultimatecustomer (line 41)
    nb_fact_gl_transaction — fix self-reference to management_accounts.fct_generalledger (line 888)
  • Scan all other notebooks and confirm no active hardcoded schema references remain (commented-out references are acceptable)
  • Note: notebook metadata GUIDs are handled by CI/CD deployment — no manual action required
  • Complete PR review before merge
12 Orchestration Create Gold Orchestration pipeline in new Gold workspace Create a Data Pipeline in the Gold workspace that runs all dim and fact notebooks in the correct dependency order.
  • Pipeline exists in Gold workspace (Dev, UAT, Prod)
  • Pipeline committed to D365-Fabric-Gold repo
  • Dims run before facts
  • nb_0003_refreshArtifacts runs as the final step after all fact notebooks complete
  • Pipeline completes successfully in Dev
  • Failures halt the pipeline correctly
  • Create pipeline in Gold workspace (Dev, UAT, Prod)
  • Commit pipeline to D365-Fabric-Gold repo
  • Order dims to run before facts
  • Add nb_0003_refreshArtifacts as the final step after all fact notebooks complete
  • Run pipeline in Dev and confirm it completes successfully
  • Verify failures halt the pipeline correctly
13 Orchestration Update Full Orchestration pipeline: Bronze → Silver → Gold → Mart Update the Full Orchestration pipeline to call the Gold workspace pipeline after Silver and the Management Accounts Mart pipeline after Gold.
  • Sequence is Bronze → Silver → Gold → Management Accounts Mart
  • Pipeline tested end-to-end in Dev
  • Failure in any stage halts downstream stages
  • Update Full Orchestration pipeline sequence to Bronze → Silver → Gold → Management Accounts Mart
  • Test pipeline end-to-end in Dev
  • Verify failure in any stage halts downstream stages
14 Mart Cleanup Create shortcuts_config.json with Gold-to-MA reverse mapping Create a JSON config file that defines the source workspace and Lakehouse (by VariableLibrary variable name) and maps each Gold table to its target shortcut name. Using variable names rather than hardcoded IDs makes the config reusable for any source workspace.
  • shortcuts_config.json committed to D365-Fabric-Gold-ManagementAccounts repo under Config/
  • File includes source_workspace_variable and source_lakehouse_variable fields referencing the VariableLibrary variable names (e.g. Gold_Workspace_ID, Gold_Lakehouse_ID)
  • File contains one mapping entry per table with source_table and shortcut_name fields:
  • source_table (Gold)shortcut_name (current MA table name)
    gold.dim_accountingdatemanagement_accounts.dim_accountingdate
    gold.dim_chartofaccountmanagement_accounts.dim_chartofaccount
    gold.dim_companymanagement_accounts.dim_company
    gold.dim_costcentermanagement_accounts.dim_costcenter
    gold.dim_counterpartmanagement_accounts.dim_counterpart
    gold.dim_customermanagement_accounts.dim_customer
    gold.dim_departmentmanagement_accounts.dim_department
    gold.dim_generaljournalmanagement_accounts.dim_generaljournal
    gold.dim_leadprojectmanagement_accounts.dim_leadproject
    gold.dim_officemanagement_accounts.dim_office
    gold.dim_postingtypemanagement_accounts.dim_postingtype
    gold.dim_projectmanagement_accounts.dim_project
    gold.dim_securitymanagement_accounts.dim_security
    gold.dim_suppliermanagement_accounts.dim_supplier
    gold.dim_ultimatecustomermanagement_accounts.dim_ultimatecustomer
    gold.dim_workermanagement_accounts.dim_worker
    gold.fct_generalledgermanagement_accounts.fct_generalledger
    gold.fct_generalledgerbudgetmanagement_accounts.fct_generalledgerbudget
    gold.fct_headcountmanagement_accounts.fct_headcount
  • Create and commit shortcuts_config.json to D365-Fabric-Gold-ManagementAccounts repo under Config/
  • Add source_workspace_variable and source_lakehouse_variable fields referencing the VariableLibrary variable names (e.g. Gold_Workspace_ID, Gold_Lakehouse_ID)
  • Add one mapping entry per table with source_table and shortcut_name fields (see AC for full mapping)
15 Mart Cleanup Create Lakehouse shortcuts in Management Accounts Lakehouse pointing to Gold Lakehouse tables Run nb_create_shortcuts in the Management Accounts workspace to create all 19 shortcuts using the reverse mapping in shortcuts_config.json. Shortcuts are named with the original Management Accounts table names so the semantic model requires no changes.
  • All shortcuts created in Management Accounts Lakehouse using current table names (e.g. management_accounts.dim_accountingdate, management_accounts.fct_generalledger)
  • Each shortcut points to the correct Gold Lakehouse table
  • Data visible via SQL endpoint for each shortcut
  • Shortcuts committed to repo via shortcuts.metadata.json
  • A Fabric pipeline created to run nb_create_shortcuts, committed to D365-Fabric-Gold-ManagementAccounts repo — triggered manually after deployment to UAT and Prod to create or refresh shortcuts
  • Run nb_create_shortcuts to create all shortcuts in Management Accounts Lakehouse using current table names (e.g. management_accounts.dim_accountingdate, management_accounts.fct_generalledger)
  • Verify each shortcut points to the correct Gold Lakehouse table
  • Confirm data is visible via SQL endpoint for each shortcut
  • Commit shortcuts to repo via shortcuts.metadata.json
  • Create a Fabric pipeline to run nb_create_shortcuts, commit to D365-Fabric-Gold-ManagementAccounts repo, and trigger manually after deployment to UAT and Prod
16 Mart Cleanup Validate Management Accounts semantic model against shortcuts Confirm the Management Accounts semantic model resolves correctly against the shortcut tables. Because shortcuts use the original MA names, no model changes should be required.
  • All tables resolve without error
  • Model refreshes successfully in Dev
  • No broken relationships or missing columns
  • Report visuals load correctly on main report pages
  • Confirm management_accounts.dim_etlproperties is not referenced in the model — if it is, remove it before PBI 19 drops the table
  • Verify all tables resolve without error
  • Refresh model in Dev and confirm success
  • Check for broken relationships or missing columns
  • Load main report pages and verify visuals render correctly
  • Confirm management_accounts.dim_etlproperties is not referenced in the model — if it is, remove it before PBI 19 drops the table
17 Mart Cleanup Remove Gold notebooks and Gold Lakehouse from D365-Fabric-Gold-ManagementAccounts Delete the dim notebooks, fact notebooks, gold_config, utility notebooks, and Gold Lakehouse write artefacts from D365-Fabric-Gold-ManagementAccounts now that they live in D365-Fabric-Gold.
  • Notebooks folder contains only Mart-specific items
  • No Gold write notebooks deploy into Management Accounts workspace
  • Change merged via PR
  • No orphaned artefacts remain in Management Accounts workspace
  • Delete dim notebooks, fact notebooks, gold_config, utility notebooks, and Gold Lakehouse write artefacts from D365-Fabric-Gold-ManagementAccounts
  • Confirm Notebooks folder contains only Mart-specific items
  • Merge change via PR
  • Verify no orphaned artefacts remain in Management Accounts workspace
18 Mart Cleanup Update D365-Fabric-Gold-ManagementAccounts CI/CD to remove Gold deployments Update azure-pipelines.yaml in D365-Fabric-Gold-ManagementAccounts to remove Gold notebooks and config from the deployment. As Fabric deployment pipelines are additive, notebooks already deployed to Dev, UAT, and Prod must also be manually deleted from each workspace.
  • Gold notebook and config paths removed from azure-pipelines.yaml deployment steps
  • Pipeline still deploys semantic model, reports, Mart pipelines, and shortcuts metadata
  • Pipeline runs cleanly after change in Dev, UAT, and Prod
  • Gold notebooks and config manually deleted from Dev, UAT, and Prod Management Accounts workspaces in Fabric portal
  • Gold notebook and config folders removed from D365-Fabric-Gold-ManagementAccounts repo via PR (or confirmed already removed by PBI 18)
  • Gold notebooks confirmed absent from all three environments and the DevOps repo before closing
  • PR reviewed and merged
  • Remove Gold notebook and config paths from azure-pipelines.yaml deployment steps
  • Verify pipeline still deploys semantic model, reports, Mart pipelines, and shortcuts metadata
  • Run pipeline in Dev, UAT, and Prod and confirm it runs cleanly
  • Manually delete Gold notebooks and config from Dev, UAT, and Prod Management Accounts workspaces in Fabric portal
  • Remove Gold notebook and config folders from D365-Fabric-Gold-ManagementAccounts repo via PR (or confirm already removed by PBI 18)
  • Confirm Gold notebooks are absent from all three environments and the DevOps repo before closing
  • Review and merge PR
19 Mart Cleanup Move dim_etlproperties from management_accounts schema to audit schema dim_etlproperties is an internal refresh-tracking table, not a business dim. Move it to the audit schema to sit alongside audit.qualitychecks and remove it from the management_accounts schema.
  • Table recreated as audit.dim_etlproperties with the same structure and data
  • management_accounts.dim_etlproperties dropped
  • Any notebook references to management_accounts.dim_etlproperties updated to audit.dim_etlproperties
  • Semantic model confirmed unaffected (table should not be in the model)
  • Recreate table as audit.dim_etlproperties with the same structure and data
  • Drop management_accounts.dim_etlproperties
  • Update any notebook references from management_accounts.dim_etlproperties to audit.dim_etlproperties
  • Confirm semantic model is unaffected (table should not be in the model)
20 Operations Set up Fabric Deployment Pipeline for Gold workspace Create the Fabric Deployment Pipeline connecting the Gold Dev, UAT, and Prod workspaces. This promotes all workspace items — Gold Lakehouse, notebooks, and Gold Orchestration Data Pipeline — through environments. Must be in place before DevOps can trigger Gold promotions.
  • Fabric Deployment Pipeline created with three stages: D365-Fabric-Dev-Gold → D365-Fabric-UAT-Gold → D365-Fabric-Prod-Gold
  • All workspace items visible in the pipeline: Gold Lakehouse, dim and fact notebooks, and Gold Orchestration Data Pipeline
  • Deployment rules set for each workspace item to handle environment-specific configuration (e.g. Lakehouse connections)
  • Successful deployment from Dev to UAT
  • Successful deployment from UAT to Prod
  • Create Fabric Deployment Pipeline with three stages: D365-Fabric-Dev-Gold → D365-Fabric-UAT-Gold → D365-Fabric-Prod-Gold
  • Verify all workspace items are visible: Gold Lakehouse, dim and fact notebooks, and Gold Orchestration Data Pipeline
  • Set deployment rules for each workspace item to handle environment-specific configuration (e.g. Lakehouse connections)
  • Deploy from Dev to UAT and confirm success
  • Deploy from UAT to Prod and confirm success
21 Validation End-to-end validation — Management Accounts reports match pre-migration figures Run a full refresh via the new pipeline sequence and validate that all Management Accounts report figures match the pre-migration baseline for at least two closed fiscal periods.
  • Full pipeline run completes without errors (Bronze → Silver → Gold → Mart)
  • Key measures (GL amounts, budget amounts, headcount) match pre-migration values
  • Any variances investigated and signed off
  • Stakeholder sign-off obtained before Prod deployment
  • Run full pipeline (Bronze → Silver → Gold → Mart) and confirm it completes without errors
  • Validate key measures (GL amounts, budget amounts, headcount) match pre-migration values
  • Investigate and sign off any variances
  • Obtain stakeholder sign-off before Prod deployment