# Support

## Supported Environments

| | Status |
|---|--------|
| Python 3.10+ | Supported |
| Windows | Primary development platform |
| macOS / Linux | Should work, not regularly tested |
| .pbix files | Fully supported |
| .pbit files | Supported (template format) |

## Feature Stability

### Stable
- PBIX creation from scratch (populated and zero-row tables)
- File open/close/save/repack (auto-backup, force flags)
- Report layout read/write (pages, visuals, filters, positions)
- Visual add/remove (cards, charts, shapes, images, textboxes, slicers)
- DAX measure read/write/evaluate (verified parity: all 435 query-evaluable DAX functions; the other 32 of the engine's 467 are non-evaluable in Desktop itself)
- Calculated table evaluation (DATATABLE, GENERATESERIES, CALENDAR, field parameters)
- Metadata SQL read/write
- Table data read (native VertiPaq decoder)
- VertiPaq table data write (String, Int64, Double, DateTime, Decimal, Boolean)
- ABF archive manipulation (list, extract, replace, build from scratch)
- DataMashup (M code) read/write
- XPress9 DataModel decompress/recompress (byte-exact round-trip)
- Huffman-compressed string dictionaries read/write (MS-XLDM §2.7.4, via `xmhuffman`)
- Row-Level Security read/write/evaluate (binary-splice persistence; roles survive save/reopen, verified on PBI Desktop files)

### Beta
- Calculated column evaluation (per-row DAX; tested with synthetic data only)
- Password extraction from protected dashboards (regex-based, limited test coverage)
- Diagnostic health check (`pbix_doctor`) (implemented, limited test coverage)
- Custom visual import — any `.pbiviz` (embeds by GUID + `publicCustomVisuals`, placed with `pbix_add_visual`)
- HTML / CSS / SVG visuals — bundled "PBIX HTML" visual via `pbix_add_html_visual` / `pbix_get_html_visual` / `pbix_set_html_visual` / `pbix_html_template`, with optional `category_field` cross-filtering (see [docs/html-visuals.md](docs/html-visuals.md))

### Known Limitations
- DAX engine has verified parity on everything tested, not a strict Analysis Services runtime — the residual functions/expression shapes Desktop itself cannot evaluate return `None` with status `"unsupported"` (never guessed); circular references raise `DAXEvaluationError`
- Performance — tables >100K rows trigger a warning; the engine operates on in-memory Python data
- **Creating DirectQuery files** — fully working with SQL Server, PostgreSQL 16, and MySQL 9.6 (via MariaDB adapter)
- **Opening existing DirectQuery files** — layout, measures, and metadata editing work; DAX evaluation and table reads return clear errors since data lives in the remote source
- 1 out of 204 tested measures returns BLANK (requires per-employee RANKX visual row context)

## Bug Reports

Use the [GitHub issue tracker](https://github.com/d0nk3yhm/pbix-mcp/issues).

A good bug report includes:
- Package version (`pip show pbix-mcp`)
- Python version
- OS
- The MCP tool that failed
- Error message or unexpected output
- Whether a public fixture reproduces it

## What Counts as a Bug vs Unsupported

**Bug**: A documented feature produces wrong results or crashes.

**Unsupported**: A DAX function, encoding type, or file variant that is not listed as supported.
If something is unsupported, you'll see a clear error message rather than silent failure.
