Resources
FAQ
Answers to common questions about operating and extending your BC2Fabric deployment.
Contents
- How is the data synchronizing working?
- How to size the Fabric Capacity for the mirroring?
- What licenses do I need to run BC2Fabric?
- How to test BC2Fabric?
- How close to real-time will the data be available in Fabric?
- How do I change the refresh time and schedule?
- How do I build Power BI reports on top of the mirrored data?
- How can I see how up to date the data is?
- How can I see the number of rows per table (and per table and company) in my mirrored database?
- How are tables and fields named in BC2Fabric?
- How can I use my own endpoints for mirroring?
- How can I extend or change the mirrored data after the initial load?
- Should I limit the columns in my Custom Queries?
- How can I extend the mirrored data with other data sources?
- How are deleted records handled with incremental loading?
- How do I get notified about load failures?
- How does the loading impact Business Central?
- How is the access to Business Central working?
- What needs to be considered when pausing/resuming the Fabric capacity?
How is the data synchronizing working?
- BC2Fabric uses Business Central APIs to extract data from Business Central, i.e. it is pulling instead of pushing data.
-
All queries provided by BC2Fabric and generated by the BC2Fabric query generator include the hint
DataAccessIntent = ReadOnlyso data is pulled from the read-only replica. Read-only replicas are available for all production environments. See the DataAccessIntent property for more details. - Various performance patterns were used to maximize loading performance, including those described in the Business Central performance guidance.
How to size the Fabric Capacity for the mirroring?
Based on our internal benchmarks and information from clients, BC2Fabric is approximately 5 to 10 times more CU-efficient than standard Gen2 Dataflows.
The default usage of incremental refresh minimizes the computational load. For most scenarios aiming for near-real-time synchronization (refresh intervals between 5 to 15 minutes), a Fabric F2 capacity will likely be sufficient for the mirroring process.
Our Recommendation:
- Start with an F2 Capacity: Configure your desired refresh frequency (e.g., every 15 minutes) on an F2 SKU.
- Monitor: Use the Fabric Capacity Metrics app to observe consumption and adjust the capacity if necessary
This estimation applies strictly to the mirroring/ingestion process handled by BC2Fabric. Any additional workloads—such as heavy SQL transformations, Notebooks, or Power BI reporting running on top of the mirrored data—consume their own Capacity Units and must be factored into your total sizing calculation separately.
What licenses do I need to run BC2Fabric?
BC2Fabric requires a license for the BC2Fabric solution, an active Fabric or Fabric Trial Capacity (F2 or larger), and at least one Power BI Pro or Premium Per User account to manage and share the workspace assets.
How to test BC2Fabric?
- Install the BC2Fabric workload.
- The trial will be activated automatically for 30 days.
- The trial includes all premium features.
How close to real-time will the data be available in Fabric?
It depends mainly on your refresh frequency and the mirroring ingestion time.
- With BC2Fabric Premium licenses, you can schedule refreshes at high frequency (for example, every 2 or 3 minutes) due to the incremental load that will only load new and changed data. See the section: How do I change the refresh….
- This incremental load from Business Central typically runs in ~1 minute.
- The mirroring replication (landing zone → OneLake/Delta) typically takes less than 2 minutes, assuming the Fabric capacity is not throttling/overloaded. (Microsoft Learn)
Microsoft doesn't guarantee a specific mirroring replication delay. They describe mirroring as near real-time and list factors that influence latency. (Microsoft Learn)
In practice, the duration of these steps typically translates to an end-to-end delay from data entry in Business Central to report availability of 5 to 15 minutes for most setups - assuming the reports are using Direct Lake Mode to directly reflect the changed data.
How do I change the refresh time and schedule?
The BC2Fabric workload deploys a Fabric pipeline named bc2fabric_refresh that orchestrates loads from Business Central into the mirrored database. Scheduling is controlled on that pipeline.
- In Microsoft Fabric, open the workspace that hosts the BC2Fabric workload.
- Select the
bc2fabric_refreshpipeline and choose Schedule from the command bar. - Adjust the frequency, start time, end time, or deactivate the schedule. For more details, see Scheduled pipeline runs in Fabric.
You can also trigger an on-demand load by selecting Run now on the pipeline whenever you need an immediate refresh.
How do I build Power BI reports on top of the mirrored data?
The mirrored bc2fabric_mirror database supports building semantic models in Import or Direct Lake mode. When using Direct Lake, reports stay synchronized without maintaining dataset refreshes.
Direct Lake Mode
- Open the Fabric workspace and launch the
bc2fabric_mirrordatabase to review the synchronized Business Central tables. - From the mirroring experience, choose New > Semantic model, provide a name and select the workspace where the semantic model should be created. Select the mirrored tables that should be part of the semantic model.
- Use the web authoring experience to build relationships, DAX measures etc. Changes to the model will automatically be saved to the model in the service.
- Build Power BI reports in the service or connect with Power BI Desktop to the Direct Lake Semantic Model.
Import Mode
- Open Power BI Desktop.
- Select Get data > OneLake catalog.
- Select the
bc2fabric_mirrordatabase in the workspace that was used for mirroring, then choose Connect. - Select the tables that should be loaded.
For more details on creating semantic models in Import or DirectQuery storage modes, see this Microsoft Learn article.
How can I see how up to date the data is?
Use Fabric monitoring tools for transparency of the loading process.
- The overview on the mirroring database
bc2fabric_mirrorshows the last completed mirroring time for every table so you can see when each dataset finished syncing. - All mirrored tables expose a
Modified at BC2FABcolumn that records when each row was last retrieved from Business Central.
Surface those timestamps through T-SQL queries or Power BI reports to get transparency into the freshness of data.
How can I see the number of rows per table (and per table and company) in my mirrored database?
Open the SQL endpoint of the mirroring database (normally called bc2fabric_mirror) and run one of the queries below. The SQL query editor is described in this Microsoft Learn article.
DECLARE @Schema sysname = N'bc';
DECLARE @Sql nvarchar(max) = NULL;
SELECT
@Sql = COALESCE(@Sql + N' UNION ALL ', N'')
+ N'SELECT '
+ QUOTENAME(s.name + N'.' + t.name, '''') + N' AS [table_name], '
+ N'COUNT_BIG(1) AS [row_count] '
+ N'FROM ' + QUOTENAME(s.name) + N'.' + QUOTENAME(t.name)
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE s.name = @Schema
ORDER BY t.name;
IF @Sql IS NULL
BEGIN
-- No tables found in that schema
SELECT CAST(NULL AS nvarchar(256)) AS [table_name], CAST(0 AS bigint) AS [row_count]
WHERE 1 = 0;
END
ELSE
BEGIN
EXEC sys.sp_executesql @Sql;
END
DECLARE @Schema sysname = N'bc';
DECLARE @Sql nvarchar(max) = NULL;
;WITH Tbl AS (
SELECT
s.name AS schema_name,
t.name AS table_name,
HasBCCompany = CASE
WHEN EXISTS (
SELECT 1
FROM sys.columns c
WHERE c.object_id = t.object_id
AND c.name = N'BC Company'
) THEN 1 ELSE 0
END
FROM sys.tables t
JOIN sys.schemas s ON s.schema_id = t.schema_id
WHERE s.name = @Schema
)
SELECT
@Sql = COALESCE(@Sql + N' UNION ALL ', N'')
+ CASE WHEN HasBCCompany = 1 THEN
N'SELECT '
+ QUOTENAME(schema_name + N'.' + table_name, '''') + N' AS [table_name], '
+ N'CAST([BC Company] AS nvarchar(250)) AS [BC Company], '
+ N'COUNT_BIG(1) AS [row_count] '
+ N'FROM ' + QUOTENAME(schema_name) + N'.' + QUOTENAME(table_name) + N' '
+ N'GROUP BY [BC Company]'
ELSE
N'SELECT '
+ QUOTENAME(schema_name + N'.' + table_name, '''') + N' AS [table_name], '
+ N'CAST(N'''' AS nvarchar(250)) AS [BC Company], '
+ N'COUNT_BIG(1) AS [row_count] '
+ N'FROM ' + QUOTENAME(schema_name) + N'.' + QUOTENAME(table_name)
END
FROM Tbl
ORDER BY table_name;
IF @Sql IS NULL
BEGIN
-- No tables found in that schema
SELECT
CAST(NULL AS nvarchar(256)) AS [table_name],
CAST(N'' AS nvarchar(250)) AS [BC Company],
CAST(0 AS bigint) AS [row_count]
WHERE 1 = 0;
END
ELSE
BEGIN
EXEC sys.sp_executesql @Sql;
END
How are tables and fields named in BC2Fabric?
BC2Fabric mirrors Business Central with the same table and field names from Business Central, removing only special characters such as ., ,, and / from table names.
Behind the scenes, BC2Fabric aligns API queries with the Business Central field list so objects match their Business Central counterparts—this is ensured for the standard BC2Fabric objects and for queries generated with the BC2Fabric query generator and facilitates subsequent queries on the data.
How can I use my own endpoints for mirroring?
Custom APIs and tables can be mirrored as long as they expose the Business Central change tracking columns that BC2Fabric expects.
After creating the Queries (e.g. by using the BC2Fabric query generator), endpoints for custom tables need to be added to the BC2Fabric table config. Once added, they are automatically picked up by the mirroring mechanism—no changes are required in Fabric.
Follow the instructions how to add custom tables.
If custom fields should be added to an existing standard table for mirroring, the Entity Set Name in the existing BC2Fabric table config needs to be replaced by the custom API endpoint. To do so the Assist-Edit of the "Entity Set Name" (... in the field) can be used to select the custom endpoint. The other relevant fields (Publisher, Group, API Version) will be set based on this selection.
How can I extend or change the mirrored data after the initial load?
Adding new tables: If you add new tables in BC2Fabric Setup in Business Central, they will be picked up automatically and fetched with the next load.
Changing an existing table schema (fields): If you add or remove fields on endpoints that are already being mirrored, go to the BC2Fabric workload → Tables tab and use the Reset button for the affected table. The next refresh will reload the table using the updated schema.
Should I limit the columns in my Custom Queries?
No, we recommend including any columns that might be needed for future reporting.
Because BC2Fabric is optimized for efficient refreshes (loading only new or changed data), adding extra columns has a minimal impact on compute and storage overhead.
Including these fields upfront ensures that Fabric and Power BI builders can enhance semantic models later without requiring additional changes to the APIs in Business Central.
How can I extend the mirrored data with other data sources?
OneLake lets you combine Business Central data with other sources without copying tables out of Fabric.
For BC2Fabric mirrored data, use schema shortcuts as the recommended approach. Schema shortcuts expose the full mirrored schema in a Lakehouse and keep it in sync as new mirrored tables are added over time.
Why schema shortcuts are recommended
- Automatic table onboarding: when BC2Fabric starts mirroring a new table into the mirrored database schema, it automatically appears through the schema shortcut without creating additional shortcuts.
- No duplicate storage: shortcuts reference OneLake data in place, so you can model and join data without copying mirrored tables.
- Lower maintenance: you manage one shortcut per schema instead of one shortcut per table.
Prerequisites
- The target Lakehouse must be schema-enabled.
- You need permissions on both the source (mirroring database) and the target Lakehouse.
How to create a schema shortcut
- Open (or create) a schema-enabled Lakehouse that you use for blended analytics. This lakehouse can be part of the same or a different Fabric workspace.
- In the Lakehouse, create a new shortcut and choose the mirrored database schema from
bc2fabric_mirroras source. - Save the shortcut and verify that the mirrored tables are visible in the Lakehouse.
- Use Dataflows Gen2, pipelines, or notebooks to combine BC2Fabric tables with other data
Microsoft documentation for this pattern: Lakehouse schemas and schema shortcuts.
How are deleted records handled with incremental loading?
Business Central logs deletions for BC2Fabric so incremental loads remove the same rows from the mirrored database.
This targeted logging keeps analytics aligned BC while minimizing data storage and processing overhead.
How do I get notified about load failures?
Monitor pipeline executions in Fabric and trigger notifications when runs fail.
- To monitor the recent runs, open the
bc2fabric_refreshpipeline, go to Run history, and review recent executions for status and duration. - Create alert rules to send notifications when refreshes fail by creating an Activator Item. Follow the steps as explained here.
How does the loading impact Business Central?
BC2Fabric is designed to avoid affecting transactional performance in Business Central.
- Read-only replica: All data extraction runs against the Business Central read-only replica, so the operational write database remains untouched by analytics workloads.
- Incremental Loading: Each pipeline run processes only the records that changed since the prior refresh by using Business Central
systemRowVersionvalues, keeping load windows short. - API queries only: The integration calls API queries instead of API pages to maximize throughput.
How is the access to Business Central working?
BC2Fabric authenticates to Business Central with an Azure AD service principal and stores the credentials securely in Azure Key Vault.
For the installation follow the instructions.
What needs to be considered when pausing/resuming the Fabric capacity?
Fabric capacities can be paused and resumed manually or resumed automatically (e.g. via Azure Automation Runbooks) to control costs. The BC2Fabric loading process will not run while the capacity is paused.
After resuming the capacity, resume the bc2fabric_mirror database to restart mirroring. This can be
done manually in the mirroring experience (see the
Fabric
mirroring troubleshooting guidance) or via API by calling the
Start Mirroring endpoint.