dax-optimizer-sdk
v0.2.0
Published
Programmatic DAX Optimizer analysis for Power BI and Analysis Services models
Maintainers
Readme
dax-optimizer-sdk
Programmatic DAX Optimizer analysis for Power BI, Fabric, and Analysis Services models. Exports a model to VPAX format, uploads it to the DAX Optimizer service, and returns structured performance analysis results — all from a single function call.
Prerequisites
| Tool | Purpose | Install |
|------|---------|---------|
| .NET 8.0+ | Runtime for vpax-bridge and DAX Optimizer CLI | Download |
| DAX Optimizer CLI | Uploads VPAX and runs analysis | dotnet tool install --global Dax.Optimizer.CLI |
vpax-bridge (bundled) is built automatically on npm install via dotnet build.
You also need a DAX Optimizer account with a workspace ID.
Authentication
DAX Optimizer auth (for analysis upload)
Three modes — pass an auth object:
// PAT (CI/CD, automation — requires Enterprise license)
auth: { method: 'pat', username: 'group:automation', token: process.env.TOKEN! }
// Interactive (opens browser, credentials cached by CLI)
auth: { method: 'interactive' }
// Group (opens browser, switches to group account)
auth: { method: 'group', username: 'my-team' }Fabric auth (for VPAX export from cloud models)
For Fabric / Power BI Service models, add interactive: true to open a browser for Azure AD sign-in:
interactive: trueOr pass a pre-acquired token:
accessToken: '<bearer-token>'Not needed for local Power BI Desktop models.
Quick start
Local Power BI Desktop
import { analyzeDaxModel } from 'dax-optimizer-sdk'
const result = await analyzeDaxModel({
auth: { method: 'pat', username: 'group:automation', token: process.env.TOKEN! },
server: 'localhost:65072',
databaseId: 'f97515be-bbb7-434b-83fc-b2599bf8a754',
workspaceId: process.env.WORKSPACE_ID!,
modelName: 'My Model',
modelCreate: true,
contractId: '...',
})Fabric / Power BI Service
const result = await analyzeDaxModel({
auth: { method: 'pat', username: 'group:automation', token: process.env.TOKEN! },
server: 'powerbi://api.powerbi.com/v1.0/myorg/My Workspace',
databaseId: 'My Dataset',
interactive: true, // opens browser for Azure AD sign-in
workspaceId: process.env.WORKSPACE_ID!,
modelName: 'My Dataset',
modelCreate: true,
contractId: '...',
})Where do server and databaseId come from?
This library does not include Power BI model discovery. The caller provides the connection details:
- Local PBI Desktop — use Power BI MCP
ListLocalInstances+Connect+database_operations List - Fabric — use the XMLA endpoint URL:
powerbi://api.powerbi.com/v1.0/myorg/<workspace>and the dataset name asdatabaseId
API
analyzeDaxModel(options): Promise<DaxOptimizerResult>
End-to-end: preflight check → VPAX export → analysis → results → cleanup.
checkPrerequisites(): PreflightResult
Returns { dotnet, daxoptimizer, vpaxBridge } booleans.
exportVpax(options): Promise<string>
Exports a model to VPAX. Supports local, Fabric (interactive), and Fabric (token).
runAnalysis(options): Promise<DaxOptimizerResult>
Analyzes an existing VPAX file.
logout(): Promise<void>
Clears cached DAX Optimizer CLI credentials.
isInteractive(auth): boolean
Returns true if the DAX Optimizer auth mode may open a browser.
Error handling
| Error class | When |
|-------------|------|
| AuthError | Invalid auth config or login/logout failure |
| PrerequisiteError | Missing tool (includes install command) |
| VpaxExportError | VPAX export failed |
| AnalysisError | DAX Optimizer CLI failed or results couldn't be parsed |
Known limitations
- Direct Lake models (compat level 1604) are not yet supported by DAX Optimizer
- TMDL/PBIP offline export produces a VPAX without data statistics, which DAX Optimizer rejects
License
MIT
