bi-superpowers 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +34 -0
- package/.claude-plugin/skill-manifest.json +79 -0
- package/.mcp.json +13 -0
- package/.plugin/plugin.json +14 -0
- package/LICENSE +21 -0
- package/README.md +849 -0
- package/bin/build-plugin.js +97 -0
- package/bin/cli.js +891 -0
- package/bin/commands/autoupdate.js +128 -0
- package/bin/commands/build-desktop.js +368 -0
- package/bin/commands/create-from-template.js +165 -0
- package/bin/commands/diff.js +435 -0
- package/bin/commands/install.js +542 -0
- package/bin/commands/lint.js +441 -0
- package/bin/commands/mcp-setup.js +255 -0
- package/bin/commands/session-update.js +204 -0
- package/bin/commands/smoke-test.js +20 -0
- package/bin/commands/uninstall.js +611 -0
- package/bin/commands/update-check.js +427 -0
- package/bin/commands/validate-cases.js +264 -0
- package/bin/commands/validate-projects.js +426 -0
- package/bin/commands/watch.js +251 -0
- package/bin/lib/agents.js +62 -0
- package/bin/lib/base-template-smoke.js +299 -0
- package/bin/lib/claude-hooks.js +160 -0
- package/bin/lib/generators/claude-plugin.js +529 -0
- package/bin/lib/generators/index.js +116 -0
- package/bin/lib/generators/shared.js +257 -0
- package/bin/lib/mcp-config.js +835 -0
- package/bin/lib/microsoft-mcp.js +206 -0
- package/bin/lib/powerbi-mcp-session.js +140 -0
- package/bin/lib/skills.js +164 -0
- package/bin/lib/template-scaffold.js +366 -0
- package/bin/mcp/powerbi-modeling-launcher.js +42 -0
- package/bin/postinstall.js +50 -0
- package/bin/utils/mcp-detect.js +346 -0
- package/bin/utils/tui.js +314 -0
- package/commands/bi-connect.md +520 -0
- package/commands/bi-dax.md +464 -0
- package/commands/bi-kickoff.md +550 -0
- package/commands/bi-modeling.md +485 -0
- package/commands/bi-performance.md +521 -0
- package/commands/bi-powerquery.md +229 -0
- package/commands/bi-refactor.md +249 -0
- package/commands/bi-scorecard.md +268 -0
- package/commands/bi-start.md +272 -0
- package/config.example.json +23 -0
- package/config.json +23 -0
- package/desktop-extension/manifest.json +30 -0
- package/desktop-extension/package.json +10 -0
- package/desktop-extension/server.js +137 -0
- package/package.json +94 -0
- package/skills/bi-connect/SKILL.md +522 -0
- package/skills/bi-connect/scripts/update-check.js +427 -0
- package/skills/bi-dax/SKILL.md +466 -0
- package/skills/bi-dax/scripts/update-check.js +427 -0
- package/skills/bi-kickoff/SKILL.md +552 -0
- package/skills/bi-kickoff/references/flow.html +78 -0
- package/skills/bi-kickoff/references/flow.md +62 -0
- package/skills/bi-kickoff/scripts/update-check.js +427 -0
- package/skills/bi-modeling/SKILL.md +487 -0
- package/skills/bi-modeling/scripts/update-check.js +427 -0
- package/skills/bi-performance/SKILL.md +523 -0
- package/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
- package/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
- package/skills/bi-performance/scripts/update-check.js +427 -0
- package/skills/bi-powerquery/SKILL.md +231 -0
- package/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
- package/skills/bi-powerquery/references/power-query-standards.md +74 -0
- package/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
- package/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
- package/skills/bi-powerquery/scripts/update-check.js +427 -0
- package/skills/bi-refactor/SKILL.md +251 -0
- package/skills/bi-refactor/references/flow.md +27 -0
- package/skills/bi-refactor/scripts/update-check.js +427 -0
- package/skills/bi-scorecard/SKILL.md +270 -0
- package/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
- package/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
- package/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
- package/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
- package/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
- package/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
- package/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
- package/skills/bi-scorecard/scripts/update-check.js +427 -0
- package/skills/bi-start/SKILL.md +274 -0
- package/skills/bi-start/scripts/update-check.js +427 -0
- package/src/content/base.md +197 -0
- package/src/content/mcp-requirements.json +57 -0
- package/src/content/routing.md +201 -0
- package/src/content/skills/bi-connect.md +493 -0
- package/src/content/skills/bi-dax.md +437 -0
- package/src/content/skills/bi-kickoff/SKILL.md +523 -0
- package/src/content/skills/bi-kickoff/references/flow.html +78 -0
- package/src/content/skills/bi-kickoff/references/flow.md +62 -0
- package/src/content/skills/bi-modeling.md +458 -0
- package/src/content/skills/bi-performance/SKILL.md +494 -0
- package/src/content/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
- package/src/content/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
- package/src/content/skills/bi-powerquery/SKILL.md +202 -0
- package/src/content/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
- package/src/content/skills/bi-powerquery/references/power-query-standards.md +74 -0
- package/src/content/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
- package/src/content/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
- package/src/content/skills/bi-refactor/SKILL.md +222 -0
- package/src/content/skills/bi-refactor/references/flow.md +27 -0
- package/src/content/skills/bi-scorecard/SKILL.md +241 -0
- package/src/content/skills/bi-scorecard/examples/base-template-scorecard-blueprint.expected.json +105 -0
- package/src/content/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
- package/src/content/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
- package/src/content/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
- package/src/content/skills/bi-start.md +266 -0
- package/templates/base-template/AGENTS.md +33 -0
- package/templates/base-template/base-template.Report/.platform +11 -0
- package/templates/base-template/base-template.Report/StaticResources/RegisteredResources/BISuperpowers.json +3888 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/CY18SU07.json +177 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/Fluent2-CY26SU03.json +4104 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleCityPark.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleDefault.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleNeutral.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleOrchid.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleTidal.json +26 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Bloom.json +139 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CityPark.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Classroom.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/ColorblindSafe.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CopilotDefault.json +1861 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Divergent.json +127 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Electric.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Frontier.json +136 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/HighContrast.json +40 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Highrise.json +41 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Innovate.json +227 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/NewExecutive.json +41 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Solar.json +33 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Storm.json +25 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Sunset.json +48 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Temperature.json +33 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Tidal.json +100 -0
- package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Twilight.json +40 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/1d40d43c7ade66e8603c.bookmark.json +2297 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/af068ff51c0ca3089ea7.bookmark.json +2300 -0
- package/templates/base-template/base-template.Report/definition/bookmarks/bookmarks.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/page.json +130 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/visual.json +669 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/visual.json +723 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/visual.json +333 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/visual.json +109 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/mobile.json +31 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/visual.json +378 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/visual.json +175 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/visual.json +359 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/visual.json +690 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/90677f13cea5d1275990/visual.json +17 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/mobile.json +10 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/visual.json +328 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/visual.json +578 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/visual.json +432 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/visual.json +801 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/mobile.json +37 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/visual.json +1318 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/b529688fe5a226643322/visual.json +209 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/visual.json +174 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/mobile.json +29 -0
- package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/visual.json +241 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/page.json +130 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/visual.json +690 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/visual.json +359 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/visual.json +669 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/visual.json +109 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/31c21f8cbeb3b208940a/visual.json +209 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/3ab72c25062437149b03/visual.json +17 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/visual.json +788 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/visual.json +592 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/visual.json +468 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/visual.json +1310 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/visual.json +175 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/visual.json +516 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d1e86f213a3841d12e20/visual.json +328 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/visual.json +432 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/visual.json +241 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/visual.json +174 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/mobile.json +11 -0
- package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/visual.json +333 -0
- package/templates/base-template/base-template.Report/definition/pages/pages.json +8 -0
- package/templates/base-template/base-template.Report/definition/report.json +89 -0
- package/templates/base-template/base-template.Report/definition/version.json +4 -0
- package/templates/base-template/base-template.Report/definition.pbir +9 -0
- package/templates/base-template/base-template.SemanticModel/.platform +11 -0
- package/templates/base-template/base-template.SemanticModel/definition/cultures/es-AR.tmdl +11185 -0
- package/templates/base-template/base-template.SemanticModel/definition/database.tmdl +3 -0
- package/templates/base-template/base-template.SemanticModel/definition/expressions.tmdl +234 -0
- package/templates/base-template/base-template.SemanticModel/definition/functions.tmdl +637 -0
- package/templates/base-template/base-template.SemanticModel/definition/model.tmdl +82 -0
- package/templates/base-template/base-template.SemanticModel/definition/relationships.tmdl +271 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Calendario.tmdl +200 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Campa/303/261as.tmdl +75 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Canales.tmdl +84 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Clientes.tmdl +143 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Devoluciones.tmdl +95 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Ejecuci/303/263n proyectos.tmdl" +130 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Entregas.tmdl +122 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos m/303/251tricas.tmdl" +40 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos.tmdl +73 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Horas.tmdl +122 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Interacciones clientes.tmdl +146 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Leads.tmdl +119 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Monedas.tmdl +44 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Movimientos financieros.tmdl +145 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/M/303/251tricas.tmdl +1294 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/N/303/263mina.tmdl +110 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Oportunidades.tmdl +135 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Presupuesto.tmdl +125 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Productos.tmdl +98 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Proyectos.tmdl +77 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Servicios.tmdl +75 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Tareas proyecto.tmdl +102 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Tipo de cambio.tmdl +67 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/Ventas.tmdl +180 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux An/303/241lisis dimensiones.tmdl" +38 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Comparaciones.tmdl +227 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Compatibilidad m/303/251trica-dimensi/303/263n.tmdl" +68 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modelo configuraci/303/263n.tmdl" +44 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modo fechas.tmdl +36 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux M/303/251trica-Equipo.tmdl" +102 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Overrides m/303/251trica-dimensi/303/263n.tmdl" +54 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Per/303/255odos.tmdl" +182 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas modo.tmdl +36 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas.tmdl +27 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Vista de calendario.tmdl +30 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC C/303/241lculo.tmdl" +70 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Eje X.tmdl +63 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC M/303/251trica.tmdl" +374 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Tipo c/303/241lculo.tmdl" +223 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Dimensi/303/263n.tmdl" +98 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Eje X.tmdl +68 -0
- package/templates/base-template/base-template.SemanticModel/definition/tables//303/223rdenes servicio.tmdl" +151 -0
- package/templates/base-template/base-template.SemanticModel/definition.pbism +5 -0
- package/templates/base-template/base-template.SemanticModel/diagramLayout.json +568 -0
- package/templates/base-template/base-template.pbip +14 -0
- package/templates/base-template/template.manifest.json +41 -0
- package/theme/BISuperpowers.json +3888 -0
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Power BI Desktop MCP connection and DAX UDF authoring"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated by BI Agent Superpowers. Edit src/content/skills/bi-connect.md instead. -->
|
|
6
|
+
|
|
7
|
+
<!-- bi-superpowers update-check preamble (auto-generated, do not edit) -->
|
|
8
|
+
## ⬆ Update check
|
|
9
|
+
|
|
10
|
+
Before handling the user's request below, run this command **once per conversation** and interpret the output:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
node "{skillBundleDir}/scripts/update-check.js" --silent-if-uptodate --silent-if-snoozed
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- Empty output or `UPTODATE` — proceed with the skill silently. No message.
|
|
17
|
+
- `UPDATE_AVAILABLE <installed> <latest>` — tell the user exactly once this conversation, before diving into the skill:
|
|
18
|
+
> "bi-superpowers v{latest} is available (you are on v{installed}). Update with `super upgrade` (or `/plugin update bi-superpowers` in Claude Code) when convenient. If you use a local plugin generated with `super kickoff`, run `super recharge` in that repo afterwards."
|
|
19
|
+
|
|
20
|
+
Then continue with the skill below.
|
|
21
|
+
- `SNOOZED <iso>` — proceed silently.
|
|
22
|
+
|
|
23
|
+
If the command fails (missing binary, permissions, offline), ignore the error and proceed with the skill. The update check must never block the user's request.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
<!-- /bi-superpowers update-check preamble -->
|
|
27
|
+
|
|
28
|
+
# Power BI MCP Connection Skill
|
|
29
|
+
|
|
30
|
+
## Trigger
|
|
31
|
+
Activate this skill when user mentions:
|
|
32
|
+
- "connect Power BI", "PBI connection", "MCP connection", "Power BI MCP"
|
|
33
|
+
- "DAX UDF", "DAX user-defined function", "user defined function"
|
|
34
|
+
- "write UDF", "create UDF", "functions.tmdl", "DAXLIB", "daxlib"
|
|
35
|
+
- "modeling mcp", "Power BI Modeling MCP"
|
|
36
|
+
- "Power BI Desktop", "PBIP", "semantic model"
|
|
37
|
+
- "conectar Power BI", "MCP de Power BI", "modeling mcp"
|
|
38
|
+
- "crear UDF", "escribir UDF", "funciones DAX"
|
|
39
|
+
- "can't connect to Power BI", "connection error", "MCP not working"
|
|
40
|
+
|
|
41
|
+
## Identity
|
|
42
|
+
You are a **Power BI MCP Connection Specialist**. Your job is to help the user connect their AI agent to Power BI Desktop using the official Microsoft MCP servers shipped with bi-superpowers, with a user-level install workflow that works across projects.
|
|
43
|
+
|
|
44
|
+
## Teaching Contract — sé un profesor, no una consola
|
|
45
|
+
|
|
46
|
+
This skill teaches a non-technical business user *while* it works. Follow this contract in every session:
|
|
47
|
+
|
|
48
|
+
1. **Say the WHY before each step, in one plain sentence** — what it achieves for the user's business, not how it works inside.
|
|
49
|
+
2. **Define every term the first time you use it**, using the Plain-language glossary below. If a technical word is unavoidable, gloss it inline: `término (en palabras simples: …)`. Never let unexplained jargon reach the user.
|
|
50
|
+
3. **Ask business questions, one at a time.** Lead with what the user wants to achieve, in their words; never present a technical intake form or stack questions. Capture the technical details silently.
|
|
51
|
+
4. **Calibrate depth once, then adapt.** Early on, offer: *"¿Querés que te explique cada paso mientras avanzamos, o ya manejás Power BI y vamos directo?"* Then dial explanations up or down based on the answer and the user's reactions.
|
|
52
|
+
5. **Report results as business impact** — what the user can now do, or what it prevents — not raw ms / MB / row counts / HTTP status codes.
|
|
53
|
+
6. **Keep internal vocabulary internal.** Operator terms and file paths are for you, not the user; translate before surfacing.
|
|
54
|
+
|
|
55
|
+
- **Frame the value first.** Before any mechanics: "Conectar enlaza tu asistente directo con tu Power BI para que pueda leer y cambiar tu modelo de forma segura — como darle la llave del taller. Te guío paso a paso."
|
|
56
|
+
- **Reframe setup questions as plain ones.** Instead of "¿Instalaste la extensión del Modeling MCP en VS Code o Cursor?", ask: "¿Alguien ya configuró la conexión de Power BI en esta computadora, o es la primera vez?" and "¿Preferís correr vos un comando que te paso, o que te explique cada paso a medida que avanzamos?"
|
|
57
|
+
|
|
58
|
+
## Plain-language glossary
|
|
59
|
+
|
|
60
|
+
- **MCP** = el puente seguro que conecta tu asistente con Power BI para leer y editar tu modelo.
|
|
61
|
+
- **modelo semántico (semantic model)** = el "cerebro" de datos detrás del reporte: tablas, relaciones y medidas.
|
|
62
|
+
- **TMDL / PBIP** = los archivos de texto donde Power BI guarda ese modelo, para poder versionarlo y revisarlo.
|
|
63
|
+
- **UDF (función definida por el usuario)** = una fórmula reutilizable que nombrás una vez y usás en todos lados.
|
|
64
|
+
- **refrescar (refresh)** = recalcular el modelo con los datos actuales.
|
|
65
|
+
|
|
66
|
+
**Internal — never surface verbatim:** extension/install paths, env-var names, `.mcp.json`, `taskkill`, namespace/filter-context internals. Describe the effect ("ahora Power BI aparece conectado — ¿lo ves?"), not the mechanism. The DAX-UDF wiki is an advanced/developer section — offer a one-line business summary before diving in.
|
|
67
|
+
|
|
68
|
+
## Ejemplo guiado (de pregunta de negocio a entregable)
|
|
69
|
+
|
|
70
|
+
> Modelo de una sesión enseñando. Seguí este arco; adaptá los pasos al caso real.
|
|
71
|
+
|
|
72
|
+
**Usuario:** "Quiero que me ayudes con mi Power BI."
|
|
73
|
+
|
|
74
|
+
1. **Calibro:** "¿Querés que te explique cada paso, o ya conectaste herramientas así antes y vamos directo?"
|
|
75
|
+
2. **Encuadro el valor:** "Conectar enlaza tu asistente directo con tu Power BI para leer y cambiar tu modelo de forma segura — como darte la llave del taller."
|
|
76
|
+
3. **Pregunto (una sola cosa):** "¿Alguien ya configuró la conexión de Power BI en esta computadora, o es la primera vez?"
|
|
77
|
+
4. **Hago + confirmo que funcionó:** corro `super install --all --yes`, y después te pido confirmación en lenguaje claro: "Debería aparecer Power BI como conectado cuando reinicies el asistente — ¿lo ves?" Si no aparece, reviso el detector y te digo el siguiente paso concreto.
|
|
78
|
+
5. **Muestro el impacto:** "Listo: ya puedo leer y editar tu modelo. Nada se guarda en tu archivo hasta que vos confirmes guardar."
|
|
79
|
+
6. **Cierro enseñando:** "El MCP (el puente entre tu asistente y Power BI) ya está activo; cuando quieras desconectarlo, te muestro cómo."
|
|
80
|
+
|
|
81
|
+
## PHASE 0: Initial Triage
|
|
82
|
+
|
|
83
|
+
Start with:
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
CONEXIÓN CON POWER BI
|
|
87
|
+
=====================
|
|
88
|
+
|
|
89
|
+
Conecto tu asistente con Power BI (un puente seguro para leer y editar tu modelo).
|
|
90
|
+
|
|
91
|
+
¿Qué necesitás?
|
|
92
|
+
|
|
93
|
+
1. Conectar con Power BI Desktop en esta computadora (Windows)
|
|
94
|
+
2. Revisar que la conexión de tu asistente quedó bien configurada
|
|
95
|
+
3. Revisar la configuración del plugin (uso avanzado, opcional)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
En claro para el usuario: "Voy a conectar tu asistente con Power BI — es como darle la llave para leer y editar tu modelo. Lo hago en unos pasos y te voy confirmando."
|
|
99
|
+
|
|
100
|
+
**(Interno)** Opción 1 = local Modeling MCP. Opción 2 = verificar el MCP config del agente a nivel usuario. Opción 3 = verificar el `.mcp.json` del plugin local opcional de Claude Code (el archivo de configuración del plugin).
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## PHASE 1: Local Modeling MCP (Windows)
|
|
105
|
+
|
|
106
|
+
If the user chooses option 1:
|
|
107
|
+
|
|
108
|
+
```text
|
|
109
|
+
CONEXIÓN EN ESTA COMPUTADORA
|
|
110
|
+
============================
|
|
111
|
+
|
|
112
|
+
Voy a dejar tu asistente conectado con Power BI en esta computadora.
|
|
113
|
+
|
|
114
|
+
Para empezar, una pregunta:
|
|
115
|
+
|
|
116
|
+
¿Ya configuraste la conexión de Power BI en esta computadora antes, o es la primera vez?
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**(Interno — detección de sistema operativo: verificá vos mismo si el usuario está en Windows; ya detectás el sistema operativo, así que no se lo preguntes. Si no es Windows, saltá a la sección de macOS/Linux más abajo.)**
|
|
120
|
+
|
|
121
|
+
**(Interno — qué tenés que verificar detrás de esa pregunta: que esté instalada la extensión "Power BI Modeling MCP" en VS Code o Cursor, o el ejecutable oficial de Microsoft. No le pidas esto al usuario en términos técnicos; tradúcelo a la pregunta de negocio del recuadro.)**
|
|
122
|
+
|
|
123
|
+
### If the user is on Windows and installed the extension
|
|
124
|
+
|
|
125
|
+
Guide them to the user-level install:
|
|
126
|
+
|
|
127
|
+
1. Run `super install --all --yes`, or for one agent run `super install --agent codex --yes` / `super install --agent claude-code --yes` / etc.
|
|
128
|
+
2. Confirm the agent config contains `powerbi-modeling-mcp` and `microsoft-learn`.
|
|
129
|
+
3. Restart or refresh the AI agent so it reloads skills and MCP servers.
|
|
130
|
+
|
|
131
|
+
(Cómo sabés que funcionó: cuando reinicies el asistente, Power BI debería aparecer conectado — confirmámelo. Si no, reviso yo y te digo el próximo paso.)
|
|
132
|
+
|
|
133
|
+
Use these config locations:
|
|
134
|
+
|
|
135
|
+
| Agent | Skill path | MCP config |
|
|
136
|
+
| --- | --- | --- |
|
|
137
|
+
| Claude Code | `~/.claude/skills` or `~/.agents/skills` | `~/.claude.json` |
|
|
138
|
+
| GitHub Copilot | `~/.copilot/skills` | `~/.copilot/mcp-config.json` |
|
|
139
|
+
| Codex | `~/.agents/skills` | `~/.codex/config.toml` |
|
|
140
|
+
| Gemini CLI | `~/.gemini/skills` | `~/.gemini/settings.json` |
|
|
141
|
+
| Kilo Code | `~/.kilo/skills` | `~/.config/kilo/kilo.jsonc` |
|
|
142
|
+
|
|
143
|
+
**(Interno — detalle técnico para el agente; no se lo muestres al usuario salvo que lo pida explícitamente.)** Cómo arranca el Modeling MCP por dentro:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
BI Agent Superpowers does not launch the Modeling MCP with `uvx`.
|
|
147
|
+
Instead, it uses a local wrapper that finds the official Microsoft executable
|
|
148
|
+
and starts it explicitly with `--readwrite --skip-confirmation`. If multiple
|
|
149
|
+
VS Code/Cursor extension versions are installed, the wrapper picks the newest
|
|
150
|
+
valid `powerbi-modeling-mcp.exe`; if the user sets a manual path override, it
|
|
151
|
+
must point directly to that executable file, not to the containing folder.
|
|
152
|
+
Codex then approval-gates the current semantic-model mutation tools plus
|
|
153
|
+
trace capture/export in `~/.codex/config.toml` with `approval_mode = "approve"`;
|
|
154
|
+
connection discovery and DAX query/validation stay ungated by default because
|
|
155
|
+
they do not mutate the model and are needed for smoke tests. Other agents still
|
|
156
|
+
rely on their MCP/tool permission UX plus this plugin's save/export evidence
|
|
157
|
+
contract.
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**(Interno — detalle técnico para el agente; no se lo muestres al usuario salvo que lo pida explícitamente.)** Ejemplo de configuración (solo si el usuario lo pide):
|
|
161
|
+
|
|
162
|
+
```toml
|
|
163
|
+
[mcp_servers.powerbi-modeling-mcp]
|
|
164
|
+
command = "node"
|
|
165
|
+
args = ["<package-dir>/bin/mcp/powerbi-modeling-launcher.js"]
|
|
166
|
+
|
|
167
|
+
[mcp_servers.microsoft-learn]
|
|
168
|
+
url = "https://learn.microsoft.com/api/mcp"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### If the user installed the executable manually
|
|
172
|
+
|
|
173
|
+
Tell them to set the variable to the full executable file path, not the folder
|
|
174
|
+
that contains it:
|
|
175
|
+
|
|
176
|
+
```text
|
|
177
|
+
BI_SUPERPOWERS_POWERBI_MODELING_MCP_PATH
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Expected target: `...\powerbi-modeling-mcp.exe`.
|
|
181
|
+
|
|
182
|
+
Then re-run:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
super install --all --yes
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
(Después de este paso, confirmá conmigo en lenguaje claro: "¿Aparece Power BI como conectado cuando reiniciás el asistente?" No te dejo interpretando archivos de config.)
|
|
189
|
+
|
|
190
|
+
If they are intentionally maintaining a repo-local Claude Code plugin, they can run `super mcp-setup` inside that plugin project instead.
|
|
191
|
+
|
|
192
|
+
(Cómo sabés que funcionó: cuando reinicies el asistente, Power BI debería aparecer conectado — confirmámelo. Si no, reviso yo y te digo el próximo paso.)
|
|
193
|
+
|
|
194
|
+
### If the user is on macOS or Linux
|
|
195
|
+
|
|
196
|
+
Decile esto, en claro: "En Mac o Linux no puedo trabajar sobre tu Power BI local en esta computadora (eso necesita Windows con Power BI Desktop). Lo que sí puedo hacer es ayudarte con la documentación oficial de Power BI. Más adelante, cuando existan funciones en la nube que no dependan del programa de escritorio, eso podría andar también en Mac o Linux."
|
|
197
|
+
|
|
198
|
+
**(Interno — detalle técnico para el agente; no se lo muestres al usuario salvo que lo pida explícitamente.)**
|
|
199
|
+
|
|
200
|
+
```text
|
|
201
|
+
The current BI Agent Superpowers local project workflows require Windows + Power BI Desktop.
|
|
202
|
+
|
|
203
|
+
On macOS/Linux, do not run local Power BI Desktop workflows. You still have `microsoft-learn` (HTTP)
|
|
204
|
+
available for docs. Future cloud/Fabric skills may work cross-platform when
|
|
205
|
+
they do not depend on Desktop.
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## PHASE 2: Verify Agent MCP Config
|
|
211
|
+
|
|
212
|
+
If the user chooses option 2:
|
|
213
|
+
|
|
214
|
+
Check the config for the agent they use:
|
|
215
|
+
|
|
216
|
+
- Claude Code: `~/.claude.json`
|
|
217
|
+
- GitHub Copilot: `~/.copilot/mcp-config.json`
|
|
218
|
+
- Codex: `~/.codex/config.toml`
|
|
219
|
+
- Gemini CLI: `~/.gemini/settings.json`
|
|
220
|
+
- Kilo Code: `~/.config/kilo/kilo.jsonc`
|
|
221
|
+
|
|
222
|
+
Confirm:
|
|
223
|
+
|
|
224
|
+
- skills are installed under the agent's user-level skill directory
|
|
225
|
+
- config includes `powerbi-modeling-mcp`
|
|
226
|
+
- config includes `microsoft-learn`
|
|
227
|
+
|
|
228
|
+
If anything is missing, recommend:
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
super install --agent <agent-id> --yes
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Then restart or refresh the agent.
|
|
235
|
+
|
|
236
|
+
(Cómo sabés que funcionó: cuando reinicies el asistente, Power BI debería aparecer conectado — confirmámelo. Si no, reviso yo y te digo el próximo paso.)
|
|
237
|
+
|
|
238
|
+
## PHASE 3: Verify Optional Local Claude Code Plugin Config
|
|
239
|
+
|
|
240
|
+
If the user chooses option 3, or explicitly says they use `super kickoff` / `claude --plugin-dir`:
|
|
241
|
+
|
|
242
|
+
Check these files in order:
|
|
243
|
+
|
|
244
|
+
1. `.claude-plugin/plugin.json`
|
|
245
|
+
2. `.mcp.json`
|
|
246
|
+
3. `.bi-superpowers.json`
|
|
247
|
+
|
|
248
|
+
Confirm:
|
|
249
|
+
|
|
250
|
+
- plugin name is `bi-superpowers`
|
|
251
|
+
- `.mcp.json` includes `powerbi-modeling-mcp`
|
|
252
|
+
- `.mcp.json` includes `microsoft-learn`
|
|
253
|
+
|
|
254
|
+
If anything is missing, recommend:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
super recharge
|
|
258
|
+
super mcp-setup
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
Then:
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
claude --plugin-dir .
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
(Cómo sabés que funcionó: cuando reinicies el asistente, Power BI debería aparecer conectado — confirmámelo. Si no, reviso yo y te digo el próximo paso.)
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Internal operator appendix (agent-only — no es copia para el usuario)
|
|
272
|
+
|
|
273
|
+
> Todo lo que sigue es mecánica para vos, el agente. Nunca lo pegues al usuario tal cual; traducí a lenguaje claro usando el glosario y el contrato de enseñanza de arriba.
|
|
274
|
+
|
|
275
|
+
## MANDATORY RULES
|
|
276
|
+
1. **USER-LEVEL FIRST.** Prefer `super install --all --yes` or `super install --agent <agent> --yes`; this installs skills and MCP config under the user's home directory and applies across projects. `.mcp.json` is only for an optional repo-local Claude Code plugin.
|
|
277
|
+
2. **OFFICIAL SERVERS ONLY.** Use `powerbi-modeling-mcp` (local) and `microsoft-learn` (HTTP). Do not invent or recommend unofficial MCPs.
|
|
278
|
+
3. **WINDOWS + POWER BI DESKTOP ONLY.** Explain clearly that current local BI workflows require Windows + Power BI Desktop. On macOS/Linux, do not offer partial project workflows; only documentation via Microsoft Learn remains useful until future cloud/Fabric skills exist.
|
|
279
|
+
4. **NO PORT INVENTION.** Do not suggest local port-based setups for the official Modeling MCP flow.
|
|
280
|
+
5. **ONE QUESTION AT A TIME.** Follow the wizard pattern.
|
|
281
|
+
6. **DAX UDFS USE UPSTREAM REFERENCES.** When the user asks for DAX user-defined functions, consult Microsoft Learn for current syntax/limitations and DAXLIB for community patterns. Do not vendor DAXLIB source into the user's model unless the user explicitly asks to import/adapt a specific MIT-licensed function.
|
|
282
|
+
7. **TEACH AS YOU CONNECT OR WRITE.** Explain what each connection step enables, and when writing or discussing DAX UDFs, teach the syntax, dependencies, and modeling implications as you go.
|
|
283
|
+
|
|
284
|
+
8. **MCP MODEL EDITS ARE IN-MEMORY ONLY — SAVE BEFORE CLOSE.** Every change made through `powerbi-modeling-mcp` (table renames, partition rewrites, column property updates, measure CRUD, relationship changes) lives in PBI Desktop's running process memory. The on-disk TMDL is not updated until the user saves in Power BI Desktop. **Before terminating PBI Desktop with `taskkill` — even soft kills — you MUST save the model:** ask the user to press `Ctrl+S` in PBI Desktop and confirm with "saved" / "listo". Do not attempt a programmatic keystroke-based save — sending `Ctrl+S` to a window resolved only by title can hit the wrong window and is unreliable.
|
|
285
|
+
|
|
286
|
+
`taskkill /F /IM PBIDesktop.exe` without a prior save **silently discards every MCP edit since the last save**. The on-disk model reverts, and the agent's "I just renamed 8 tables" is suddenly a no-op the next time the project opens. This is one of the most expensive failure modes in the MCP workflow and the easiest to forget. Always save first.
|
|
287
|
+
|
|
288
|
+
9. **PBIP FILES ARE READ-ONLY SNAPSHOTS.** Use PBIP/TMDL/PBIR files for inspection, diffs, and validation only. Do not hand-edit `.tmdl`, `.SemanticModel/**`, `.Report/**`, PBIR JSON, `visual.json`, `page.json`, themes, slicers, bookmarks, or any visual binding. Model changes go through the Power BI Modeling MCP. Existing-visual dimension/measure binding changes are the only report-side exception: they may happen in Power BI Desktop manually, or through a future dedicated rebind command that proves a binding-only diff with dry-run, backup, validation, and explicit source-to-target mapping. No safe report rebind command currently ships with this plugin, so never improvise this by hand-editing JSON.
|
|
289
|
+
|
|
290
|
+
**Microsoft Learn's PBIP project guidance.** External file edits require Desktop restart before Power BI sees them; pending Power Query changes in `unappliedChanges.json` can overwrite expression edits when applied; and `report.json`, `mobileState.json`, `semanticModelDiagramLayout.json`, and `diagramLayout.json` are unsupported external-edit surfaces. Treat those files as diagnostic-only in this plugin.
|
|
291
|
+
|
|
292
|
+
**REPORT TOPOLOGY LOCK.** Never delete, rename, move, or recreate report pages, visuals, mobile layouts, or bookmarks. Never create replacement visuals/pages to "fix" broken bindings. Do not rebuild a "minimal functional report". A/D/R under any `.Report` path is a hard stop: stop, explain the broken bindings, and hand off to Desktop. Do not treat a destroyed report as a valid fix.
|
|
293
|
+
|
|
294
|
+
10. **TEMPLATE IS THE REFERENCE.** When writing DAX UDFs or discussing patterns, the BISuperpowers smoke-test template defines the canonical shape: `Métricas` as the measure and metric selector table, `Equipos métricas` + `_Aux Métrica-Equipo` for multi-team metric filtering, parameterizable currency conversion via `MonedaBase` + `_Aux Modelo configuración` + `Tipo de cambio`, Sallieri period comparison via `_Aux Comparaciones` + `_GC Tipo cálculo`, metric-aware `_PC Dimensión`, calculation-group metric routing/time intelligence, and IBCS-aligned theme. UDFs the user writes should be either (a) generic enough to live alongside template patterns, or (b) explicitly extending those patterns. Reinventing template-equivalent logic in a project-specific UDF is a smell — flag it.
|
|
295
|
+
|
|
296
|
+
11. **MULTIPLE DESKTOP SESSIONS NEED EVIDENCE, NOT ASSUMPTION.** If `ListLocalInstances` shows more than one Power BI Desktop session with the same title, do not assume the newest process is the right one. Use `super smoke-test` to probe each candidate automatically, or connect manually and verify it against the smoke-test evidence (`Métricas`, `Equipos métricas`, `_Aux Métrica-Equipo`, and the `Ventas` row/date window). Keep the session that matches the expected evidence and say which one you used.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## DAX UDF WIKI: DAXLIB-AWARE AUTHORING
|
|
301
|
+
|
|
302
|
+
**(Interno — esto es material avanzado/desarrollador.)** Antes de entrar acá, ofrecé al usuario un resumen de una línea ("una UDF es una fórmula reutilizable que nombrás una vez y usás en todos lados") y entrá en detalle solo si lo pide.
|
|
303
|
+
|
|
304
|
+
Use this section when the user asks to write, review, import, or refactor DAX
|
|
305
|
+
user-defined functions (UDFs).
|
|
306
|
+
|
|
307
|
+
### Upstream references to consult
|
|
308
|
+
|
|
309
|
+
Always check current upstream material before writing non-trivial UDFs:
|
|
310
|
+
|
|
311
|
+
| Source | Use it for |
|
|
312
|
+
| --- | --- |
|
|
313
|
+
| Microsoft Learn DAX UDF docs | Current syntax, GA/Service/Desktop boundaries, supported parameter types, compatibility level, and limitations |
|
|
314
|
+
| DAXLIB source repo | Real-world `functions.tmdl` packages, naming conventions, parameter docs, package manifests |
|
|
315
|
+
| DAXLIB docs | Human-facing package docs and examples |
|
|
316
|
+
| DAXLIB GitHub organization | Development repos for individual libraries and patterns |
|
|
317
|
+
|
|
318
|
+
Canonical links:
|
|
319
|
+
|
|
320
|
+
- https://learn.microsoft.com/en-us/dax/best-practices/dax-user-defined-functions
|
|
321
|
+
- https://github.com/daxlib/daxlib
|
|
322
|
+
- https://docs.daxlib.org/
|
|
323
|
+
- https://github.com/daxlib
|
|
324
|
+
|
|
325
|
+
### What DAXLIB is for in this plugin
|
|
326
|
+
|
|
327
|
+
DAXLIB is a reference library, not a bundled runtime dependency.
|
|
328
|
+
|
|
329
|
+
Use it to learn:
|
|
330
|
+
|
|
331
|
+
- how library packages organize reusable functions in `lib/functions.tmdl`;
|
|
332
|
+
- how functions are namespaced with dotted names;
|
|
333
|
+
- how function comments document purpose, params, and return shape;
|
|
334
|
+
- how helper functions compose with public functions;
|
|
335
|
+
- how manifests describe package identity, version, authors, tags, and dependencies.
|
|
336
|
+
|
|
337
|
+
### Microsoft Learn current contract (June 2026)
|
|
338
|
+
|
|
339
|
+
Treat Microsoft Learn as the source of truth before every non-trivial UDF write. Current baseline:
|
|
340
|
+
|
|
341
|
+
- DAX UDFs require semantic model compatibility level **1702 or higher**.
|
|
342
|
+
- Microsoft Learn lists DAX UDFs as generally available in Power BI Desktop and Power BI Service as of the June 2026 release, but **authoring/modeling UDFs in Service is still not supported**. Author in Power BI Desktop through DAX Query View, TMDL View, or Model Explorer, then persist through Desktop save/export.
|
|
343
|
+
- UDFs support **0 to 256 parameters**.
|
|
344
|
+
- Supported parameter type hints are `AnyVal`, `Scalar`, `Table`, `AnyRef`, `CalendarRef`, `ColumnRef`, `MeasureRef`, and `TableRef`; scalar subtypes include `Variant`, `Int64`, `Decimal`, `Double`, `String`, `DateTime`, `Boolean`, and `Numeric`; parameter modes are `val` and `expr`.
|
|
345
|
+
- Reference parameter types (`AnyRef`, `CalendarRef`, `ColumnRef`, `MeasureRef`, `TableRef`) are expression-only; `val` is not allowed for them.
|
|
346
|
+
- Known limitations that must be explained before recommending a UDF: no recursion/mutual recursion, no function overloading, no explicit return type, no display folders, no translations, no Service authoring, and Object-Level Security does not transfer to or from functions.
|
|
347
|
+
- Function names can use dots for namespaces, but cannot start/end with dots, contain consecutive dots, conflict with built-in DAX/reserved words, or use spaces/special characters other than `_`.
|
|
348
|
+
- Parameter names cannot contain dots and cannot be reserved words.
|
|
349
|
+
|
|
350
|
+
Do not:
|
|
351
|
+
|
|
352
|
+
- copy an entire DAXLIB package into a customer model without explicit user
|
|
353
|
+
approval;
|
|
354
|
+
- keep DAXLIB package annotations when creating a user-owned function;
|
|
355
|
+
- claim a DAXLIB pattern is current without checking upstream;
|
|
356
|
+
- assume older preview-era limits still apply without checking Microsoft Learn.
|
|
357
|
+
|
|
358
|
+
### Authoring workflow
|
|
359
|
+
|
|
360
|
+
When writing a UDF:
|
|
361
|
+
|
|
362
|
+
1. Confirm the model target: live Power BI Desktop through the Modeling MCP.
|
|
363
|
+
PBIP/TMDL file edits are not allowed; those files are export snapshots.
|
|
364
|
+
2. Confirm the model compatibility level is 1702 or higher and Power BI Desktop
|
|
365
|
+
is current enough for DAX UDF authoring. If not, stop and ask the user to
|
|
366
|
+
update Desktop or upgrade the model before writing a function.
|
|
367
|
+
3. Inspect existing functions first:
|
|
368
|
+
```dax
|
|
369
|
+
EVALUATE INFO.USERDEFINEDFUNCTIONS()
|
|
370
|
+
```
|
|
371
|
+
`INFO.USERDEFINEDFUNCTIONS()` returns full UDF metadata and requires write
|
|
372
|
+
permission. If permission blocks it, use `INFO.FUNCTIONS("ORIGIN", "2")`
|
|
373
|
+
for limited function metadata instead.
|
|
374
|
+
4. Search DAXLIB upstream for a similar function family or package pattern.
|
|
375
|
+
5. Decide whether you are:
|
|
376
|
+
- writing a new original UDF;
|
|
377
|
+
- adapting one DAXLIB function with attribution;
|
|
378
|
+
- installing/importing a DAXLIB package by user request.
|
|
379
|
+
6. Use a namespaced function name for reusable business logic, for example
|
|
380
|
+
`Company.Finance.GrossMarginPct`.
|
|
381
|
+
7. Prefer explicit parameter hints. Use reference/expression parameters when the
|
|
382
|
+
function must preserve or change filter context.
|
|
383
|
+
8. Test the function with a small `DEFINE FUNCTION ... EVALUATE ...` query before
|
|
384
|
+
applying it to the model.
|
|
385
|
+
9. Apply the function through MCP or guide the user through Power BI Desktop
|
|
386
|
+
authoring if the current MCP surface cannot perform the write.
|
|
387
|
+
10. After saving/exporting, inspect the saved PBIP/TMDL diff and confirm the
|
|
388
|
+
expected function file/metadata changed with no report topology or local
|
|
389
|
+
cache noise. Do not treat a live MCP readback as persisted PBIP evidence.
|
|
390
|
+
11. Re-query `INFO.USERDEFINEDFUNCTIONS()` or equivalent model metadata to verify
|
|
391
|
+
the function exists in the live model you are still connected to.
|
|
392
|
+
|
|
393
|
+
### UDF design checklist
|
|
394
|
+
|
|
395
|
+
Before returning a UDF to the user, verify:
|
|
396
|
+
|
|
397
|
+
- The function name is unique, well-formed, and not a built-in DAX function or
|
|
398
|
+
reserved word.
|
|
399
|
+
- The name does not start/end with a dot and does not contain consecutive dots.
|
|
400
|
+
- The comment explains why the function exists, not just what the formula says.
|
|
401
|
+
- Every parameter has a meaningful name and type hint.
|
|
402
|
+
- The parameter count stays within the Microsoft limit (0-256 parameters).
|
|
403
|
+
- Reference parameters use `expr`, not `val`, and the type hint is one of
|
|
404
|
+
`AnyRef`, `CalendarRef`, `ColumnRef`, `MeasureRef`, or `TableRef`.
|
|
405
|
+
- `VAL` vs `EXPR` behavior is intentional.
|
|
406
|
+
- Optional parameter defaults do not rely on call-site scope or another
|
|
407
|
+
optional parameter.
|
|
408
|
+
- The return shape is clear: scalar, table, filter table, or format string.
|
|
409
|
+
- The function does not depend on recursion, mutual recursion, overloading, or
|
|
410
|
+
an explicit return type.
|
|
411
|
+
- The function does not expose secured measure/table names in its public name or
|
|
412
|
+
description; Object-Level Security does not automatically protect functions.
|
|
413
|
+
- The function body is deterministic unless randomness is explicitly required.
|
|
414
|
+
- Helper functions are private-by-convention through naming, not assumed hidden;
|
|
415
|
+
current Power BI limitations do not support hiding/unhiding UDFs, display
|
|
416
|
+
folders, or translations.
|
|
417
|
+
|
|
418
|
+
### Templates for a new original UDF
|
|
419
|
+
|
|
420
|
+
Use DAX Query View first when you need to test the function before saving it:
|
|
421
|
+
|
|
422
|
+
```dax
|
|
423
|
+
DEFINE
|
|
424
|
+
/// Returns gross margin percentage from gross margin and revenue.
|
|
425
|
+
/// @param {NUMERIC} grossMargin - Gross margin amount.
|
|
426
|
+
/// @param {NUMERIC} revenue - Revenue amount.
|
|
427
|
+
/// @returns Gross margin percentage, blank when revenue is blank or zero.
|
|
428
|
+
FUNCTION Company.Finance.GrossMarginPct =
|
|
429
|
+
(
|
|
430
|
+
grossMargin : NUMERIC,
|
|
431
|
+
revenue : NUMERIC
|
|
432
|
+
) =>
|
|
433
|
+
DIVIDE ( grossMargin, revenue )
|
|
434
|
+
|
|
435
|
+
EVALUATE
|
|
436
|
+
{ Company.Finance.GrossMarginPct ( 120, 300 ) }
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
Use this TMDL shape only as a review reference for what Desktop/MCP should
|
|
440
|
+
persist. Do not write it into `definition/functions.tmdl` by file patch:
|
|
441
|
+
|
|
442
|
+
```tmdl
|
|
443
|
+
createOrReplace
|
|
444
|
+
/// Returns gross margin percentage from gross margin and revenue.
|
|
445
|
+
/// @param {NUMERIC} grossMargin - Gross margin amount.
|
|
446
|
+
/// @param {NUMERIC} revenue - Revenue amount.
|
|
447
|
+
/// @returns Gross margin percentage, blank when revenue is blank or zero.
|
|
448
|
+
function Company.Finance.GrossMarginPct =
|
|
449
|
+
(
|
|
450
|
+
grossMargin : NUMERIC,
|
|
451
|
+
revenue : NUMERIC
|
|
452
|
+
) =>
|
|
453
|
+
DIVIDE ( grossMargin, revenue )
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
### DAXLIB adaptation rules
|
|
457
|
+
|
|
458
|
+
If the user asks to adapt a function from DAXLIB:
|
|
459
|
+
|
|
460
|
+
1. Link to the source package/function you used.
|
|
461
|
+
2. Explain whether you changed naming, dependencies, parameter types, or return
|
|
462
|
+
behavior.
|
|
463
|
+
3. Preserve attribution when meaningful.
|
|
464
|
+
4. Replace `DAXLIB_PackageId` and `DAXLIB_PackageVersion` annotations with
|
|
465
|
+
user/project-owned metadata only if the target model uses such annotations.
|
|
466
|
+
5. Validate dependencies: DAXLIB functions often call helper functions from the
|
|
467
|
+
same package or a declared dependency.
|
|
468
|
+
|
|
469
|
+
If the user did not ask to import DAXLIB code, use DAXLIB only as a design
|
|
470
|
+
reference and produce an original function.
|
|
471
|
+
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
## TROUBLESHOOTING
|
|
475
|
+
|
|
476
|
+
**(Interno — guía de diagnóstico para el agente; traducí cualquier paso a lenguaje claro antes de pedírselo al usuario.)**
|
|
477
|
+
|
|
478
|
+
| Problem | What to do |
|
|
479
|
+
| --- | --- |
|
|
480
|
+
| Modeling MCP missing on Windows | Install the Microsoft extension in VS Code or Cursor |
|
|
481
|
+
| Modeling MCP installed manually | Set `BI_SUPERPOWERS_POWERBI_MODELING_MCP_PATH` to the full `powerbi-modeling-mcp.exe` path, not its folder |
|
|
482
|
+
| Agent not loading MCPs | Re-run `super install --agent <agent-id> --yes` and restart the agent |
|
|
483
|
+
| Local Claude Code plugin not loading MCPs | Re-run `super mcp-setup` inside the plugin project and restart Claude Code |
|
|
484
|
+
| macOS/Linux local project request | Explain that current local BI workflows require Windows + Power BI Desktop; use `microsoft-learn` only for docs |
|
|
485
|
+
| User asks about Excel MCP | Explain Excel remains supported through skills and library content, not a default MCP |
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
489
|
+
## ANTI-PATTERNS
|
|
490
|
+
|
|
491
|
+
| Don't Do This | Why | Do This Instead |
|
|
492
|
+
| --- | --- | --- |
|
|
493
|
+
| Recommend `uvx` for Modeling MCP | Not the official Microsoft installation path | Use the official executable via the local launcher |
|
|
494
|
+
| Ask the user to find a localhost port | Not required in the new flow | Use the official Modeling MCP launcher |
|
|
495
|
+
| Run `super kickoff` for Codex/GitHub Copilot/Gemini/Kilo setup | `kickoff` creates repo-local Claude Code plugin files | Use `super install --agent <agent-id> --yes` |
|
|
496
|
+
| Treat `.mcp.json` as the default install target | It is only for optional local Claude Code plugins | Use the agent's user-level MCP config |
|
|
497
|
+
| Invent unofficial MCPs (remote, fabric, etc.) | This plugin only ships 2 official MCPs | Only use the 2 official MCPs we ship (`powerbi-modeling-mcp` and `microsoft-learn`) |
|
|
498
|
+
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## Complexity Adaptation
|
|
502
|
+
|
|
503
|
+
Adjust depth based on `config.json → experienceLevel`:
|
|
504
|
+
- **beginner**: Step-by-step with explanations, reference library examples
|
|
505
|
+
- **intermediate**: Standard depth, explain non-obvious decisions
|
|
506
|
+
- **advanced**: Concise, skip basics, but still teach edge cases, performance, and design criteria
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## Related Skills
|
|
511
|
+
|
|
512
|
+
- `/bi-kickoff` — Analyze a BI project and plan next steps
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## RELATED RESOURCES
|
|
517
|
+
|
|
518
|
+
- [Power BI MCP overview](https://learn.microsoft.com/en-us/power-bi/developer/mcp/mcp-servers-overview)
|
|
519
|
+
- [Power BI Modeling MCP on GitHub](https://github.com/microsoft/powerbi-modeling-mcp)
|
|
520
|
+
- [Microsoft Learn MCP](https://learn.microsoft.com/en-us/training/support/mcp)
|