Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.
Omni supports the following methods for connecting to Microsoft Fabric:
Service principal authentication - Recommended. Omni authenticates with a Microsoft Entra ID app registration, also called a service principal.
Entra user password - If you can’t use a service principal, you can use this approach instead. Note that this method will fail for accounts that require multi-factor authentication (MFA).
Choose the method that best fits your team’s security requirements and preferences.
Fabric can query across the warehouses and lakehouses in a workspace. One Omni connection can use this to read from several of them:
In Warehouse or Lakehouse, enter a warehouse. Omni writes table uploads to this item, so it must be writable.
In Include Other Databases, enter the lakehouses and other warehouses you want to model.
Omni then generates views for each item, and you can join tables across them. When using this approach, note that:
The same table can show in more than one item. Lakehouse shortcuts can point to warehouse tables, so dbo.orders can exist in both. Model the table from one item only.
New shortcut tables can take a few minutes to show in Omni. If a schema refresh runs right after someone adds a shortcut, the new table may be missing. Run the refresh again.
While Fabric uses T-SQL, it doesn’t support all Microsoft SQL Server features. Omni generates SQL that works in Fabric. The differences below affect SQL that you write yourself, and filter results.
Behavior
What to expect in Omni
Case sensitivity
By default, Fabric warehouses are case-sensitive. Table and column names must match their case in Fabric, and a filter for usa doesn’t match USA. A warehouse can be created case-insensitive, but the setting can’t be changed after creation.
Timestamps with timezone offsets
Fabric tables can’t store datetimeoffset columns, so timestamps don’t include a timezone offset. Set Database Timezone to the timezone that your timestamps are stored in. Timezone conversion and Allow User-Specific Timezones work the same way as in SQL Server.
Recursive CTEs
Not supported. SQL queries that use WITH ... UNION ALL recursion fail.
Chained table calculations
Fabric can reject queries that chain four or more table calculations that reference each other.
An error like Login failed for user '<token-identified principal>' means that Fabric couldn’t open the warehouse or lakehouse for the service principal. Check that:
The Service principals can call Fabric public APIs tenant setting is enabled. If the setting is limited to security groups, the service principal must be in one of the groups. Changes can take up to 15 minutes to apply.
The service principal has a role on the workspace.
The Warehouse or Lakehouse field matches the item name in Fabric exactly.
The Secret field contains the secret Value, not the Secret ID.
If you use Entra User Password, the account doesn’t require MFA and has a role on the workspace.
A connection that worked stops authenticating
Check whether the client secret expired. To fix it, create a new client secret for the app registration in the Azure Portal. Then, update the Secret field on the connection in Omni.
CREATE TABLE permission denied
Omni can read data but can’t create the table for an upload. Check that:
The service principal or Entra user has the Contributor role, or higher, on the workspace. Sharing the warehouse item gives read permissions only.
The Warehouse or Lakehouse field in Omni contains a warehouse, not a lakehouse.
Invalid object name or invalid column name in a SQL query
Fabric warehouses are case-sensitive by default. Change the table and column names in your SQL to match their case in Fabric.
Error 24804, 6005, or 6008
Fabric returns these errors for a short time during a system update, or when the workspace is temporarily unavailable. Run the query again. If the errors continue, check that the Fabric capacity is running and isn’t paused.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Omni Docs","colors":{"primary":"#FF5FA2","light":"#FF5FA2","dark":"#4D122C"},"logo":{"light":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a","dark":"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-white.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=18b529bed326b4f1be9d58ac65b9e002"},"favicon":"https://mintcdn.com/omni-e7402367/WTWdmWXPOMD5jOUY/favicon.png?fit=max\u0026auto=format\u0026n=WTWdmWXPOMD5jOUY\u0026q=85\u0026s=775ee4acbc06107599e3471e50161a2b","background":{"color":{"light":"#FCFCF7","dark":"#0e0b0e"}},"navbar":{"links":[{"href":"https://community.omni.co","label":"Community"}],"primary":{"type":"button","label":"Try Omni!","href":"https://omni.co/demo"}},"footer":{},"seo":{"metatags":{"canonical":"https://docs.omni.co"}},"fonts":{"heading":{"family":"Cal Sans","weight":400},"body":{"family":"IBM Plex Sans"}},"integrations":{"ga4":{"measurementId":"G-ZMG0QT2W9L"}},"banner":{"content":"Need help? Get answers from the docs with Omni's in-app AI! Log in to your Omni instance and open the [Omni Agent](/ai/chat) in the sidebar.","dismissible":true},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/omni-e7402367/J1q2UvTSjLHOwJ3G/images/og/og-background.png?fit=max\u0026auto=format\u0026n=J1q2UvTSjLHOwJ3G\u0026q=85\u0026s=63ad1c86bdbf4da4196959c391afb21f","fonts":{"family":"IBM Plex Sans"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"omni-e7402367","hasAudioNarration":false,"actualSubdomain":"omni-e7402367","customDomains":["docs.omni.co"],"gitSource":{"type":"github","owner":"exploreomni","repo":"mintlify-omni","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae9086b581b3aa9f2320381","collectionId":"5a3ddb92-fe7c-4a4c-9d8a-96ab40e171f3","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae9086b581b3aa9f2320381"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae9086b581b3aa9f2320381","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Docs","count":503},{"language":"default","tag":"Developers","count":379},{"language":"default","tag":"Model data","count":304},{"language":"default","tag":"REST APIs","count":254},{"language":"default","tag":"Parameters","count":188},{"language":"default","tag":"Product updates","count":160},{"language":"default","tag":"Demos","count":156},{"language":"default","tag":"Admin","count":123},{"language":"default","tag":"Visualize \u0026 present","count":98},{"language":"default","tag":"Embedding","count":87}],"searchSettings":{"isFiltersEnabled":true,"maxResults":10}},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":false}},"googleFontsInlined":true},"customCss":[{"filePath":"styles.css","content":"img{border:1px solid;border-color:rgb(var(--gray-200))}.nav-logo,.no-border{border:0}#banner{color:#fcfcf7;font-weight:600}#topbar-cta-button,[data-testid=rss-feed-button]{transition:background-color .2s ease,transform .1s ease}#topbar-cta-button{background-color:#ff5fa2;padding:0;border-radius:160px;text-decoration:none;font-weight:800;cursor:pointer}#topbar-cta-button span{background-color:transparent!important}#topbar-cta-button>a{padding:8px 14px!important}#topbar-cta-button,#topbar-cta-button *{color:#fcfcf7!important}#topbar-cta-button:hover{background-color:#ff5fa2;transform:translateY(-1px)}#topbar-cta-button:active{transform:translateY(0)}#topbar-cta-button svg{display:none!important}.navbar-link a{border-radius:160px!important}.dark .navbar-link a{background-color:rgb(255 255 255/.1)!important}.dark .navbar-link a:hover{background-color:rgb(255 255 255/.2)!important}[data-testid=rss-feed-button]{border-color:#ff5fa2!important;color:#ff5fa2!important;border-radius:160px!important;gap:6px}[data-testid=rss-feed-button]::after{content:\"Subscribe\";font-size:14px;font-weight:600}[data-testid=rss-feed-button] svg{stroke:#ff5fa2}[data-testid=rss-feed-button]:hover{background-color:rgba(255,95,162,.05)!important;transform:translateY(-1px)}.dark [data-testid=rss-feed-button]:hover{background-color:rgba(255,95,162,.1)!important}[class*=cursor-copy][class*=max-h-]{max-height:20px!important}:has(>.guide-header){position:relative;max-width:1100px;margin:0 auto;padding:24px 24px 72px calc(200px + 48px + 24px);color:rgb(var(--gray-700))}.dark :has(>.guide-header){color:rgb(var(--gray-400))}.guide-header{position:sticky;top:var(--scroll-mt, 9.5rem);z-index:20;background-color:#fcfcf7;padding:0 0 1px;margin-bottom:35px;box-shadow:0 -10rem 0 10rem #fcfcf7}.dark .guide-header{background-color:#0e0b0e;box-shadow:0 -10rem 0 10rem #0e0b0e}.guide-title{font-size:2.5rem;font-weight:700;color:rgb(var(--gray-900));margin:0;line-height:1.3}.dark .guide-title{color:rgb(var(--gray-50))}.guide-sidebar{position:absolute;left:24px;top:24px;bottom:0;width:200px}.guide-sidebar-content{position:sticky;top:calc(var(--scroll-mt, 9.5rem) + 10px)}.guide-sidebar-back{display:flex;align-items:center;gap:8px;color:rgb(var(--gray-500));text-decoration:none;font-size:14px;font-weight:500;margin-bottom:24px;transition:color .15s ease}.guide-sidebar-back:hover,.guide-sidebar-links a{color:rgb(var(--primary))}.guide-sidebar-section{margin-bottom:20px}.guide-sidebar-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:rgb(var(--gray-500));margin-bottom:6px}.guide-sidebar-category{display:flex;align-items:center;gap:6px;font-size:14px;color:rgb(var(--gray-700));text-transform:capitalize}.dark .guide-sidebar-category{color:rgb(var(--gray-300))}.guide-sidebar-date{font-size:14px;color:rgb(var(--gray-600))}.dark .guide-sidebar-date,.dark .guide-sidebar-progress-text{color:rgb(var(--gray-400))}.guide-sidebar-links{list-style:none;padding:0;margin:0}.guide-sidebar-links li{margin-bottom:6px}.guide-sidebar-progress{display:flex;align-items:center;gap:12px}.guide-mascot{flex-shrink:0}.guide-mascot svg{display:block}.guide-sidebar-progress-text{font-size:14px;font-weight:600;color:rgb(var(--gray-600))}.guide-sidebar-links a{font-size:14px;text-decoration:none}:has(>.guide-header) .guide-sidebar a{border-bottom:none;font-weight:inherit}:has(>.guide-header) a.guide-sidebar-back{color:rgb(var(--gray-500));font-weight:500}:has(>.guide-header) .guide-sidebar-links a,:has(>.guide-header) a.guide-sidebar-back:hover{color:rgb(var(--primary))}:has(>.guide-header) .guide-sidebar-links a:hover{text-decoration:underline}@media (max-width:768px){:has(>.guide-header){padding:24px 24px 72px}.guide-sidebar{position:static;width:100%;margin-bottom:24px}.guide-sidebar-content{position:static;display:flex;flex-wrap:wrap;align-items:center;gap:12px}.guide-sidebar-back{width:100%;margin-bottom:4px}.guide-sidebar-section{margin-bottom:0}.guide-sidebar-section:has(.guide-sidebar-links),.guide-sidebar-section:has(.guide-sidebar-progress){display:none}.guide-sidebar-label{display:none}.guide-sidebar-category,.guide-sidebar-date{font-size:12px;padding:4px 10px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guide-sidebar-category,.dark .guide-sidebar-date{background-color:rgba(255,255,255,.03);color:#faf5f7}.guide-header{position:static;box-shadow:none}.guide-sticky-header{padding:12px 16px}.guide-progress-track{margin:-12px -16px 12px}.guide-sticky-title{font-size:1.5rem}}:has(>.guide-header) h1,:has(>.guide-header) h2,:has(>.guide-header) h3{color:rgb(var(--gray-900))}.dark :has(>.guide-header) a,.dark :has(>.guide-header) h1,.dark :has(>.guide-header) h2,.dark :has(>.guide-header) h3,.dark :has(>.guide-header) strong{color:rgb(var(--gray-50))}:has(>.guide-header) h1{font-size:2.25rem;margin:0 0 16px}:has(>.guide-header) h2{font-size:1.5rem;font-weight:600;margin:32px 0 16px;line-height:1.3}:has(>.guide-header) [data-component-part=step-title]{margin:0 0 16px}:has(>.guide-header) h3{font-size:1.25rem;font-weight:600;margin:24px 0 12px;line-height:1.4}:has(>.guide-header) [data-as=p],:has(>.guide-header) p{display:block;margin:16px 0;line-height:1.7}:has(>.guide-header)>.guide-header+[data-as=p],:has(>.guide-header)>.guide-header+p{margin-top:0}:has(>.guide-header) ol:not(.not-prose),:has(>.guide-header) ul:not(.not-prose){margin:16px 0;padding-left:24px}:has(>.guide-header) ul:not(.not-prose){list-style-type:disc}:has(>.guide-header) ol:not(.not-prose){list-style-type:decimal!important}:has(>.guide-header) :not(.not-prose)>li{margin-bottom:8px;line-height:1.6}:has(>.guide-header) .prose ul:not(.not-prose){list-style-type:none;padding-left:0}:has(>.guide-header) .prose :not(.not-prose)>li{margin-bottom:0}:has(>.guide-header) a{color:#111827;text-decoration:none;font-weight:600;border-bottom:1px solid rgb(var(--primary))}:has(>.guide-header) a:hover{border-bottom-width:2px}:has(>.guide-header) strong,:has(>.guide-header) th{font-weight:600;color:rgb(var(--gray-900))}:has(>.guide-header) code{font-size:.9em}:has(>.guide-header) table{width:100%;border-collapse:collapse;margin:16px 0}:has(>.guide-header) th{text-align:left;padding:8px 16px 8px 0;border-bottom:1px solid rgb(var(--gray-200))}.dark :has(>.guide-header) th{color:rgb(var(--gray-50))}:has(>.guide-header) td{padding:12px 16px 12px 0;border-bottom:1px solid rgb(var(--gray-200));vertical-align:top}.dark :has(>.guide-header) td,.dark :has(>.guide-header) th{border-bottom-color:rgb(var(--gray-700))}:has(>.guide-header) img{margin:16px 0;border-radius:8px}:has(>.guide-header) [data-component-part=card-title]{font-size:1rem!important;margin:4px 0 0!important}:has(>.guide-header) [data-component-part=card-content]{font-size:.875rem!important;line-height:1.5!important}:has(>.guide-header) [data-component-part=card-content] [data-as=p]{font-size:.875rem!important;margin:4px 0!important;line-height:1.5!important}.guides-container{max-width:1200px;margin:0 auto;padding:48px 24px}.guides-title{font-size:2.5rem;font-weight:700;color:#1e191a;margin-bottom:16px}.dark .guides-title{color:#e6e1e2}.guides-description{font-size:1.125rem;color:#1e191a;margin-bottom:32px}.dark .guides-description,.dark .guides-filter-label{color:#cbd5e1}.guides-layout{display:flex;gap:48px}.guides-sidebar{width:220px;flex-shrink:0}.guides-filters{position:sticky;top:100px;max-height:calc(100vh - 124px);overflow-y:auto;scrollbar-width:thin}.guides-filters::-webkit-scrollbar{width:6px}.guides-filters::-webkit-scrollbar-thumb{background:rgba(128,128,128,.35);border-radius:3px}.guides-filter-group{margin-bottom:24px}.guides-filter-label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#1e191a;margin-bottom:8px}.guides-filter-input{width:100%;padding:8px 12px;border-top-left-radius:9999px;border-top-right-radius:9999px;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;border-color:#e6e1e2;font-size:14px;box-sizing:border-box;background-color:rgba(17,12,14,.03);color:#777274}.dark .guides-filter-input{background-color:rgba(255,255,255,.03);border-color:#334155;color:rgba(255,255,255,.5)}.guides-filter-input:focus{outline:0;border-color:#ff5fa2}.dark .guides-filter-input::placeholder{color:rgba(255,255,255,.5)}.guides-clear-button,.guides-filter-button{width:100%;border:1px solid #e2e8f0;border-radius:160px;color:#334155;font-size:14px;cursor:pointer;transition:all .15s ease}.guides-filter-button{display:block;padding:8px 12px;margin-bottom:4px;background:0 0;text-align:left}.dark .guides-filter-button{color:#cbd5e1;border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px}.guides-filter-button:hover{background-color:#f8fafc}.dark .guides-filter-button:hover{background-color:#0e0b0e;border-color:#ff5fa2}.guides-filter-button.active{border-color:#ff5fa2;background-color:#fff0f6;color:#ff5fa2}.dark .guides-filter-button.active{background-color:rgba(255,95,162,.15)}.guides-clear-button{padding:10px 12px;margin-bottom:16px;background:#f8fafc;font-weight:500}.dark .guides-clear-button{background:#0e0b0e;color:#e2e8f0;border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px}.guides-clear-button:hover{background:#f1f5f9;border-color:#cbd5e1}.dark .guides-clear-button:hover{background:#0e0b0e;border-color:#ff5fa2}.guides-content{flex:1;min-width:0}.guides-results-count{font-size:14px;color:#1e191a;margin-bottom:16px}.dark .guides-results-count{color:#cbd5e1}.guides-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.guides-card{border:1px solid #e2e8f0;border-radius:16px;padding:20px;text-decoration:none;color:inherit;display:flex;flex-direction:column;gap:12px;transition:border-color .15s ease,box-shadow .15s ease;background-color:#fcfcf7}.dark .guides-card{border-color:rgba(255,255,255,.1);border-style:solid;border-width:1.5px;background-color:#0e0b0e}.guides-card:hover{border-color:#ff5fa2;box-shadow:0 2px 8px rgba(0,0,0,.08)}.dark .guides-card:hover{box-shadow:0 2px 8px rgba(0,0,0,.3)}.guides-card-icon{margin-bottom:4px}.guides-card-title{font-size:16px;font-weight:600;color:#1e191a;margin:0;line-height:1.3}.dark .guides-card-title{color:#fcfcf7}.guides-card-description{font-size:16px;color:#575254;margin:0;line-height:1.5;flex-grow:1}.dark .guides-card-description{color:#a6a1a2}.guides-card-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.guides-card-tag{font-size:12px;padding:2px 8px;border-radius:4px;background-color:#f1f5f9;color:#1e191a}.dark .guides-card-tag{background-color:rgba(255,255,255,.03);color:#faf5f7}.guides-no-results{text-align:center;padding:48px 24px;color:#1e191a}.dark .guides-no-results{color:#cbd5e1}@media (max-width:768px){.guides-layout{flex-direction:column;gap:24px}.guides-sidebar{width:100%}.guides-filters{position:static;max-height:none;overflow-y:visible}.guides-filter-button{display:inline-block;width:auto;margin-right:8px}}.badge-color{background-color:#ff5fa2;color:#fcfcf7!important}.lib-page{--lib-muted:#575254;color:#1e191a}.dark .lib-page{--lib-muted:#a6a1a2;color:#e6e1e2}.lib-page a{color:#ff5fa2}.lib-card:hover{border-color:#ff5fa2!important}.lib-panel{background-color:#fcfcf7;color:#1e191a}.dark .lib-panel{background-color:#0e0b0e;color:#e6e1e2}.lib-logo-chip{display:inline-flex;align-items:center;justify-content:center;flex:none;overflow:hidden}.dark .lib-logo-chip{padding:3px 5px;border-radius:5px;background-color:#fff}.lib-logo-chip img{border:0;border-radius:0}.endpoint-table{table-layout:fixed}.endpoint-table td:first-child,.endpoint-table th:first-child{width:18rem;min-width:18rem;max-width:18rem}.endpoint-table td:last-child,.endpoint-table th:last-child{width:8rem;min-width:8rem;max-width:8rem}.icon{border:0}.icons{background-color:#000}.dark .icons{background-color:rgb(var(--gray-50))}.icon-position{display:inline;vertical-align:middle}[data-component-part=accordion-icon] svg{display:block!important}.side-by-side{display:flex;flex-direction:row-reverse;align-items:flex-start;gap:1.5rem;margin:1.5rem 0}.side-by-side-reverse{flex-direction:row}.side-by-side-divider{padding-bottom:1.5rem;border-bottom:1px solid rgb(var(--gray-200))}.dark .side-by-side-divider{border-bottom-color:rgb(var(--gray-700))}.side-by-side-media{flex:0 0 45%;display:flex;flex-direction:column;align-items:center;margin:0}.side-by-side-media img{width:auto;height:auto;max-width:100%;max-height:var(--side-by-side-height, 220px);margin:0}.side-by-side-caption{margin-top:.75rem;padding:0 2rem .5rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgb(var(--gray-700))}.dark .side-by-side-caption{color:rgb(var(--gray-400))}.side-by-side-body{flex:1;min-width:0}.side-by-side-body [data-as=p],.side-by-side-body p{display:block;margin:1rem 0}.side-by-side-body .side-by-side-title{margin:0 0 .5rem;font-weight:600;color:rgb(var(--gray-900))}.dark .side-by-side-body .side-by-side-title{color:rgb(var(--gray-50))}.side-by-side-body>:first-child{margin-top:0}.side-by-side-body>:last-child{margin-bottom:0}@media (max-width:768px){.side-by-side,.side-by-side-reverse{flex-direction:column;align-items:stretch}.side-by-side-media{flex:1 1 auto}}#page-title,.guides-title,:has(>.guide-header) h1{font-weight:400;line-height:1;letter-spacing:0;text-wrap:pretty}#page-title{font-size:2rem}@media (min-width:40rem){#page-title{font-size:2.625rem}}h2,h3,h4,h5,h6{font-family:var(--font-family-body-custom)}.mdx-content :is(h2, h3, h4, h5, h6):not([data-component-part]):not(.not-prose){font-weight:500;line-height:1.15;letter-spacing:0;text-wrap:pretty}.mdx-content h2:not([data-component-part]):not(.not-prose){font-size:1.5rem}"}],"page":{"pagePath":"connect-data/setup/microsoft-fabric","slug":"/connect-data/setup/microsoft-fabric","pageMetadata":{"title":"Connecting Microsoft Fabric to Omni","description":"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.","sidebarTitle":"Microsoft Fabric","keywords":["microsoft fabric","fabric warehouse","fabric lakehouse","sql analytics endpoint","onelake","entra id","service principal","database connection","setup","connect data"],"href":"/connect-data/setup/microsoft-fabric"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const BaseAccess=()=>{const _components={a:`a`,..._provideComponents()},{ParamField}=_components;if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsxs(ParamField,{path:`Base Access`,required:true,children:[`Select the `,_jsx(_components.a,{href:`/administration/users/permissions`,children:`minimum level of access`}),` users should have to models in the connection.`]})})};const QueryTimeout=({defaultValue})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Query Timeout`,default:defaultValue,children:`Maximum time in seconds before a query times out.`})})};const AlwaysScopeViewNames=()=>{const _components={a:`a`,..._provideComponents()},{ParamField}=_components;if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsxs(ParamField,{path:`Always Scope View Names`,default:`enabled`,children:[`When enabled, Omni will prefix generated view names with schema and catalog, e.g. `,_jsx(`code`,{children:`my_catalog_public__orders`}),` instead of `,_jsx(`code`,{children:`orders`}),`. Defaults to enabled. See `,_jsx(_components.a,{href:`/connect-data/view-name-generation`,children:`View name generation`}),` for more information.`]})})};const AutoGenerateRelationships=()=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Auto-generate relationships`,default:`enabled`,children:`When enabled, Omni will automatically infer relationships between tables based on column name matching during schema refreshes. Defaults to enabled.`})})};const AllowUserSpecificTimezones=()=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Allow User-Specific Timezones`,children:`When enabled, users can override the connection timezone with their own when querying.`})})};const QueryTimezone=()=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsxs(ParamField,{path:`Query Timezone`,required:true,children:[`The timezone to use for Omni queries. If a timezone is specified, data will be converted from the `,_jsx(`strong`,{children:`Database Timezone`}),` to the selected timezone.`]})})};const DatabaseTimezone=()=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Database Timezone`,required:true,children:`The timezone used by the database.`})})};const Default=({term=`Schema`,required=true,defaultValue})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);const lower=term.toLowerCase();return _jsx(`span`,{children:_jsxs(ParamField,{path:`Default ${term}`,required,default:defaultValue,children:[`The default `,lower,` for the connection.`]})})};const TableUploads=({label=`Schema for Table Uploads`,term=`schema`,children})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsxs(ParamField,{path:label,children:[`The name of the `,term,` to use for table (CSV) uploads. If left blank, you can upload tables but they won't be pushed to the database or be available for use in joins. `,children]})})};const Offloaded=({term=`Schemas`})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);const lower=term.toLowerCase();return _jsx(`span`,{children:_jsxs(ParamField,{path:`Offloaded ${term}`,children:[`A comma-separated list of `,lower,` to include in the connection, which will only load on demand. This setting is good for large `,lower,` or dbt dev `,lower,`.`]})})};const Include=({term=`Schemas`})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);const lower=term.toLowerCase();return _jsx(`span`,{children:_jsxs(ParamField,{path:`Include ${term}`,children:[`A comma-separated list of `,lower,` to include in the connection.`]})})};const Port=({defaultValue})=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Port`,required:true,default:defaultValue,children:`The port number for the database connection.`})})};const DisplayName=()=>{const{ParamField}=_provideComponents()||{};if(!ParamField)_missingMdxReference(`ParamField`,true);return _jsx(`span`,{children:_jsx(ParamField,{path:`Display Name`,required:true,children:`A user-friendly name for the connection, which will be used throughout Omni.`})})};const authType_1=undefined;const authType_0=`service-principal`;const stepCopy_1=`Select the Entra user you want to use to complete the connection.`;const stepCopy_0=`Search for the app registration name from step 1.`;function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Callout,CodeBlock,Frame,Heading,Icon,MDX,Note,OptimizedImage,ParamField,Step,Steps,Table,View,Warning,_MdxComponentBoundary}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Callout)_missingMdxReference(`Callout`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Icon)_missingMdxReference(`Icon`,true);if(!MDX)_missingMdxReference(`MDX`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!View)_missingMdxReference(`View`,true);if(!Warning)_missingMdxReference(`Warning`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Omni supports the following methods for connecting to Microsoft Fabric:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Service principal authentication`}),` - `,_jsx(_components.strong,{children:`Recommended`}),`. Omni authenticates with a Microsoft Entra ID app registration, also called a service principal.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entra user password`}),` - If you can’t use a service principal, you can use this approach instead. Note that this method will fail for accounts that require multi-factor authentication (MFA).`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Choose the method that best fits your team’s security requirements and preferences.`}),`\n`,_jsxs(View,{title:`Select authentication method`,id:`select-authentication-method`,children:[_jsx(Heading,{level:`2`,id:`select-an-authentication-method`,children:`Select an authentication method`}),_jsxs(Note,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`To view instructions for your authentication method`}),`, select it from the `,_jsx(_components.strong,{children:`dropdown menu`}),` on the right side of the page, above the table of contents.`]}),_jsx(Frame,{caption:`Select your authentication method from the dropdown to view setup instructions`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=e95edc19fad7856990cb7b855fa72e2c`,alt:`Authentication method selection menu on right side of this page`,\"data-og-width\":`278`,width:`278`,\"data-og-height\":`170`,height:`170`,\"data-path\":`integrations/images/git-select-auth-method.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=280\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=2a6a5f55ad0132ffd8d14c51630bc5d9 280w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=560\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=bf104e69d88ccc8537c19e2d7d34ff43 560w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=840\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=12d2bd3afdc1de0be95946995d0ab111 840w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=1100\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=23289ed10402a6c4f5f6b23b99b02b30 1100w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=1650\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=f233e75fe0c9e57c0ae713c63d284df0 1650w, https://mintcdn.com/omni-e7402367/z4NfWcJoMfO93ijI/integrations/images/git-select-auth-method.png?w=2500\u0026fit=max\u0026auto=format\u0026n=z4NfWcJoMfO93ijI\u0026q=85\u0026s=5afedaaa4def2f73aa80c0ded755758f 2500w`})})]})]}),`\n`,_jsxs(View,{title:`Service principal authentication`,id:`service-principal-authentication`,children:[_jsx(Heading,{level:`2`,id:`requirements`,children:`Requirements`}),_jsx(_components.p,{children:`To follow the steps in this guide, you’ll need:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Organization Admin permissions in Omni`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Admin or Member permissions on the Fabric workspace`}),`, which are required to give Omni access to the workspace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse or lakehouse in a shared Fabric workspace.`}),` Items in `,_jsx(_components.strong,{children:`My workspace`}),` can’t be used, because you can’t add other identities to that workspace.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required if you want to use table uploads.`}),` Table uploads require read and write permissions - as lakehouse SQL analytics endpoints are read-only, table uploads will not work with this connection type.`]})}),`\n`]}),`\n`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Permission to register applications in Microsoft Entra ID`}),`, or an administrator who can register one for you`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Fabric administrator permissions`}),`, which are required to change tenant settings`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Create a service principal for Omni`,id:`create-a-service-principal-for-omni`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.a,{href:`https://portal.azure.com/#home`,children:`Microsoft Azure Portal`}),`, navigate to `,_jsx(_components.strong,{children:`Microsoft Entra ID > App registrations`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`New registration`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Enter a recognizable name, for example `,_jsx(_components.code,{children:`omni-fabric`}),`. Keep the default single tenant setting. You don’t need a redirect URI.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Register`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`On the app’s `,_jsx(_components.strong,{children:`Overview`}),` page, copy the `,_jsx(_components.strong,{children:`Application (client) ID`}),`. This is the `,_jsx(_components.strong,{children:`Client ID`}),` in Omni.`]}),`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`Certificates \u0026 secrets`}),` and click `,_jsx(_components.strong,{children:`New client secret`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select an expiry period and click `,_jsx(_components.strong,{children:`Add`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Copy the secret `,_jsx(_components.strong,{children:`Value`}),`, not the `,_jsx(_components.strong,{children:`Secret ID`}),`. Azure shows the value only once. This is the `,_jsx(_components.strong,{children:`Secret`}),` in Omni.`]}),`\n`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Client secrets expire after a maximum of two years. When the secret expires, the connection will stop working. Record the expiry date and update the secret in Omni before that date.`})})]}),_jsxs(Step,{title:`Allow service principals to use Fabric`,id:`allow-service-principals-to-use-fabric`,children:[_jsx(Note,{children:_jsx(_components.p,{children:`This step requires Fabric administrator permissions.`})}),_jsxs(_components.p,{children:[`In this step, you’ll enable the `,_jsx(_components.strong,{children:`Service principals can call Fabric public APIs`}),` setting, which allows service principals to connect to Fabric. If this setting is disabled, the connection fails with an error that looks like an incorrect secret. See Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/admin/service-admin-portal-developer#service-principals-can-call-fabric-public-apis`,children:`Developer admin settings`}),` documentation for more information.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the Fabric portal, navigate to `,_jsx(_components.strong,{children:`Settings > Admin portal > Tenant settings`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Developer settings`}),` section, expand `,_jsx(_components.strong,{children:`Service principals can call Fabric public APIs`}),`. In older tenants, this setting is named `,_jsx(_components.strong,{children:`Service principals can use Fabric APIs`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Set the toggle to `,_jsx(_components.strong,{children:`Enabled`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Optional`}),`: To limit this setting to specific identities, select `,_jsx(_components.strong,{children:`Specific security groups`}),` and add a Microsoft Entra security group. Then, add the Omni service principal to that group.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Apply`}),`.`]}),`\n`]}),_jsx(_components.p,{children:`Note that tenant setting changes can take up to 15 minutes to apply.`})]}),_jsxs(Step,{title:`Grant the service principal access to the workspace`,id:`grant-the-service-principal-access-to-the-workspace`,children:[_jsxs(_components.p,{children:[`Fabric maps workspace roles to SQL permissions. You can’t run `,_jsx(_components.code,{children:`CREATE USER`}),` in Fabric, so you give Omni access through a workspace role.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In Fabric, open the workspace that contains the warehouse or lakehouse.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Manage access`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add people or groups`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,stepCopy_0,`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Select a role:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contributor`}),` - Allows Omni to query data and create tables. `,_jsx(_components.strong,{children:`Required to use table uploads.`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Viewer`}),` - Allows Omni to query data. Omni cannot create tables.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Workspace roles for a service principal`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=04fa90c2771d3ea85e7a80fcc62948ee`,alt:`Manage access panel in a Fabric workspace, with the role menu open for a service principal that has the Contributor role`,\"data-og-width\":`340`,width:`340`,\"data-og-height\":`470`,height:`470`,\"data-path\":`connect-data/images/fabric-workspace-manage-access.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=bb315120b3c3fb388e92fb8dfd730938 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=a369d6ed3b2c22cb8babe3888d57def3 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=9952d4076e1fec72a9e8046214dd9b03 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=b46130a55678056bf225ed31495b568d 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=1f35339e6f36926ae854aec334d5de97 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=75b62b479cf8a1e873c9309af2b3db84 2500w`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add`}),`.`]}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Set up a table upload schema`,id:`set-up-a-table-upload-schema`,children:[_jsx(Callout,{icon:`hand-point-up`,color:`#FF5FA2`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This step is optional.`}),` However, we recommend completing it as part of the initial set up or you won’t be able to use uploaded files like CSVs in joins.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`}),` A lakehouse SQL analytics endpoint can’t store tables. If you are connecting a lakehouse, skip this step.`]})}),_jsxs(_components.p,{children:[`In this step, you’ll create a dedicated schema to use for `,_jsx(_components.a,{href:`/analyze-explore/data-input-csvs`,children:`table uploads`}),`. This schema can’t be used for other modeled tables.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Fabric, open the warehouse and click `,_jsx(_components.strong,{children:`New SQL query`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Run the following command to create the schema:`}),`\n`,_jsx(CodeBlock,{filename:`Create the upload schema`,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` omni_uploads`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Contributor`}),` workspace role gives the service principal or Entra user permission to write to this schema. You don’t need to run `,_jsx(_components.code,{children:`GRANT`}),` statements.`]})]}),_jsxs(Step,{title:`Allowlist Omni's IP addresses`,id:`allowlist-omnis-ip-addresses`,children:[_jsx(_components.p,{children:`If the Fabric workspace limits inbound access by IP address, you’ll need to add Omni’s IPs to the allowlist before you create the connection.`}),_jsxs(_components.p,{children:[`Omni’s IP addresses can be found on an individual connection’s page, accessed by navigating to `,_jsx(_components.strong,{children:`Settings > Connections`}),` and clicking a connection.`]}),_jsxs(_components.p,{children:[`Add a rule for each of Omni’s IP addresses. For the steps and requirements, refer to Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/security/security-workspace-level-firewall-set-up`,children:`Set up and use workspace IP firewall rules`}),` documentation.`]})]}),_jsx(Step,{title:`Retrieve connection details`,id:`retrieve-connection-details`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In Fabric, open the workspace.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Find the warehouse or the lakehouse SQL analytics endpoint in the item list.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Next to the warehouse or lakehouse SQL analytics endpoint, click the `,_jsx(Icon,{icon:`ellipsis`,className:`icons`}),` icon, then `,_jsx(_components.strong,{children:`Copy SQL connection string`}),`. You can also find the connection string in the item’s `,_jsx(_components.strong,{children:`Settings`}),` panel.`]}),`\n`,_jsx(Frame,{caption:`Copy SQL connection string`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=375fa33e8da7f55efcade879d39437d0`,alt:`More options menu for a warehouse in the Fabric workspace item list, with the Copy SQL connection string option`,\"data-og-width\":`780`,width:`780`,\"data-og-height\":`755`,height:`755`,\"data-path\":`connect-data/images/fabric-copy-sql-connection-string.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=8998b2146170b838383587862cefc755 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=45726499f42c882ac78e1d3333003de8 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=aa07e0e5b171452149448b8efe1e1180 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=4fba3b5c45ff17e9a3c32ddf709307b8 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=d5cc5c67f223c11a600754a7a5791ef7 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=de66784f8281cf1d40c904b97c19cfcb 2500w`})}),`\n`,_jsx(_components.p,{children:`The connection string looks like this:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\u003cunique-id>.datawarehouse.fabric.microsoft.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Copy the name of the warehouse or lakehouse exactly as it shows in the workspace, including spaces and capitalization.`}),`\n`]}),`\n`]})}),_jsx(Step,{title:`Create the connection in Omni`,id:`create-the-connection-in-omni`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Settings > Connections`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Microsoft Fabric`}),` option.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`On the connection setup page, fill in the connection details:`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DisplayName`,children:_jsx(DisplayName,{})}),`\n`,_jsx(ParamField,{path:`SQL connection string`,required:true,id:`param-sql-connection-string`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`.datawarehouse.fabric.microsoft.com`}),` connection string that you copied in the previous step.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Port`,children:_jsx(Port,{defaultValue:`1433`})}),`\n`,_jsx(ParamField,{path:`Warehouse or Lakehouse`,required:true,id:`param-warehouse-or-lakehouse`,children:_jsxs(_components.p,{children:[`The name of the warehouse or lakehouse, as it shows in the Fabric workspace. `,_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`})]})}),`\n`,_jsx(ParamField,{path:`Include Other Databases`,id:`param-include-other-databases`,children:_jsxs(_components.p,{children:[`A comma-separated list of other warehouses or lakehouses in the same workspace to generate models for. Wildcards are supported (`,_jsx(_components.code,{children:`sales_*`}),`), and prefixing an entry with `,_jsx(_components.code,{children:`-`}),` excludes it (`,_jsx(_components.code,{children:`sales_*,-sales_dev`}),`). Refer to `,_jsx(_components.a,{href:`#querying-warehouses-and-lakehouses-together`,children:`Querying warehouses and lakehouses together`}),` for more information.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Include`,children:_jsx(Include,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Offloaded`,children:_jsx(Offloaded,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`TableUploads`,children:_jsx(TableUploads,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This schema must be in a warehouse`}),`. Leave this blank if connecting a lakehouse SQL analytics endpoint, as this connection type doesn’t support table uploads.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Default`,children:_jsx(Default,{defaultValue:`dbo`})}),`\n`,_jsx(ParamField,{path:`Authentication Type`,required:true,default:`Entra Service Principal`,id:`param-authentication-type`,children:authType_0===`service-principal`?_jsxs(MDX,{children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Service principal`}),`, which will authenticate as the service principal you created in step 1. Then, fill in the following:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Client ID`}),` - The `,_jsx(_components.strong,{children:`Application (client) ID`}),` of the app registration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` - The client secret `,_jsx(_components.strong,{children:`Value`}),`.`]}),`\n`]})]}):_jsxs(MDX,{children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Entra User Password`}),` to authenticate as a Microsoft Entra ID user. Then, fill in the following:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entra Username`}),` - The user’s sign-in name, for example `,_jsx(_components.code,{children:`omni@example.com`}),`. `,_jsx(_components.strong,{children:`This account cannot require MFA, or the connection will fail.`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entra Password`}),` - The user’s password.`]}),`\n`]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DatabaseTimezone`,children:_jsx(DatabaseTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimezone`,children:_jsx(QueryTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AllowUserSpecificTimezones`,children:_jsx(AllowUserSpecificTimezones,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AutoGenerateRelationships`,children:_jsx(AutoGenerateRelationships,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AlwaysScopeViewNames`,children:_jsx(AlwaysScopeViewNames,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimeout`,children:_jsx(QueryTimeout,{defaultValue:`900`})}),`\n`,_jsx(_MdxComponentBoundary,{name:`BaseAccess`,children:_jsx(BaseAccess,{})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`When finished, click `,_jsx(_components.strong,{children:`Create connection`}),`.`]}),`\n`]}),`\n`]})})]})]}),`\n`,_jsxs(View,{title:`Entra user password`,id:`entra-user-password`,children:[_jsx(Heading,{level:`2`,id:`requirements-2`,children:`Requirements`}),_jsx(_components.p,{children:`To follow the steps in this guide, you’ll need:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Organization Admin permissions in Omni`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Admin or Member permissions on the Fabric workspace`}),`, which are required to give Omni access to the workspace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse or lakehouse in a shared Fabric workspace.`}),` Items in `,_jsx(_components.strong,{children:`My workspace`}),` can’t be used, because you can’t add other identities to that workspace.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required if you want to use table uploads.`}),` Table uploads require read and write permissions - as lakehouse SQL analytics endpoints are read-only, table uploads will not work with this connection type.`]})}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`setup-2`,children:`Setup`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Grant the Entra user access to the workspace`,id:`grant-the-entra-user-access-to-the-workspace`,children:[_jsxs(_components.p,{children:[`Fabric maps workspace roles to SQL permissions. You can’t run `,_jsx(_components.code,{children:`CREATE USER`}),` in Fabric, so you give Omni access through a workspace role.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In Fabric, open the workspace that contains the warehouse or lakehouse.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Manage access`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add people or groups`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,stepCopy_1,`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Select a role:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contributor`}),` - Allows Omni to query data and create tables. `,_jsx(_components.strong,{children:`Required to use table uploads.`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Viewer`}),` - Allows Omni to query data. Omni cannot create tables.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Workspace roles for a service principal`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=04fa90c2771d3ea85e7a80fcc62948ee`,alt:`Manage access panel in a Fabric workspace, with the role menu open for a service principal that has the Contributor role`,\"data-og-width\":`340`,width:`340`,\"data-og-height\":`470`,height:`470`,\"data-path\":`connect-data/images/fabric-workspace-manage-access.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=bb315120b3c3fb388e92fb8dfd730938 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=a369d6ed3b2c22cb8babe3888d57def3 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=9952d4076e1fec72a9e8046214dd9b03 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=b46130a55678056bf225ed31495b568d 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=1f35339e6f36926ae854aec334d5de97 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=75b62b479cf8a1e873c9309af2b3db84 2500w`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add`}),`.`]}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Set up a table upload schema`,id:`set-up-a-table-upload-schema-2`,children:[_jsx(Callout,{icon:`hand-point-up`,color:`#FF5FA2`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This step is optional.`}),` However, we recommend completing it as part of the initial set up or you won’t be able to use uploaded files like CSVs in joins.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`}),` A lakehouse SQL analytics endpoint can’t store tables. If you are connecting a lakehouse, skip this step.`]})}),_jsxs(_components.p,{children:[`In this step, you’ll create a dedicated schema to use for `,_jsx(_components.a,{href:`/analyze-explore/data-input-csvs`,children:`table uploads`}),`. This schema can’t be used for other modeled tables.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Fabric, open the warehouse and click `,_jsx(_components.strong,{children:`New SQL query`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Run the following command to create the schema:`}),`\n`,_jsx(CodeBlock,{filename:`Create the upload schema`,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` omni_uploads`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Contributor`}),` workspace role gives the service principal or Entra user permission to write to this schema. You don’t need to run `,_jsx(_components.code,{children:`GRANT`}),` statements.`]})]}),_jsxs(Step,{title:`Allowlist Omni's IP addresses`,id:`allowlist-omnis-ip-addresses-2`,children:[_jsx(_components.p,{children:`If the Fabric workspace limits inbound access by IP address, you’ll need to add Omni’s IPs to the allowlist before you create the connection.`}),_jsxs(_components.p,{children:[`Omni’s IP addresses can be found on an individual connection’s page, accessed by navigating to `,_jsx(_components.strong,{children:`Settings > Connections`}),` and clicking a connection.`]}),_jsxs(_components.p,{children:[`Add a rule for each of Omni’s IP addresses. For the steps and requirements, refer to Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/security/security-workspace-level-firewall-set-up`,children:`Set up and use workspace IP firewall rules`}),` documentation.`]})]}),_jsx(Step,{title:`Retrieve connection details`,id:`retrieve-connection-details-2`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In Fabric, open the workspace.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Find the warehouse or the lakehouse SQL analytics endpoint in the item list.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Next to the warehouse or lakehouse SQL analytics endpoint, click the `,_jsx(Icon,{icon:`ellipsis`,className:`icons`}),` icon, then `,_jsx(_components.strong,{children:`Copy SQL connection string`}),`. You can also find the connection string in the item’s `,_jsx(_components.strong,{children:`Settings`}),` panel.`]}),`\n`,_jsx(Frame,{caption:`Copy SQL connection string`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=375fa33e8da7f55efcade879d39437d0`,alt:`More options menu for a warehouse in the Fabric workspace item list, with the Copy SQL connection string option`,\"data-og-width\":`780`,width:`780`,\"data-og-height\":`755`,height:`755`,\"data-path\":`connect-data/images/fabric-copy-sql-connection-string.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=8998b2146170b838383587862cefc755 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=45726499f42c882ac78e1d3333003de8 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=aa07e0e5b171452149448b8efe1e1180 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=4fba3b5c45ff17e9a3c32ddf709307b8 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=d5cc5c67f223c11a600754a7a5791ef7 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=de66784f8281cf1d40c904b97c19cfcb 2500w`})}),`\n`,_jsx(_components.p,{children:`The connection string looks like this:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\u003cunique-id>.datawarehouse.fabric.microsoft.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Copy the name of the warehouse or lakehouse exactly as it shows in the workspace, including spaces and capitalization.`}),`\n`]}),`\n`]})}),_jsx(Step,{title:`Create the connection in Omni`,id:`create-the-connection-in-omni-2`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Settings > Connections`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Microsoft Fabric`}),` option.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`On the connection setup page, fill in the connection details:`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DisplayName`,children:_jsx(DisplayName,{})}),`\n`,_jsx(ParamField,{path:`SQL connection string`,required:true,id:`param-sql-connection-string-1`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`.datawarehouse.fabric.microsoft.com`}),` connection string that you copied in the previous step.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Port`,children:_jsx(Port,{defaultValue:`1433`})}),`\n`,_jsx(ParamField,{path:`Warehouse or Lakehouse`,required:true,id:`param-warehouse-or-lakehouse-1`,children:_jsxs(_components.p,{children:[`The name of the warehouse or lakehouse, as it shows in the Fabric workspace. `,_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`})]})}),`\n`,_jsx(ParamField,{path:`Include Other Databases`,id:`param-include-other-databases-1`,children:_jsxs(_components.p,{children:[`A comma-separated list of other warehouses or lakehouses in the same workspace to generate models for. Wildcards are supported (`,_jsx(_components.code,{children:`sales_*`}),`), and prefixing an entry with `,_jsx(_components.code,{children:`-`}),` excludes it (`,_jsx(_components.code,{children:`sales_*,-sales_dev`}),`). Refer to `,_jsx(_components.a,{href:`#querying-warehouses-and-lakehouses-together`,children:`Querying warehouses and lakehouses together`}),` for more information.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Include`,children:_jsx(Include,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Offloaded`,children:_jsx(Offloaded,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`TableUploads`,children:_jsx(TableUploads,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This schema must be in a warehouse`}),`. Leave this blank if connecting a lakehouse SQL analytics endpoint, as this connection type doesn’t support table uploads.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Default`,children:_jsx(Default,{defaultValue:`dbo`})}),`\n`,_jsx(ParamField,{path:`Authentication Type`,required:true,default:`Entra Service Principal`,id:`param-authentication-type-1`,children:authType_1===`service-principal`?_jsxs(MDX,{children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Service principal`}),`, which will authenticate as the service principal you created in step 1. Then, fill in the following:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Client ID`}),` - The `,_jsx(_components.strong,{children:`Application (client) ID`}),` of the app registration.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Secret`}),` - The client secret `,_jsx(_components.strong,{children:`Value`}),`.`]}),`\n`]})]}):_jsxs(MDX,{children:[_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Entra User Password`}),` to authenticate as a Microsoft Entra ID user. Then, fill in the following:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entra Username`}),` - The user’s sign-in name, for example `,_jsx(_components.code,{children:`omni@example.com`}),`. `,_jsx(_components.strong,{children:`This account cannot require MFA, or the connection will fail.`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Entra Password`}),` - The user’s password.`]}),`\n`]})]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DatabaseTimezone`,children:_jsx(DatabaseTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimezone`,children:_jsx(QueryTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AllowUserSpecificTimezones`,children:_jsx(AllowUserSpecificTimezones,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AutoGenerateRelationships`,children:_jsx(AutoGenerateRelationships,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AlwaysScopeViewNames`,children:_jsx(AlwaysScopeViewNames,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimeout`,children:_jsx(QueryTimeout,{defaultValue:`900`})}),`\n`,_jsx(_MdxComponentBoundary,{name:`BaseAccess`,children:_jsx(BaseAccess,{})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`When finished, click `,_jsx(_components.strong,{children:`Create connection`}),`.`]}),`\n`]}),`\n`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`querying-warehouses-and-lakehouses-together`,children:`Querying warehouses and lakehouses together`}),`\n`,_jsx(_components.p,{children:`Fabric can query across the warehouses and lakehouses in a workspace. One Omni connection can use this to read from several of them:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),`, enter a `,_jsx(_components.strong,{children:`warehouse`}),`. Omni writes table uploads to this item, so it must be writable.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Include Other Databases`}),`, enter the lakehouses and other warehouses you want to model.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Omni then generates views for each item, and you can join tables across them. When using this approach, note that:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The same table can show in more than one item.`}),` Lakehouse shortcuts can point to warehouse tables, so `,_jsx(_components.code,{children:`dbo.orders`}),` can exist in both. Model the table from one item only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New shortcut tables can take a few minutes to show in Omni.`}),` If a `,_jsx(_components.a,{href:`/modeling/develop/schema-refreshes`,children:`schema refresh`}),` runs right after someone adds a shortcut, the new table may be missing. Run the refresh again.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`differences-from-sql-server`,children:`Differences from SQL Server`}),`\n`,_jsxs(_components.p,{children:[`While Fabric uses T-SQL, it doesn’t support all `,_jsx(_components.a,{href:`/connect-data/setup/microsoftsql`,children:`Microsoft SQL Server`}),` features. Omni generates SQL that works in Fabric. The differences below affect SQL that you write yourself, and filter results.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Behavior`}),_jsx(_components.th,{children:`What to expect in Omni`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Case sensitivity`})}),_jsxs(_components.td,{children:[`By default, Fabric warehouses are case-sensitive. Table and column names must match their case in Fabric, and a filter for `,_jsx(_components.code,{children:`usa`}),` doesn’t match `,_jsx(_components.code,{children:`USA`}),`. A warehouse can be created case-insensitive, but the setting can’t be changed after creation.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Timestamps with timezone offsets`})}),_jsxs(_components.td,{children:[`Fabric tables can’t store `,_jsx(_components.code,{children:`datetimeoffset`}),` columns, so timestamps don’t include a timezone offset. Set `,_jsx(_components.strong,{children:`Database Timezone`}),` to the timezone that your timestamps are stored in. Timezone conversion and `,_jsx(_components.strong,{children:`Allow User-Specific Timezones`}),` work the same way as in SQL Server.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Recursive CTEs`})}),_jsxs(_components.td,{children:[`Not supported. SQL queries that use `,_jsx(_components.code,{children:`WITH ... UNION ALL`}),` recursion fail.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Chained table calculations`})}),_jsx(_components.td,{children:`Fabric can reject queries that chain four or more table calculations that reference each other.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`For the full list, refer to Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/data-warehouse/tsql-surface-area`,children:`T-SQL surface area in Fabric Data Warehouse`}),` documentation.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Login failed when testing the connection`,id:`login-failed-when-testing-the-connection`,children:[_jsxs(_components.p,{children:[`An error like `,_jsx(_components.code,{children:`Login failed for user '\u003ctoken-identified principal>'`}),` means that Fabric couldn’t open the warehouse or lakehouse for the service principal. Check that:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The Service principals can call Fabric public APIs tenant setting is enabled`}),`. If the setting is limited to security groups, the service principal must be in one of the groups. Changes can take up to 15 minutes to apply.`]}),`\n`,_jsx(_components.li,{children:`The service principal has a role on the workspace.`}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),` field matches the item name in Fabric exactly.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Secret`}),` field contains the secret `,_jsx(_components.strong,{children:`Value`}),`, not the `,_jsx(_components.strong,{children:`Secret ID`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If you use `,_jsx(_components.strong,{children:`Entra User Password`}),`, the account doesn’t require MFA and has a role on the workspace.`]}),`\n`]})]}),_jsx(Accordion,{title:`A connection that worked stops authenticating`,id:`a-connection-that-worked-stops-authenticating`,children:_jsxs(_components.p,{children:[`Check whether the client secret expired. To fix it, create a new client secret for the app registration in the Azure Portal. Then, update the `,_jsx(_components.strong,{children:`Secret`}),` field on the connection in Omni.`]})}),_jsxs(Accordion,{title:`CREATE TABLE permission denied`,id:`create-table-permission-denied`,children:[_jsx(_components.p,{children:`Omni can read data but can’t create the table for an upload. Check that:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The service principal or Entra user has the `,_jsx(_components.strong,{children:`Contributor`}),` role, or higher, on the workspace. Sharing the warehouse item gives read permissions only.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),` field in Omni contains a warehouse, not a lakehouse.`]}),`\n`]})]}),_jsx(Accordion,{title:`Invalid object name or invalid column name in a SQL query`,id:`invalid-object-name-or-invalid-column-name-in-a-sql-query`,children:_jsx(_components.p,{children:`Fabric warehouses are case-sensitive by default. Change the table and column names in your SQL to match their case in Fabric.`})}),_jsx(Accordion,{title:`Error 24804, 6005, or 6008`,id:`error-24804-6005-or-6008`,children:_jsx(_components.p,{children:`Fabric returns these errors for a short time during a system update, or when the workspace is temporarily unavailable. Run the query again. If the errors continue, check that the Fabric capacity is running and isn’t paused.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next?`}),`\n`,_jsx(_components.p,{children:`Now that your database is set up, you can:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use the Omni Agent’s `,_jsx(_components.a,{href:`/modeling/topics/quickstart`,children:`quickstart skill`}),` to create your first topic from business questions`]}),`\n`,_jsxs(_components.li,{children:[`Configure user permissions, `,_jsx(_components.a,{href:`/modeling/develop/schema-refreshes`,children:`schema refreshes`}),`, `,_jsx(_components.a,{href:`/connect-data/dynamic-environments`,children:`environments`}),` and `,_jsx(_components.a,{href:`/connect-data/timezones`,children:`timezone settings`})]}),`\n`,_jsxs(_components.li,{children:[`Learn how Omni `,_jsx(_components.a,{href:`/modeling/develop/model-generation`,children:`generates the model`}),` associated with the connection`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{BaseAccess,QueryTimeout,AlwaysScopeViewNames,AutoGenerateRelationships,AllowUserSpecificTimezones,QueryTimezone,DatabaseTimezone,Default,TableUploads,Offloaded,Include,Port,DisplayName,authType_1,authType_0,stepCopy_1,stepCopy_0,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Connecting Microsoft Fabric to Omni","description":"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.","sidebarTitle":"Microsoft Fabric","keywords":["microsoft fabric","fabric warehouse","fabric lakehouse","sql analytics endpoint","onelake","entra id","service principal","database connection","setup","connect data"],"href":"/connect-data/setup/microsoft-fabric"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[134,148,"Default=()=>null;const TableUploads=()=>null;const Offloaded=()=>null;const Include=()=>null;const authType_1=undefined;const BaseAccess=()="],[2825,4344,""],[4929,4956,""],[5431,5435,""],[5890,5931,""],[15901,18190,"_jsx(_components.p,{children:`Search for the app registration name from step 1.`"],[18244,32061,""],[34525,34527,""],[36826,36828,""],[37645,37647,""],[41090,41092,""],[41772,41774,""],[42144,42146,""],[42442,42444,""],[43561,45007,""],[45882,50400,"s(View,{title:`Entra user password`,id:`entra-user-password`,children:[_jsx(Heading,{level:`2`,id:`requirements-2`,children:`Requirements`}),_jsx(_components.p,{children:`To follow the steps in this guide, you’ll need:`}"],[50470,52022,"`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Organization Admin permissions in Omni`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Admin or Member permissions on the Fabric workspace`}),`, which are required to give Omni access to the workspace`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse or lakehouse in a shared Fabric workspace.`}),` Items in `,_jsx(_components.strong,{children:`My workspace`}),` can’t be used, because you can’t add other identities to that workspace.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required if you want to use table uploads.`}),` Table uploads require read and write permissions - as lakehouse SQL analytics endpoints are read-only, table uploads will not work with this connection type.`]})}),`\n`]}),`\n`]}),_jsx(Heading,{level:`2`,id:`setup-2`,children:`Setup`}),_jsxs(Steps,{titleSize:`h3`,children:[_jsxs(Step,{title:`Grant the Entra user access to the workspace`,id:`grant-the-entra-user-access-to-the-workspace`,children:[_jsxs(_components.p,{children:[`Fabric maps workspace roles to SQL permissions. You can’t run `,_jsx(_components.code,{children:`CREATE USER`}),` in Fabric, so you give Omni access through a workspace role.`]}),_jsxs(_components.ol,{"],[52069,53265,"\n`,_jsx(_components.p,{children:`In Fabric, open the workspace that contains the warehouse or lakehouse.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Manage access`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add people or groups`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Select the Entra user you want to use to complete the connection.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Select a role:`}),`\n`,_jsxs(_c"],[53325,54685,"_jsx(_components.strong,{children:`Contributor`}),` - Allows Omni to query data and create tables. `,_jsx(_components.strong,{children:`Required to use table uploads.`})]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Viewer`}),` - Allows Omni to query data. Omni cannot create tables.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Workspace roles for a service principal`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=04fa90c2771d3ea85e7a80fcc62948ee`,alt:`Manage access panel in a Fabric workspace, with the role menu open for a service principal that has the Contributor role`,\"data-og-width\":`340`,width:`340`,\"data-og-height\":`470`,height:`470`,\"data-path\":`connect-data/images/fabric-workspace-manage-access.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=bb315120b3c3fb388e92fb8dfd730938 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=a369d6ed3b2c22cb8babe3888d57def3 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=9952d4076e1fec72a9e8046214dd9b03 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=b46130a55678056bf225ed31495b568d 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=1f35339e6f36926ae854aec334d5de97 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-workspace-manage-access.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=75b62b479cf8a1e873c9309af2b3db84 2500w`})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Add`}),`.`]}),`\n`]}),`\n`]})]}),_jsxs(Step,{title:`Set up a table upload schema`,id:`set-up-a-table-upload-schema-2`,children:[_jsx(Callout,{icon:`hand-point-up`,color:`#FF5FA2`,children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This step is optional.`}),` However, we recommend completing it as part of the initial set up or you won’t be able to use uploaded files like CSVs in joins.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`}),` A lakehouse SQL analytics endpoint can’t store tables. If you are connecting a lakehouse, skip this step.`]})}),_jsxs(_components.p,{children:[`In this step, you’ll create a dedicated schema to use for `,_jsx(_components.a,{href:`/analyze-explore/data-input-csvs`,children:`table uploads`}),`. This schema can’t be used for other modeled tables.`]}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Fabric, open the warehouse and click `,_jsx(_components.strong,{children:`New SQL query`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Run the following command to create the schema:`}),`\n`,_jsx(CodeBlock,{filename:`Create the upload schema`,numberOfLines:`1`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SCHEMA`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` omni_uploads`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`]})})}),`\n`]}),`\n`]}),_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Contributor`}),` workspace role gives the service principal or Entra user permission to write to this schema. You don’t need to run `,_jsx(_components.code,{children:`GRANT`}),` statements.`]})]}),_jsxs(Step,{title:`Allowlist Omni's IP addresses`,id:`allowlist-omnis-ip-addresses-2`,children:[_jsx(_components.p,{children:`If the Fabric workspace limits inbound access by IP address, you’ll need to add Omni’s IPs to the allowlist before you create the connection.`}),_jsxs(_components.p,{children:[`Omni’s IP addresses can be found on an individual connection’s page, accessed by navigating to `,_jsx(_components.strong,{children:`Settings > Connections`}),` and clicking a connection.`]}),_jsxs(_components.p,{children:[`Add a rule for each of Omni’s IP addresses. For the steps and requirements, refer to Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/security/security-workspace-level-firewall-set-up`,children:`Set up and use workspace IP firewall rules`}),` documentation.`]})]}),_jsx(Step,{title:`Retrieve connection details`,id:`retrieve-connection-details-2`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`In Fabric, open the workspace.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Find the warehouse or the lakehouse SQL analytics endpoint in the item list.`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Next to the warehouse or lakehouse SQL analytics endpoint, click the `,_jsx(Icon,{icon:`ellipsis`,className:`icons`}),` icon, then `,_jsx(_components.strong,{children:`Copy SQL connection string`}),`. You can also find the connection string in the item’s `,_jsx(_components.strong,{children:`Settings`}),` panel.`]}),`\n`,_jsx(Frame,{caption:`Copy SQL connection string`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=375fa33e8da7f55efcade879d39437d0`,alt:`More options menu for a warehouse in the Fabric workspace item list, with the Copy SQL connection string option`,\"data-og-width\":`780`,width:`780`,\"data-og-height\":`755`,height:`755`,\"data-path\":`connect-data/images/fabric-copy-sql-connection-string.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=280\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=8998b2146170b838383587862cefc755 280w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=560\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=45726499f42c882ac78e1d3333003de8 560w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=840\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=aa07e0e5b171452149448b8efe1e1180 840w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1100\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=4fba3b5c45ff17e9a3c32ddf709307b8 1100w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=1650\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=d5cc5c67f223c11a600754a7a5791ef7 1650w, https://mintcdn.com/omni-e7402367/k47CHMscFpHLv4Fu/connect-data/images/fabric-copy-sql-connection-string.png?w=2500\u0026fit=max\u0026auto=format\u0026n=k47CHMscFpHLv4Fu\u0026q=85\u0026s=de66784f8281cf1d40c904b97c19cfcb 2500w`})}),`\n`,_jsx(_components.p,{children:`The connection string looks like this:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`\u003cunique-id>.datawarehouse.fabric.microsoft.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Copy the name of the warehouse or lakehouse exactly as it shows in the workspace, including spaces and capitalization.`}),`\n`]}),`\n`]})}),_jsx(Step,{title:`Create the connection in Omni`,id:`create-the-connection-in-omni-2`,children:_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`In Omni, click `,_jsx(_components.strong,{children:`Settings > Connections`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Click the `,_jsx(_components.strong,{children:`Microsoft Fabric`}),` option.`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`On the connection setup page, fill in the connection details:`}),`\n`,_jsx(_MdxComponentBoundary,{name:`DisplayName`,children:_jsx(DisplayName,{})}),`\n`,_jsx(ParamField,{path:`SQL connection string`,required:true,id:`param-sql-connection-string-1`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`.datawarehouse.fabric.microsoft.com`}),` connection string that you copied in the previous step.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Port`,children:_jsx(Port,{defaultValue:`1433`})}),`\n`,_jsx(ParamField,{path:`Warehouse or Lakehouse`,required:true,id:`param-warehouse-or-lakehouse-1`,children:_jsxs(_components.p,{children:[`The name of the warehouse or lakehouse, as it shows in the Fabric workspace. `,_jsx(_components.strong,{children:`A warehouse is required to use table uploads.`})]})}),`\n`,_jsx(ParamField,{path:`Include Other Databases`,id:`param-include-other-databases-1`,children:_jsxs(_components.p,{children:[`A comma-separated list of other warehouses or lakehouses in the same workspace to generate models for. Wildcards are supported (`,_jsx(_components.code,{children:`sales_*`}),`), and prefixing an entry with `,_jsx(_components.code,{children:`-`}),` excludes it (`,_jsx(_components.code,{children:`sales_*,-sales_dev`}),`). Refer to `,_jsx(_components.a,{href:`#querying-warehouses-and-lakehouses-together`,children:`Querying warehouses and lakehouses together`}),` for more information.`]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Include`,children:_jsx(Include,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Offloaded`,children:_jsx(Offloaded,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`TableUploads`,children:_jsx(TableUploads,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`This schema must be in a warehouse`}),`. Leave this blank if connecting a lakehouse SQL analytics endpoint, as this connection type doesn’t support table uploads.`]})})}),`\n`,_jsx(_MdxComponentBoundary,{name:`Default`,children:_jsx(Default,{defaultValue:`dbo`})}),`\n`,_jsx(_MdxComponentBoundary,{name:`DatabaseTimezone`,children:_jsx(DatabaseTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimezone`,children:_jsx(QueryTimezone,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AllowUserSpecificTimezones`,children:_jsx(AllowUserSpecificTimezones,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AutoGenerateRelationships`,children:_jsx(AutoGenerateRelationships,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`AlwaysScopeViewNames`,children:_jsx(AlwaysScopeViewNames,{})}),`\n`,_jsx(_MdxComponentBoundary,{name:`QueryTimeout`,children:_jsx(QueryTimeout,{defaultValue:`900`})}),`\n`,_jsx(_MdxComponentBoundary,{name:`BaseAccess`,children:_jsx(BaseAccess,{})}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`When finished, click `,_jsx(_components.strong,{children:`Create connection`}),`.`]}),`\n`]}),`\n`]})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`querying-warehouses-and-lakehouses-together`,children:`Querying warehouses and lakehouses together`}),`\n`,_jsx(_components.p,{children:`Fabric can query across the warehouses and lakehouses in a workspace. One Omni connection can use this to read from several of them:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),`, enter a `,_jsx(_components.strong,{children:`warehouse`}),`. Omni writes table uploads to this item, so it must be writable.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Include Other Databases`}),`, enter the lakehouses and other warehouses you want to model.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Omni then generates views for each item, and you can join tables across them. When using this approach, note that:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The same table can show in more than one item.`}),` Lakehouse shortcuts can point to warehouse tables, so `,_jsx(_components.code,{children:`dbo.orders`}),` can exist in both. Model the table from one item only.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`New shortcut tables can take a few minutes to show in Omni.`}),` If a `,_jsx(_components.a,{href:`/modeling/develop/schema-refreshes`,children:`schema refresh`}),` runs right after someone adds a shortcut, the new table may be missing. Run the refresh again.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`differences-from-sql-server`,children:`Differences from SQL Server`}),`\n`,_jsxs(_components.p,{children:[`While Fabric uses T-SQL, it doesn’t support all `,_jsx(_components.a,{href:`/connect-data/setup/microsoftsql`,children:`Microsoft SQL Server`}),` features. Omni generates SQL that works in Fabric. The differences below affect SQL that you write yourself, and filter results.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Behavior`}),_jsx(_components.th,{children:`What to expect in Omni`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Case sensitivity`})}),_jsxs(_components.td,{children:[`By default, Fabric warehouses are case-sensitive. Table and column names must match their case in Fabric, and a filter for `,_jsx(_components.code,{children:`usa`}),` doesn’t match `,_jsx(_components.code,{children:`USA`}),`. A warehouse can be created case-insensitive, but the setting can’t be changed after creation.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Timestamps with timezone offsets`})}),_jsxs(_components.td,{children:[`Fabric tables can’t store `,_jsx(_components.code,{children:`datetimeoffset`}),` columns, so timestamps don’t include a timezone offset. Set `,_jsx(_components.strong,{children:`Database Timezone`}),` to the timezone that your timestamps are stored in. Timezone conversion and `,_jsx(_components.strong,{children:`Allow User-Specific Timezones`}),` work the same way as in SQL Server.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Recursive CTEs`})}),_jsxs(_components.td,{children:[`Not supported. SQL queries that use `,_jsx(_components.code,{children:`WITH ... UNION ALL`}),` recursion fail.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Chained table calculations`})}),_jsx(_components.td,{children:`Fabric can reject queries that chain four or more table calculations that reference each other.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`For the full list, refer to Microsoft’s `,_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/fabric/data-warehouse/tsql-surface-area`,children:`T-SQL surface area in Fabric Data Warehouse`}),` documentation.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Login failed when testing the connection`,id:`login-failed-when-testing-the-connection`,children:[_jsxs(_components.p,{children:[`An error like `,_jsx(_components.code,{children:`Login failed for user '\u003ctoken-identified principal>'`}),` means that Fabric couldn’t open the warehouse or lakehouse for the service principal. Check that:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The Service principals can call Fabric public APIs tenant setting is enabled`}),`. If the setting is limited to security groups, the service principal must be in one of the groups. Changes can take up to 15 minutes to apply.`]}),`\n`,_jsx(_components.li,{children:`The service principal has a role on the workspace.`}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),` field matches the item name in Fabric exactly.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Secret`}),` field contains the secret `,_jsx(_components.strong,{children:`Value`}),`, not the `,_jsx(_components.strong,{children:`Secret ID`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`If you use `,_jsx(_components.strong,{children:`Entra User Password`}),`, the account doesn’t require MFA and has a role on the workspace.`]}),`\n`]})]}),_jsx(Accordion,{title:`A connection that worked stops authenticating`,id:`a-connection-that-worked-stops-authenticating`,children:_jsxs(_components.p,{children:[`Check whether the client secret expired. To fix it, create a new client secret for the app registration in the Azure Portal. Then, update the `,_jsx(_components.strong,{children:`Secret`}),` field on the connection in Omni.`]})}),_jsxs(Accordion,{title:`CREATE TABLE permission denied`,id:`create-table-permission-denied`,children:[_jsx(_components.p,{children:`Omni can read data but can’t create the table for an upload. Check that:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The service principal or Entra user has the `,_jsx(_components.strong,{children:`Contributor`}),` role, or higher, on the workspace. Sharing the warehouse item gives read permissions only.`]}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.strong,{children:`Warehouse or Lakehouse`}),` field in Omni contains a warehouse, not a lakehouse.`]}),`\n`]})]}),_jsx(Accordion,{title:`Invalid object name or invalid column name in a SQL query`,id:`invalid-object-name-or-invalid-column-name-in-a-sql-query`,children:_jsx(_components.p,{children:`Fabric warehouses are case-sensitive by default. Change the table and column names in your SQL to match their case in Fabric.`})}),_jsx(Accordion,{title:`Error 24804, 6005, or 6008`,id:`error-24804-6005-or-6008`,children:_jsx(_components.p,{children:`Fabric returns these errors for a short time during a system update, or when the workspace is temporarily unavailable. Run the query again. If the errors continue, check that the Fabric capacity is running and isn’t paused.`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next?`}),`\n`,_jsx(_components.p,{children:`Now that your database is set up, you can:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use the Omni Agent’s `,_jsx(_components.a,{href:`/modeling/topics/quickstart`,children:`quickstart skill`}),` to create your first topic from business questions`]}),`\n`,_jsxs(_components.li,{children:[`Configure user permissions, `,_jsx(_components.a,{href:`/modeling/develop/schema-refreshes`,children:`schema refreshes`}),`, `,_jsx(_components.a,{href:`/connect-data/dynamic-environments`,children:`environments`}),` and `,_jsx(_components.a,{href:`/connect-data/timezones`,children:`timezone settings`})]}),`\n`,_jsxs(_components.li,{children:[`Learn how Omni `,_jsx(_components.a,{href:`/modeling/develop/model-generation`,children:`generates the model`}),` associated with the connection`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{Default,TableUploads,Offloaded,Include,authType_1,BaseAccess,QueryTimeout,AlwaysScopeViewNames,AutoGenerateRelationships,AllowUserSpecificTimezones,QueryTimezone,DatabaseTimezone,Port,DisplayName,authType_0,stepCopy_1,stepCopy_0,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}"]]},"mdxExtracts":{"tableOfContents":[{"title":"Select an authentication method","slug":"select-an-authentication-method","depth":2,"children":[],"viewId":"Select authentication method"},{"title":"Requirements","slug":"requirements","depth":2,"children":[],"viewId":"Service principal authentication"},{"title":"Setup","slug":"setup","depth":2,"children":[{"title":"Create a service principal for Omni","slug":"create-a-service-principal-for-omni","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Allow service principals to use Fabric","slug":"allow-service-principals-to-use-fabric","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Grant the service principal access to the workspace","slug":"grant-the-service-principal-access-to-the-workspace","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Set up a table upload schema","slug":"set-up-a-table-upload-schema","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Allowlist Omni's IP addresses","slug":"allowlist-omnis-ip-addresses","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Retrieve connection details","slug":"retrieve-connection-details","depth":3,"children":[],"viewId":"Service principal authentication"},{"title":"Create the connection in Omni","slug":"create-the-connection-in-omni","depth":3,"children":[],"viewId":"Service principal authentication"}],"viewId":"Service principal authentication"},{"title":"Requirements","slug":"requirements-2","depth":2,"children":[],"viewId":"Entra user password"},{"title":"Setup","slug":"setup-2","depth":2,"children":[{"title":"Grant the Entra user access to the workspace","slug":"grant-the-entra-user-access-to-the-workspace","depth":3,"children":[],"viewId":"Entra user password"},{"title":"Set up a table upload schema","slug":"set-up-a-table-upload-schema-2","depth":3,"children":[],"viewId":"Entra user password"},{"title":"Allowlist Omni's IP addresses","slug":"allowlist-omnis-ip-addresses-2","depth":3,"children":[],"viewId":"Entra user password"},{"title":"Retrieve connection details","slug":"retrieve-connection-details-2","depth":3,"children":[],"viewId":"Entra user password"},{"title":"Create the connection in Omni","slug":"create-the-connection-in-omni-2","depth":3,"children":[],"viewId":"Entra user password"}],"viewId":"Entra user password"},{"title":"Querying warehouses and lakehouses together","slug":"querying-warehouses-and-lakehouses-together","depth":2,"children":[]},{"title":"Differences from SQL Server","slug":"differences-from-sql-server","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"What’s next?","slug":"what’s-next","depth":2,"children":[]}],"multiViewItems":[{"title":"Select authentication method","content":"","id":"select-authentication-method","active":true},{"title":"Service principal authentication","content":"","id":"service-principal-authentication","active":false},{"title":"Entra user password","content":"","id":"entra-user-password","active":false}],"codeExamples":{}},"jsLinks":[],"subdomain":"omni-e7402367","siteName":"Omni Docs","title":"Connecting Microsoft Fabric to Omni - Omni Docs","relatedPagesConfig":{"enabled":true,"limit":3,"mode":"manual"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T16:23:19.620Z","originalFileLocation":"connect-data/setup/microsoft-fabric.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Connecting Microsoft Fabric to Omni - Omni Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Omni Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.omni.co/connect-data/setup/microsoft-fabric\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Connect+databases\u0026amp;title=Connecting+Microsoft+Fabric+to+Omni\u0026amp;description=Learn+how+to+set+up+a+service+principal+and+connect+your+Microsoft+Fabric+warehouse+or+lakehouse+SQL+analytics+endpoint+to+Omni.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=a001ee3eacb5a58c969f958cd36021c5918d8407d3a9227a672fe189d5223e84\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Connecting Microsoft Fabric to Omni - Omni Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://omni-e7402367.mintlify.app/_mintlify/api/og/v2?division=Connect+databases\u0026amp;title=Connecting+Microsoft+Fabric+to+Omni\u0026amp;description=Learn+how+to+set+up+a+service+principal+and+connect+your+Microsoft+Fabric+warehouse+or+lakehouse+SQL+analytics+endpoint+to+Omni.\u0026amp;theme=191f8a92cb0a982596561b95\u0026amp;signature=a001ee3eacb5a58c969f958cd36021c5918d8407d3a9227a672fe189d5223e84\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/omni-e7402367/Hcd24pRrgU0Go9sj/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Omni Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF5FA2\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.omni.co/connect-data/setup/microsoft-fabric\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/connect-data/setup/microsoft-fabric.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.omni.co/#organization\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/omni-e7402367/m1fg0tfdkEcnYhky/images/logo/omni-black.png?fit=max\u0026auto=format\u0026n=m1fg0tfdkEcnYhky\u0026q=85\u0026s=85b81b605382b15b60eb75159899002a\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.omni.co#website\",\"name\":\"Omni Docs\",\"url\":\"https://docs.omni.co\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric#webpage\",\"url\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric\",\"name\":\"Connecting Microsoft Fabric to Omni\",\"description\":\"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\",\"dateModified\":\"2026-10-30T16:23:19.620Z\",\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connect data\",\"item\":\"https://docs.omni.co/connect-data/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Connect databases\",\"item\":\"https://docs.omni.co/connect-data/setup/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Connecting Microsoft Fabric to Omni\",\"item\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric#article\",\"headline\":\"Connecting Microsoft Fabric to Omni\",\"name\":\"Connecting Microsoft Fabric to Omni\",\"description\":\"Learn how to set up a service principal and connect your Microsoft Fabric warehouse or lakehouse SQL analytics endpoint to Omni.\",\"url\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric\",\"mainEntityOfPage\":{\"@id\":\"https://docs.omni.co/connect-data/setup/microsoft-fabric#webpage\"},\"dateModified\":\"2026-10-30T16:23:19.620Z\",\"keywords\":\"microsoft fabric, fabric warehouse, fabric lakehouse, sql analytics endpoint, onelake, entra id, service principal, database connection, setup, connect data\",\"publisher\":{\"@id\":\"https://docs.omni.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.omni.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Omni Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Omni Docs","nav":{"global":null,"tabs":[{"tab":"Docs","pages":[{"title":"Docs","href":""}]},{"tab":"Admin","pages":[{"title":"Omni administration","sidebarTitle":"Admin home","mode":"wide","href":"/administration"},{"group":"Connect data","icon":"database","pages":[{"title":"Connect data","sidebarTitle":"Overview","mode":"wide","href":"/connect-data/index"},{"group":"Connect databases","root":{"title":"Connect a database","sidebarTitle":"Overview","mode":"wide","href":"/connect-data/setup/index"},"pages":[{"title":"Creating quick database connections with connection strings","sidebarTitle":"Quick connect","href":"/connect-data/setup/quick-connect"},{"title":"Connecting Amazon Athena to Omni as a data source","sidebarTitle":"Amazon Athena","href":"/connect-data/setup/athena"},{"group":"BigQuery","pages":[{"title":"Connecting Google BigQuery to Omni with a service account","sidebarTitle":"Service account + key","href":"/connect-data/setup/bigquery"},{"title":"Connecting Google BigQuery to Omni with workload identity federation","sidebarTitle":"Workload identity federation","href":"/connect-data/setup/bigquery-workload-identity"}]},{"title":"Connecting ClickHouse to Omni","sidebarTitle":"ClickHouse","href":"/connect-data/setup/clickhouse"},{"title":"Connecting Databricks to Omni","sidebarTitle":"Databricks","href":"/connect-data/setup/databricks"},{"title":"Connecting Exasol to Omni","sidebarTitle":"Exasol","href":"/connect-data/setup/exasol"},{"title":"Connecting MariaDB to Omni","description":"Learn how to create a database user, grant permissions, and connect your MariaDB database to Omni.","sidebarTitle":"MariaDB","href":"/connect-data/setup/mariadb"},{"title":"Connecting Microsoft Fabric to Omni","sidebarTitle":"Microsoft Fabric","href":"/connect-data/setup/microsoft-fabric"},{"title":"Connecting Microsoft SQL Server to Omni","description":"Learn how to retrieve connection details and connect your Microsoft SQL Server database to Omni.","sidebarTitle":"Microsoft SQL Server","href":"/connect-data/setup/microsoftsql"},{"title":"Connecting MotherDuck to Omni","sidebarTitle":"MotherDuck","href":"/connect-data/setup/motherduck"},{"title":"Connecting MySQL to Omni","sidebarTitle":"MySQL","href":"/connect-data/setup/mysql"},{"title":"Connecting Postgres to Omni","sidebarTitle":"Postgres","href":"/connect-data/setup/postgres"},{"title":"Connecting Amazon Redshift to Omni","sidebarTitle":"Redshift","href":"/connect-data/setup/redshift"},{"title":"Connecting Snowflake to Omni","sidebarTitle":"Snowflake","href":"/connect-data/setup/snowflake"},{"title":"Connecting Starburst Galaxy to Omni","sidebarTitle":"Starburst Galaxy (Trino)","href":"/connect-data/setup/starburst-galaxy"},{"title":"Connecting StarRocks to Omni","sidebarTitle":"StarRocks","href":"/connect-data/setup/starrocks"}]},{"group":"Configure OAuth","root":{"title":"OAuth for database connections","sidebarTitle":"Overview","href":"/connect-data/oauth/index"},"pages":[{"title":"Configuring OAuth for BigQuery","sidebarTitle":"BigQuery","href":"/connect-data/oauth/bigquery"},{"title":"Configuring native OAuth for Databricks databases","sidebarTitle":"Databricks","href":"/connect-data/oauth/databricks"},{"group":"Snowflake","root":{"title":"OAuth for Snowflake connections","sidebarTitle":"Overview","href":"/connect-data/oauth/snowflake/index"},"pages":[{"title":"Configuring native OAuth for Snowflake databases","sidebarTitle":"Native OAuth","href":"/connect-data/oauth/snowflake/native"},{"title":"Configuring Snowflake External OAuth with Microsoft Entra ID","sidebarTitle":"Entra ID","href":"/connect-data/oauth/snowflake/external-entra"},{"title":"Configuring Snowflake External OAuth with Okta","sidebarTitle":"Okta","href":"/connect-data/oauth/snowflake/external-okta"},{"title":"Troubleshooting Snowflake OAuth","sidebarTitle":"Troubleshooting","href":"/connect-data/oauth/snowflake/troubleshooting"}]}]},{"group":"Manage connections","pages":[{"title":"Restricting connection schemas","sidebarTitle":"Restrict schemas","href":"/connect-data/schema-restriction"},{"title":"Defining view name generation for database connections","sidebarTitle":"View name generation","href":"/connect-data/view-name-generation"},{"title":"Understanding timezone conversion \u0026 connection settings","sidebarTitle":"Timezone conversion","href":"/connect-data/timezones"},{"title":"Archiving (deleting) connections","sidebarTitle":"Delete connections","href":"/connect-data/archive-connection"}]},{"group":"PrivateLink \u0026 SSH","pages":[{"title":"Connect to private databases with AWS PrivateLink","sidebarTitle":"AWS PrivateLink","href":"/connect-data/aws-privatelink"},{"title":"Connect to private databases with Azure PrivateLink","sidebarTitle":"Azure PrivateLink","href":"/connect-data/azure-privatelink"},{"title":"Connect to Azure SQL Database with Azure Private Link","sidebarTitle":"Azure SQL Private Link","href":"/connect-data/azure-sql-privatelink"},{"title":"Connect to ClickHouse Cloud with AWS PrivateLink","sidebarTitle":"ClickHouse PrivateLink","href":"/connect-data/clickhouse-privatelink"},{"title":"Connecting to Databricks using AWS or Azure PrivateLink","sidebarTitle":"Databricks PrivateLink","href":"/connect-data/databricks-privatelink"},{"title":"Connect to Redshift with AWS PrivateLink","sidebarTitle":"Redshift PrivateLink","href":"/connect-data/redshift-privatelink"},{"title":"Connecting to Snowflake using AWS or Azure PrivateLink","sidebarTitle":"Snowflake PrivateLink","href":"/connect-data/snowflake-privatelink"},{"title":"Connecting databases using SSH","sidebarTitle":"SSH tunnels","href":"/connect-data/ssh-tunnels"}]},{"group":"Advanced configuration","pages":[{"title":"Dynamic connection environments","sidebarTitle":"Dynamic environments","href":"/connect-data/dynamic-environments"},{"title":"User-selected connection environments","sidebarTitle":"User-selected environments","href":"/connect-data/user-selected-environments"},{"title":"Offloading schemas","sidebarTitle":"Offloaded schemas","href":"/connect-data/offloading-schemas"},{"title":"Pulling Databricks metrics and metrics views into Omni","sidebarTitle":"Databricks Unity Catalog","href":"/connect-data/databricks-unity-catalog-integration"},{"group":"Snowflake semantic views","pages":[{"title":"Getting started with Snowflake semantic views","sidebarTitle":"Getting started","href":"/connect-data/snowflake-semantic-views/index"},{"group":"Sync to Omni","pages":[{"title":"Syncing Snowflake semantic views","sidebarTitle":"Trigger sync","href":"/connect-data/snowflake-semantic-views/sync/trigger-sync"},{"title":"Snowflake semantic view metadata reference","sidebarTitle":"Metadata reference","href":"/connect-data/snowflake-semantic-views/sync/metadata-reference"},{"title":"Snowflake semantic view example","sidebarTitle":"Example","href":"/connect-data/snowflake-semantic-views/sync/example"}]},{"title":"Querying Snowflake semantic view topics","sidebarTitle":"Query topics","href":"/connect-data/snowflake-semantic-views/querying"},{"title":"Pushing Omni topics to Snowflake","sidebarTitle":"Push to Snowflake","href":"/connect-data/snowflake-semantic-views/push-to-snowflake"},{"title":"Snowflake semantic view limitations","sidebarTitle":"Limitations","href":"/connect-data/snowflake-semantic-views/limitations"}]}]},{"title":"Troubleshooting connection issues","sidebarTitle":"Troubleshooting","href":"/connect-data/troubleshooting"}]},{"group":"Manage users and permissions","icon":"user-shield","pages":[{"title":"Managing users","sidebarTitle":"Manage users","href":"/administration/users/index"},{"title":"Inviting users","sidebarTitle":"Invite new users","href":"/administration/users/invite"},{"title":"Managing your account settings","sidebarTitle":"Your account","href":"/administration/users/your-account"},{"title":"Email-only users","sidebarTitle":"Email-only users","href":"/administration/users/email-only"},{"title":"External users","sidebarTitle":"External users","href":"/administration/users/external-users"},{"group":"Assign permissions","pages":[{"title":"Managing data access with connection permissions","sidebarTitle":"Assign \u0026 test permissions","href":"/administration/users/permissions"},{"title":"Defining custom model roles","sidebarTitle":"Custom roles","href":"/administration/users/custom-roles"},{"title":"Common user access scenarios","sidebarTitle":"Access scenarios","href":"/administration/users/permissions-scenarios"},{"title":"Connection and model permissions reference","sidebarTitle":"Permissions reference","href":"/administration/users/permissions-reference"},{"title":"Troubleshooting user permissions","sidebarTitle":"Troubleshooting","href":"/administration/users/permissions-troubleshooting"}]},{"title":"Managing a user's settings","sidebarTitle":"User settings","href":"/administration/users/settings"},{"title":"Testing access grants and permissions with user impersonation","sidebarTitle":"Impersonation","href":"/administration/users/impersonate"},{"title":"User groups","sidebarTitle":"User groups","href":"/administration/users/groups"},{"group":"User attributes","root":{"title":"User attributes","href":"/administration/users/attributes"},"pages":[{"title":"User-selected attribute values","sidebarTitle":"User-selected attributes","href":"/administration/users/attributes/user-selected"}]},{"title":"Revoking user memberships","sidebarTitle":"Revoke membership","href":"/administration/users/delete"}]},{"group":"Manage organization","icon":"building","pages":[{"title":"Organization settings","sidebarTitle":"Organization-level settings","href":"/administration/settings"},{"title":"App settings","sidebarTitle":"Apps","href":"/administration/settings/app-policy"},{"title":"Delivery settings","sidebarTitle":"Deliveries","href":"/administration/settings/deliveries"},{"title":"Authentication settings","sidebarTitle":"Authentication","href":"/administration/settings/authentication"},{"group":"AI settings","root":{"title":"AI Hub","sidebarTitle":"AI Hub","href":"/administration/ai-hub"},"pages":[{"title":"AI Feature settings","sidebarTitle":"Features","href":"/ai/settings/features"},{"title":"Global Omni Agent context","sidebarTitle":"Global context","href":"/ai/settings/global-context"},{"title":"AI MCP Server settings","sidebarTitle":"MCP","href":"/ai/settings/mcp"},{"title":"Managing AI credit usage","sidebarTitle":"Credit controls \u0026 usage","href":"/ai/settings/usage"},{"title":"AI branding","sidebarTitle":"Branding","href":"/ai/settings/branding"},{"title":"LLM settings","sidebarTitle":"LLM settings","href":"/ai/settings/llm-settings"},{"group":"Bring Your Own Key (BYOK)","root":{"title":"Bring Your Own Key (BYOK)","sidebarTitle":"Bring Your Own Key (BYOK)","href":"/ai/settings/model-providers/index"},"pages":[{"title":"Anthropic Direct - Bring Your Own Key (BYOK)","sidebarTitle":"Anthropic Direct","href":"/ai/settings/model-providers/anthropic-direct"},{"title":"Databricks Genie - Bring Your Own Key (BYOK)","sidebarTitle":"Databricks Genie","href":"/ai/settings/model-providers/databricks-genie"},{"title":"Google Gemini Enterprise Agent Platform (Vertex AI) - Bring Your Own Key (BYOK)","sidebarTitle":"Google Gemini Enterprise Agent Platform","href":"/ai/settings/model-providers/google-vertex-ai"},{"title":"Grok (xAI) - Bring Your Own Key (BYOK)","sidebarTitle":"Grok (xAI)","href":"/ai/settings/model-providers/grok-xai"},{"title":"Custom OpenAI models - Bring Your Own Key (BYOK)","sidebarTitle":"OpenAI custom models","href":"/ai/settings/model-providers/openai"},{"title":"Snowflake Cortex - Bring Your Own Key (BYOK)","sidebarTitle":"Snowflake Cortex","href":"/ai/settings/model-providers/snowflake-cortex"}]}]},{"title":"Localization settings","sidebarTitle":"Localization","href":"/administration/localization"},{"title":"Content permission settings","sidebarTitle":"Content permissions","href":"/administration/content-permissions"},{"title":"Managing billing \u0026 invoices","sidebarTitle":"Billing","href":"/administration/billing"},{"group":"Appearance","pages":[{"group":"Chart palettes","root":{"title":"Managing chart palettes","sidebarTitle":"Overview","href":"/administration/chart-palettes/index"},"pages":[{"title":"Setting a default chart palette for your organization","sidebarTitle":"Default palette","href":"/administration/chart-palettes/default"},{"title":"Managing custom chart palettes","sidebarTitle":"Custom palettes","href":"/administration/chart-palettes/custom"},{"title":"Built-in palette color reference","sidebarTitle":"Built-in palette reference","href":"/administration/chart-palettes/omni"}]},{"title":"Emoji settings","sidebarTitle":"Emoji","href":"/administration/settings/emoji"},{"group":"Themes","root":{"title":"Application and document theme settings","sidebarTitle":"Themes","href":"/administration/themes/index"},"pages":[{"title":"Application theme settings","sidebarTitle":"Application theme","href":"/administration/themes/application"},{"title":"Document theme settings","sidebarTitle":"Document themes","href":"/administration/themes/documents"}]},{"title":"Customizing your organization's navigation sidebar","sidebarTitle":"Sidebar","href":"/administration/settings/sidebar"}]},{"title":"Canceling long-running and hanging queries","sidebarTitle":"Cancel queries","href":"/administration/running-queries"}]},{"group":"Identity Providers","icon":"key","pages":[{"title":"Set up Identity Providers (IdP) for authentication","sidebarTitle":"Overview","mode":"wide","href":"/administration/authentication/index"},{"title":"Managing users with Google Workspace SAML","sidebarTitle":"Google Workspace","href":"/administration/authentication/google-workspace"},{"group":"Microsoft Entra (Azure AD)","root":{"title":"Microsoft Entra authentication","sidebarTitle":"Overview","href":"/administration/authentication/entra/index"},"pages":[{"title":"Microsoft Entra SAML authentication","sidebarTitle":"SAML","href":"/administration/authentication/entra/saml"},{"title":"Auto-provisioning Omni users with Microsoft Entra SCIM","sidebarTitle":"SCIM","href":"/administration/authentication/entra/scim"},{"title":"Syncing Microsoft Entra user attributes to Omni with SCIM","sidebarTitle":"User attributes","href":"/administration/authentication/entra/user-attributes"}]},{"group":"Okta","root":{"title":"Okta authentication","sidebarTitle":"Overview","href":"/administration/authentication/okta/index"},"pages":[{"title":"Configuring Okta SAML authentication","sidebarTitle":"SAML","href":"/administration/authentication/okta/saml"},{"title":"Auto-provisioning Omni users with Okta SCIM","sidebarTitle":"SCIM","href":"/administration/authentication/okta/scim"},{"title":"Syncing Okta user attributes to Omni with SCIM","sidebarTitle":"User attributes","href":"/administration/authentication/okta/user-attributes"}]},{"group":"Rippling","root":{"title":"Rippling authentication","sidebarTitle":"Overview","href":"/administration/authentication/rippling/index"},"pages":[{"title":"Configuring Rippling SAML SSO","sidebarTitle":"SAML","href":"/administration/authentication/rippling/saml"},{"title":"Auto-provisioning Omni users with Rippling SCIM","sidebarTitle":"SCIM","href":"/administration/authentication/rippling/scim"}]},{"title":"Configuring OIDC authentication","sidebarTitle":"OpenID Connect (OIDC)","href":"/administration/authentication/oidc"},{"title":"SAML and SCIM troubleshooting","sidebarTitle":"Troubleshooting","href":"/administration/authentication/troubleshooting"}]},{"group":"Security","icon":"shield","pages":[{"title":"Omni product \u0026 system security","sidebarTitle":"Product security","href":"/administration/security/index"},{"title":"Omni supported cloud regions","sidebarTitle":"Cloud regions","href":"/administration/security/cloud-regions"},{"title":"Omni information security program","sidebarTitle":"Information security program","href":"/administration/security/information-security-program"},{"title":"AI data security","sidebarTitle":"AI data privacy","href":"/ai/security"},{"title":"Restricting Omni access with an IP allowlist","sidebarTitle":"IP allowlist","href":"/administration/security/ip-allowlist"},{"title":"Allowlisting Omni's IP addresses","sidebarTitle":"Omni IP addresses","href":"/administration/security/omni-ip-addresses"},{"title":"Vulnerability disclosure policy","sidebarTitle":"Vulnerability disclosure","href":"/administration/security/vulnerability-disclosure"}]},{"group":"Monitor Omni","icon":"eye","pages":[{"title":"Usage analytics","sidebarTitle":"Usage analytics","href":"/administration/analytics"},{"group":"Audit logs","root":{"title":"Audit logs","sidebarTitle":"Audit logs","href":"/administration/audit-logs/index"},"pages":[{"title":"Using Amazon S3 for Omni audit logs","sidebarTitle":"Amazon S3","href":"/administration/audit-logs/amazon-s3"},{"title":"Using Google Cloud Storage for Omni audit logs","sidebarTitle":"Google Cloud Storage","href":"/administration/audit-logs/google-cloud-storage"},{"title":"Using Azure Blob Storage for Omni audit logs","sidebarTitle":"Azure Blob Storage","href":"/administration/audit-logs/azure-blob-storage"},{"title":"Audit log event types","sidebarTitle":"Event types","href":"/administration/audit-logs/event-types"}]}]}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"Library","pages":[{"title":"Library","href":"/library"}]},{"tab":"Developers","menu":[{"item":"REST APIs","icon":"cloud","description":"Programmatically interact with Omni","pages":[{"title":"REST APIs","href":"/api"}]},{"item":"Embedding","icon":"chart-column","description":"Embed Omni's analytics \u0026 AI in apps","pages":[{"title":"Embedding","href":"/embed"}]},{"item":"CLI","icon":"terminal","description":"Interact with Omni APIs from the terminal","pages":[{"title":"CLI","href":"/developers/cli"}]},{"item":"Agent skills","icon":"robot","description":"Bring Omni workflows into your agent environment","pages":[{"title":"Agent skills","href":"/developers/agent-skills"}]}],"pages":[{"title":"Developers","href":"/api"}]},{"tab":"Product updates","menu":[{"item":"Demos","icon":"rocket","description":"Weekly updates of upcoming and experimental features","pages":[{"title":"Demos","href":"/demos"}]},{"item":"Changelog","icon":"file-lines","description":"New features, improvements, and bug fixes","pages":[{"title":"Changelog","href":"/changelog"}]}],"pages":[{"title":"Product updates","href":"/demos"}]}]},"basePath":"","title":"Connecting Microsoft Fabric to Omni - Omni Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["10e4515597","07c022d89b","a74be98ba7"],"chunks":["BannerMarkdown-DHaG7hr_.js","dist-DKZWslLH.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-BIWXJmsZ.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","Frame-DW6UFrUy.js","DynamicMarkdown-B62XqCSI.js","zoom-image-lightbox-eHyQ0tlO.js","lightbox-handle-r17bVUz3.js"]}