Skip to content

Commit bf7146d

Browse files
docs: restructure BI integrations navigation and add Tableau/Power BI pages (cube-js#10433)
Hide Metabase and nested SLS pages from navigation, add top-level Tableau and Power BI pages under APIs & Integrations, rename "Data Sources & Config" to "Data Sources", remove screenshots from SLS page, and update "BI Integrations" references to "IDE → Integrations". Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 7be6536 commit bf7146d

8 files changed

Lines changed: 251 additions & 43 deletions

File tree

docs/content/product/_meta.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export default {
22
"introduction": "Introduction",
33
"getting-started": "Getting started",
4-
"configuration": "Data Sources & Config",
4+
"configuration": "Data Sources",
55
"data-modeling": "Data modeling",
66
"exploration": "Explore & Analyze",
77
"presentation": "Present & Share",

docs/content/product/apis-integrations/_meta.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ export default {
55
"mcp-server": "MCP server",
66
"microsoft-excel": "Cube Cloud for Excel",
77
"google-sheets": "Cube Cloud for Sheets",
8+
"tableau": "Tableau",
9+
"power-bi": "Microsoft Power BI",
810
"semantic-layer-sync": "Semantic Layer Sync",
911
"snowflake-semantic-views": "Snowflake Semantic Views",
1012
"javascript-sdk": "JavaScript SDK",
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# Microsoft Power BI
2+
3+
[Microsoft Power BI][link-powerbi] is a popular business intelligence tool.
4+
5+
Cube Cloud works with both [Power BI Desktop and Power BI Service][link-powerbi-desktop-vs-service].
6+
If you're using Power BI Service, you need to set up an [on-premises data gateway][link-powerbi-gateway].
7+
8+
<YouTubeVideo
9+
url="https://www.youtube.com/embed/vgrFPOMuJJs"
10+
aspectRatio={8/5}
11+
/>
12+
13+
## Connect to the DAX API
14+
15+
Cube Cloud provides the [DAX API][ref-dax-api] for the native Power BI connectivity.
16+
17+
18+
In Power BI Desktop, choose the <Btn>SQL Server Analysis Services database</Btn> option
19+
when connecting to a data source. Then, enter the DAX API credentials and choose
20+
<Btn>Windows</Btn> authentication. It accomodates both [Kerberos][ref-kerberos] and
21+
[NTLM][ref-ntlm] methods.
22+
23+
To find your DAX API credentials, go to the [Integrations][ref-integrations-apis] page,
24+
click <Btn>API credentials</Btn>, and choose the <Btn>DAX API</Btn> tab.
25+
26+
### Authentication methods
27+
28+
Cube Cloud supports the following authentication methods for Power BI:
29+
30+
| Application | Authentication | Notes |
31+
| --- | --- | --- |
32+
| Power BI Desktop | [NTLM][ref-ntlm-desktop] | 🟡 Works well for testing purposes |
33+
| Power BI Desktop | [Kerberos][ref-kerberos] | 🟢 Recommended for production |
34+
| Power BI Service | [NTLM][ref-ntlm] + [Kerberos][ref-kerberos] | 🟢 Recommended for production.<br/>Requires [on-premises data gateway][ref-opdg] |
35+
36+
### Connection methods
37+
38+
Power BI provides [three methods][link-powerbi-connection] to connect to data
39+
sources: _live connection_, _DirectQuery_, and _import mode_.
40+
41+
| | Live connection | DirectQuery | <nobr>Import mode</nobr> |
42+
| --- | --- | --- | --- |
43+
| Data location | 🟢 Data source | 🟢 Data source | 🟡 Power BI |
44+
| Data freshness | 🟢 Real-time data | 🟢 Real-time data | 🟡 Stale copy |
45+
| Semantic model | <nobr>🟢 Up-to-date model</nobr> | 🟡 Stale copy | 🟡 Stale copy |
46+
| Queries | <nobr>🟢 Composed in UI</nobr><br/><nobr>🔴 No custom queries</nobr> | <nobr>🟢 Composed in UI</nobr><br/><nobr>🟢 Custom queries</nobr> | <nobr>🟢 Composed in UI</nobr><br/><nobr>🟢 Custom queries</nobr> |
47+
48+
__It's recommended to use a _live connection_ whenever possible.__ Use _DirectQuery_
49+
if you need to write your own DAX queries, but be aware that you must manually
50+
synchronize semantic models as they evolve. _Import mode_ is not recommended, as
51+
it removes the benefits of using a semantic layer.
52+
53+
## Connect to the SQL API
54+
55+
You can connect a Cube deployment to Power BI using the [SQL API][ref-sql-api]
56+
as if Cube is a Postgres database. It would provide much more limited functionality
57+
than the DAX API. However, this is the only option when using Cube Core.
58+
59+
60+
[link-powerbi]: https://www.microsoft.com/en-gb/power-platform/products/power-bi/
61+
[link-powerbi-desktop-vs-service]: https://learn.microsoft.com/en-us/power-bi/fundamentals/service-service-vs-desktop
62+
[link-powerbi-gateway]: https://learn.microsoft.com/en-us/power-bi/connect-data/service-gateway-onprem
63+
[ref-dax-api]: /product/apis-integrations/dax-api
64+
[ref-integrations-apis]: /product/workspace/integrations#view-api-credentials
65+
[ref-sql-api]: /product/apis-integrations/sql-api
66+
[ref-sls]: /product/apis-integrations/semantic-layer-sync
67+
[ref-kerberos]: /product/auth/methods/kerberos
68+
[ref-ntlm]: /product/auth/methods/ntlm
69+
[ref-ntlm-desktop]: /product/auth/methods/ntlm#power-bi-desktop
70+
[link-powerbi-connection]: https://learn.microsoft.com/en-us/power-bi/connect-data/service-live-connect-dq-datasets
71+
[ref-opdg]: /product/auth/methods/ntlm#configuration
Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
export default {
2-
"superset": "Apache Superset",
3-
"metabase": "Metabase",
4-
"preset": "Preset",
5-
"tableau": "Tableau"
6-
}
2+
"superset": {
3+
title: "Apache Superset",
4+
display: "hidden"
5+
},
6+
"metabase": {
7+
title: "Metabase",
8+
display: "hidden"
9+
},
10+
"preset": {
11+
title: "Preset",
12+
display: "hidden"
13+
},
14+
"tableau": {
15+
title: "Tableau",
16+
display: "hidden"
17+
}
18+
}

docs/content/product/apis-integrations/semantic-layer-sync/index.mdx

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ layer from Cube to BI tools. It's the easiest way to connect a BI tool to Cube.
1010
<SuccessBox>
1111

1212
Semantic Layer Sync is available in Cube Cloud.
13-
<br/>Support for Metabase, Preset, and Superset is available on [all product tiers](https://cube.dev/pricing).
13+
<br/>Support for Preset and Superset is available on [all product tiers](https://cube.dev/pricing).
1414
<br/>Support for Tableau is available on [Enterprise and above](https://cube.dev/pricing) product tiers.
1515

1616
</SuccessBox>
@@ -20,8 +20,6 @@ API][ref-sql-api] and creates or updates BI-specific entities that correspond to
2020
entities within the data model in Cube, e.g., cubes, views, measures,
2121
dimensions.
2222

23-
<Diagram src="https://ucarecdn.com/f598f41c-36ec-4ed9-960f-7c902a77ed74/" />
24-
2523
In general, here's how Cube entities match BI-specific ones:
2624

2725
| Cube | BI tool |
@@ -41,11 +39,6 @@ on configuration and features for specific tools:
4139
imageUrl="https://static.cube.dev/icons/superset.svg"
4240
title="Apache Superset"
4341
/>
44-
<GridItem
45-
url="semantic-layer-sync/metabase"
46-
imageUrl="https://static.cube.dev/icons/metabase.svg"
47-
title="Metabase"
48-
/>
4942
<GridItem
5043
url="semantic-layer-sync/preset"
5144
imageUrl="https://static.cube.dev/icons/preset.svg"
@@ -67,11 +60,8 @@ Currently, it's recommended to use the [DAX API][ref-dax-api].
6760

6861
## Creating syncs
6962

70-
You can create a new sync by navigating to the <Btn>Semantic Layer Sync</Btn>
71-
tab on the <Btn>BI Integrations</Btn> page and clicking <Btn>+ Create
72-
Sync</Btn>.
73-
74-
<Screenshot src="https://ucarecdn.com/d4f4c753-ea8f-459b-aec2-73846da06b41/" />
63+
You can create a new sync by navigating to <Btn>IDE → Integrations</Btn>
64+
and clicking <Btn>+ Create Sync</Btn>.
7565

7666
Follow the steps in the wizard to create a sync with any of supported BI tools.
7767

@@ -170,12 +160,12 @@ def semantic_layer_sync(ctx: dict) -> list[dict]:
170160

171161
return [
172162
{
173-
'type': 'metabase',
174-
'name': f"Metabase Sync for {department}",
163+
'type': 'superset',
164+
'name': f"Superset Sync for {department}",
175165
'config': {
176166
'user': 'mail@example.com',
177167
'password': '4dceae-606a03-93ae6dc7',
178-
'url': 'example.metabaseapp.com',
168+
'url': 'superset.example.com',
179169
'database': f"Cube Cloud: {department}",
180170
}
181171
}
@@ -185,20 +175,20 @@ def semantic_layer_sync(ctx: dict) -> list[dict]:
185175
```javascript
186176
module.exports = {
187177
semanticLayerSync: ({ securityContext }) => {
188-
const department = securityContext.department
178+
const department = securityContext.department
189179

190180
return [
191181
{
192-
type: "metabase",
193-
name: `Metabase Sync for ${department}`,
182+
type: "superset",
183+
name: `Superset Sync for ${department}`,
194184
config: {
195185
user: "mail@example.com",
196186
password: "4dceae-606a03-93ae6dc7",
197-
url: "example.metabaseapp.com",
187+
url: "superset.example.com",
198188
database: `Cube Cloud: ${department}`
199189
}
200190
}
201-
]
191+
]
202192
}
203193
}
204194
```
@@ -372,20 +362,15 @@ can't run syncs on schedule.
372362

373363
### Manually
374364

375-
You can also run a sync manually by navigating to the <Btn>Semantic Layer
376-
Sync</Btn> tab on the <Btn>BI Integrations</Btn> page and clicking <Btn>Start
377-
Sync</Btn> next to a relevant sync. This is convenient for working in the
365+
You can also run a sync manually by navigating to <Btn>IDE → Integrations</Btn>
366+
and clicking <Btn>Start Sync</Btn> next to a relevant sync. This is convenient for working in the
378367
[development mode][ref-dev-mode].
379368

380-
<Screenshot src="https://ucarecdn.com/e48cef02-cc89-466d-a293-11a04aacb116/" />
381-
382369
## Viewing history
383370

384371
You can view the history of runs for a particular sync by navigating to
385-
the <Btn>Semantic Layer Sync</Btn> tab on the <Btn>BI Integrations</Btn> page
386-
and clicking <Btn>Show History</Btn> next to a relevant sync.
387-
388-
<Screenshot src="https://ucarecdn.com/a3cc5fc8-8458-483e-999c-5654eb8072b4/" />
372+
<Btn>IDE → Integrations</Btn> and clicking <Btn>Show History</Btn> next to a
373+
relevant sync.
389374

390375
## Cleaning up
391376

@@ -394,11 +379,6 @@ by clicking on <Btn>...</Btn> of a respective tool and choosing <Btn>Remove sync
394379
assets</Btn>. It would remove the assets synced from the branch you're currently
395380
on, i.e., your development mode branch, shared branch, or main branch.
396381

397-
<Screenshot
398-
highlight="inset(72.5% 0.5% 5% 80% round 10px)"
399-
src="https://ucarecdn.com/10770acd-a358-4b6a-98bc-6eb1bf9c0a81/"
400-
/>
401-
402382

403383
[ref-data-model]: /product/data-modeling/overview
404384
[ref-sql-api]: /product/apis-integrations/sql-api

docs/content/product/apis-integrations/semantic-layer-sync/tableau.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ module.exports = {
9999

100100
When connecting a Cube Cloud data source to your Tableau workbook, you will be prompted
101101
to enter the user name and password for Cube Cloud. You can find them at the&nbsp;<Btn>SQL
102-
API Connection</Btn> tab of the&nbsp;<Btn>BI Integrations</Btn> page in Cube Cloud.
102+
API Connection</Btn> tab on the&nbsp;<Btn>IDE → Integrations</Btn> page in Cube Cloud.
103103

104104
## Features
105105

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
---
2+
---
3+
4+
# Tableau
5+
6+
You can connect [Tableau](https://www.tableau.com) to Cube using
7+
[Semantic Layer Sync][ref-sls]. It will programmatically create and
8+
update Tableau data sources that are connected to Cube via the
9+
[SQL API][ref-sql-api].
10+
11+
<InfoBox>
12+
13+
Semantic Layer Sync with Tableau is available on
14+
[Enterprise and above](https://cube.dev/pricing) product tiers.
15+
16+
</InfoBox>
17+
18+
Semantic Layer Sync works with Tableau Cloud, Tableau Desktop, and Tableau Server.
19+
20+
## Setting up Semantic Layer Sync
21+
22+
You can create a new sync by navigating to <Btn>IDE → Integrations</Btn>
23+
in Cube.
24+
25+
To create a new sync, choose either <Btn>Tableau Cloud</Btn>, <Btn>Tableau Desktop</Btn>,
26+
or <Btn>Tableau Server</Btn>.
27+
28+
For Tableau Cloud and Tableau Server,
29+
the data model is synchronized via the [Tableau API][tableau-api] which uses [personal
30+
access tokens][tableau-pat] for authentication. You can create a new [personal access
31+
token][tableau-api-authentication] on the&nbsp;<Btn>My Account Settings</Btn> page.
32+
33+
<InfoBox>
34+
35+
Personal access tokens might be disabled in your Tableau site configuration.
36+
To enable them, navigate to the&nbsp;<Btn>Settings</Btn> page of your Tableau site
37+
and click&nbsp;<Btn>Enable personal access tokens</Btn>.
38+
39+
By default, personal access tokens are configured with an expiry period of 180 days.
40+
Please check your Tableau site configuration for details. To customize the expiry
41+
period, navigate to the&nbsp;<Btn>Settings</Btn> page of your Tableau site. Please
42+
also make sure to renew your personal access token in time.
43+
44+
</InfoBox>
45+
46+
<WarningBox>
47+
48+
Personal access tokens expire if they are not used after 15 consecutive days.
49+
If they are used more frequently than every 15 days, they expire after one year.
50+
51+
</WarningBox>
52+
53+
You will also need to specify a `region` and a Tableau `site` name. Consider the
54+
following URL of a Tableau site: `https://10ax.online.tableau.com/#/site/cubedev/home`.
55+
In this case, the region would be `10ax` and the site name would be `cubedev`.
56+
57+
Example configuration for Tableau:
58+
59+
<CodeTabs>
60+
61+
```python
62+
from cube import config
63+
64+
@config('semantic_layer_sync')
65+
def semantic_layer_sync(ctx: dict) -> list[dict]:
66+
return [
67+
{
68+
'type': 'tableau',
69+
'name': 'Tableau Sync',
70+
'config': {
71+
'region': '10ax',
72+
'site': 'mytableausite',
73+
'personalAccessToken': 'cube-cloud',
74+
'personalAccessTokenSecret': 'HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4',
75+
'database': 'Cube Cloud: production-deployment',
76+
},
77+
},
78+
]
79+
```
80+
81+
```javascript
82+
module.exports = {
83+
semanticLayerSync: ({ securityContext }) => {
84+
return [
85+
{
86+
type: "tableau",
87+
name: "Tableau Sync",
88+
config: {
89+
region: "10ax",
90+
site: "mytableausite",
91+
personalAccessToken: "cube-cloud",
92+
personalAccessTokenSecret: "HW8TFrBfJyen+JQleh0/bw==:1BvJLIti9Fud04rN021EfHMnh4yYD3p4",
93+
database: "Cube Cloud: production-deployment"
94+
}
95+
}
96+
]
97+
}
98+
}
99+
```
100+
101+
</CodeTabs>
102+
103+
When connecting a Cube Cloud data source to your Tableau workbook, you will be prompted
104+
to enter the user name and password for Cube Cloud. You can find them at the&nbsp;<Btn>SQL
105+
API Connection</Btn> tab on the&nbsp;<Btn>IDE → Integrations</Btn> page in Cube Cloud.
106+
107+
### Tableau Desktop
108+
109+
You can download a Tableau [data source][tds] file by clicking <Btn>Download .tds</Btn>.
110+
In the modal window, select one or more cubes or views and click <Btn>Download
111+
all selected</Btn> to download a ZIP archive with Tableau data source files, one
112+
per cube or view. You can open these files in Tableau to create data sources.
113+
114+
## Authenticating users
115+
116+
Semantic Layer Sync handles authentication automatically. When a user
117+
authenticates from Tableau to Cube, they are matched to a Cube user by
118+
their email address.
119+
120+
For this to work, the same users that access Tableau must also exist in
121+
Cube. If you use an identity provider such as [Microsoft Entra ID][ref-entra]
122+
or [Okta][ref-okta], we recommend using [SCIM][ref-scim] for automated
123+
user provisioning.
124+
125+
You can use [user attributes][ref-user-attributes] and
126+
[user groups][ref-user-groups] in combination with
127+
[data access policies][ref-dap] to control which data each user can access.
128+
129+
[ref-sls]: /product/apis-integrations/semantic-layer-sync
130+
[ref-scim]: /product/administration/sso/microsoft-entra-id/scim
131+
[ref-entra]: /product/administration/sso/microsoft-entra-id
132+
[ref-okta]: /product/administration/sso/okta
133+
[ref-user-attributes]: /product/administration/users-and-permissions/user-attributes
134+
[ref-user-groups]: /product/administration/users-and-permissions/user-groups
135+
[ref-dap]: /product/auth/data-access-policies
136+
[ref-sql-api]: /product/apis-integrations/sql-api
137+
[tds]: https://help.tableau.com/current/pro/desktop/en-us/export_connection.htm
138+
[tableau-api]: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api.htm
139+
[tableau-api-authentication]: https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm#create-personal-access-tokens
140+
[tableau-pat]: https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm

docs/content/product/configuration/_meta.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
export default {
22
"data-sources": "Data sources",
3-
"visualization-tools": "Visualization tools",
3+
"visualization-tools": {
4+
title: "Visualization tools",
5+
display: "hidden"
6+
},
47
"multiple-data-sources": "Multiple data sources",
58
"concurrency": "Concurrency",
69
"multitenancy": "Multitenancy",

0 commit comments

Comments
 (0)