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,68 @@
|
|
|
1
|
+
table '_Aux Compatibilidad métrica-dimensión'
|
|
2
|
+
isHidden
|
|
3
|
+
lineageTag: 1b167550-cd88-42c0-ad4f-6536a509588e
|
|
4
|
+
|
|
5
|
+
column Métrica
|
|
6
|
+
lineageTag: 81ae7dfb-0ada-491a-a88a-8d385aa342bd
|
|
7
|
+
isNameInferred
|
|
8
|
+
sourceColumn: [Métrica]
|
|
9
|
+
|
|
10
|
+
column DimensionKey
|
|
11
|
+
lineageTag: 25be3c80-6162-4fbd-b081-b3f227923f1c
|
|
12
|
+
isNameInferred
|
|
13
|
+
sourceColumn: [DimensionKey]
|
|
14
|
+
|
|
15
|
+
column Origen
|
|
16
|
+
lineageTag: c35c80bd-ec25-48ff-8419-0238db7da522
|
|
17
|
+
isNameInferred
|
|
18
|
+
sourceColumn: [Origen]
|
|
19
|
+
|
|
20
|
+
column Orden
|
|
21
|
+
lineageTag: 7af7bf96-d891-45bb-a86a-bcd73090b649
|
|
22
|
+
isNameInferred
|
|
23
|
+
sourceColumn: [Orden]
|
|
24
|
+
|
|
25
|
+
partition '_Aux Compatibilidad métrica-dimensión' = calculated
|
|
26
|
+
mode: import
|
|
27
|
+
source =
|
|
28
|
+
VAR __MetricTeams =
|
|
29
|
+
SELECTCOLUMNS (
|
|
30
|
+
'Métricas',
|
|
31
|
+
"MetricName", 'Métricas'[Métrica],
|
|
32
|
+
"MetricTeam", 'Métricas'[Equipo]
|
|
33
|
+
)
|
|
34
|
+
VAR __DefaultsRaw =
|
|
35
|
+
GENERATE (
|
|
36
|
+
__MetricTeams,
|
|
37
|
+
VAR __Team = [MetricTeam]
|
|
38
|
+
RETURN
|
|
39
|
+
SELECTCOLUMNS (
|
|
40
|
+
FILTER ( '_Aux Análisis dimensiones', '_Aux Análisis dimensiones'[Equipo] = __Team ),
|
|
41
|
+
"DimensionKey", '_Aux Análisis dimensiones'[DimensionKey],
|
|
42
|
+
"Origen", "Equipo",
|
|
43
|
+
"Orden", '_Aux Análisis dimensiones'[Orden]
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
VAR __Defaults =
|
|
47
|
+
SELECTCOLUMNS (
|
|
48
|
+
__DefaultsRaw,
|
|
49
|
+
"Métrica", [MetricName],
|
|
50
|
+
"DimensionKey", [DimensionKey],
|
|
51
|
+
"Origen", [Origen],
|
|
52
|
+
"Orden", [Orden]
|
|
53
|
+
)
|
|
54
|
+
VAR __OverrideMetrics =
|
|
55
|
+
DISTINCT ( SELECTCOLUMNS ( '_Aux Overrides métrica-dimensión', "Métrica", '_Aux Overrides métrica-dimensión'[Métrica] ) )
|
|
56
|
+
VAR __DefaultsWithoutOverrides =
|
|
57
|
+
FILTER ( __Defaults, NOT CONTAINS ( __OverrideMetrics, [Métrica], [Métrica] ) )
|
|
58
|
+
VAR __Overrides =
|
|
59
|
+
SELECTCOLUMNS (
|
|
60
|
+
'_Aux Overrides métrica-dimensión',
|
|
61
|
+
"Métrica", '_Aux Overrides métrica-dimensión'[Métrica],
|
|
62
|
+
"DimensionKey", '_Aux Overrides métrica-dimensión'[DimensionKey],
|
|
63
|
+
"Origen", "Override métrica",
|
|
64
|
+
"Orden", '_Aux Overrides métrica-dimensión'[Orden]
|
|
65
|
+
)
|
|
66
|
+
RETURN
|
|
67
|
+
UNION ( __DefaultsWithoutOverrides, __Overrides )
|
|
68
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/// Parámetros técnicos del modelo expuestos hacia DAX. Los valores vienen de parámetros de Power Query; Zona Horaria usa offset UTC simple, por ejemplo -3 para Buenos Aires.
|
|
2
|
+
table '_Aux Modelo configuración'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 44275a58-c4cf-447c-843f-7a091b2de9dc
|
|
5
|
+
|
|
6
|
+
column Configuración
|
|
7
|
+
dataType: string
|
|
8
|
+
isNullable: false
|
|
9
|
+
lineageTag: 87493a2e-a4f7-4d34-b4a3-42e492eeaa6a
|
|
10
|
+
summarizeBy: none
|
|
11
|
+
sourceColumn: Configuración
|
|
12
|
+
|
|
13
|
+
column Valor
|
|
14
|
+
dataType: double
|
|
15
|
+
lineageTag: 55a982d0-34dd-46e8-ab29-e79506316bac
|
|
16
|
+
summarizeBy: none
|
|
17
|
+
sourceColumn: Valor
|
|
18
|
+
|
|
19
|
+
/// Valor de texto para parametros de modelo que no son numericos, como MonedaBase.
|
|
20
|
+
column ValorTexto
|
|
21
|
+
dataType: string
|
|
22
|
+
isNullable: false
|
|
23
|
+
lineageTag: 6ffd4e9b-4f87-4314-b5df-6e479e1be726
|
|
24
|
+
summarizeBy: none
|
|
25
|
+
sourceColumn: ValorTexto
|
|
26
|
+
|
|
27
|
+
partition 'Modelo Configuración' = m
|
|
28
|
+
mode: import
|
|
29
|
+
queryGroup: Params
|
|
30
|
+
source =
|
|
31
|
+
let
|
|
32
|
+
Source = #table(
|
|
33
|
+
type table [Configuración = text, Valor = number, ValorTexto = text],
|
|
34
|
+
{
|
|
35
|
+
{ "Moneda Base", 0, Text.From(MonedaBase) } // Expone el parametro M MonedaBase para que DAX pueda leerlo.
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
in
|
|
39
|
+
Source
|
|
40
|
+
|
|
41
|
+
annotation PBI_NavigationStepName = Navegación
|
|
42
|
+
|
|
43
|
+
annotation PBI_ResultType = Table
|
|
44
|
+
|
package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modo fechas.tmdl
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// Tabla auxiliar desconectada y oculta que indica si CalendarContext debe usar el selector predefinido o el rango de fechas personalizado.
|
|
2
|
+
table '_Aux Modo fechas'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 12ab8ac5-323f-4e24-b1df-a86a302fea59
|
|
5
|
+
|
|
6
|
+
column 'Modo fechas'
|
|
7
|
+
dataType: string
|
|
8
|
+
isNullable: false
|
|
9
|
+
lineageTag: b8b5d21b-0e21-4656-94a8-505dca697ef5
|
|
10
|
+
summarizeBy: none
|
|
11
|
+
sourceColumn: Modo fechas
|
|
12
|
+
sortByColumn: Orden
|
|
13
|
+
|
|
14
|
+
column Orden
|
|
15
|
+
dataType: int64
|
|
16
|
+
isHidden
|
|
17
|
+
isNullable: false
|
|
18
|
+
lineageTag: bfd4dadc-0b5a-470c-aa5f-3e2f9ebeecdd
|
|
19
|
+
summarizeBy: none
|
|
20
|
+
sourceColumn: Orden
|
|
21
|
+
|
|
22
|
+
partition 'Aux Modo fechas' = m
|
|
23
|
+
mode: import
|
|
24
|
+
queryGroup: Calendario
|
|
25
|
+
source =
|
|
26
|
+
let
|
|
27
|
+
Source = #table(
|
|
28
|
+
type table [#"Modo fechas" = text, Orden = Int64.Type],
|
|
29
|
+
{
|
|
30
|
+
{"Predefinido", 1},
|
|
31
|
+
{"Rango fechas", 2}
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
in
|
|
35
|
+
Source
|
|
36
|
+
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/// Puente oculto que permite que una métrica pertenezca a uno o más equipos de análisis.
|
|
2
|
+
table '_Aux Métrica-Equipo'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: c3340b95-db2a-47dd-9b5a-1b23805cbce2
|
|
5
|
+
|
|
6
|
+
column Métrica
|
|
7
|
+
lineageTag: ff3d3456-2b80-492a-866e-4d0be87c08e2
|
|
8
|
+
isNameInferred
|
|
9
|
+
sourceColumn: [Métrica]
|
|
10
|
+
sortByColumn: Orden
|
|
11
|
+
|
|
12
|
+
column Equipo
|
|
13
|
+
lineageTag: 45189d8e-349e-471d-997b-957f730f2205
|
|
14
|
+
isNameInferred
|
|
15
|
+
sourceColumn: [Equipo]
|
|
16
|
+
sortByColumn: Orden
|
|
17
|
+
|
|
18
|
+
column Orden
|
|
19
|
+
lineageTag: 46294576-908b-4243-bbad-d59cee5d3467
|
|
20
|
+
isNameInferred
|
|
21
|
+
sourceColumn: [Orden]
|
|
22
|
+
|
|
23
|
+
column Rol
|
|
24
|
+
lineageTag: f0af6a72-42fa-4fa5-ad27-2cbdfc9afe62
|
|
25
|
+
isNameInferred
|
|
26
|
+
sourceColumn: [Rol]
|
|
27
|
+
|
|
28
|
+
partition '_Aux Métrica-Equipo' = calculated
|
|
29
|
+
mode: import
|
|
30
|
+
source =
|
|
31
|
+
DATATABLE (
|
|
32
|
+
"Métrica", STRING,
|
|
33
|
+
"Equipo", STRING,
|
|
34
|
+
"Orden", INTEGER,
|
|
35
|
+
"Rol", STRING,
|
|
36
|
+
{
|
|
37
|
+
{ "Ventas", "Ventas", 1, "Principal" },
|
|
38
|
+
{ "Margen bruto", "Ventas", 2, "Principal" },
|
|
39
|
+
{ "Margen %", "Ventas", 3, "Principal" },
|
|
40
|
+
{ "Pedidos", "Ventas", 4, "Principal" },
|
|
41
|
+
{ "Ticket promedio", "Ventas", 5, "Principal" },
|
|
42
|
+
{ "Pipeline abierto", "Ventas", 6, "Principal" },
|
|
43
|
+
{ "Tasa de conversión", "Ventas", 7, "Principal" },
|
|
44
|
+
{ "Inversión marketing", "Marketing", 8, "Principal" },
|
|
45
|
+
{ "Leads", "Marketing", 9, "Principal" },
|
|
46
|
+
{ "MQLs", "Marketing", 10, "Principal" },
|
|
47
|
+
{ "Costo por lead", "Marketing", 11, "Principal" },
|
|
48
|
+
{ "Tasa lead a cliente", "Marketing", 12, "Principal" },
|
|
49
|
+
{ "ROAS", "Marketing", 13, "Principal" },
|
|
50
|
+
{ "Ventas atribuidas", "Marketing", 14, "Principal" },
|
|
51
|
+
{ "Clientes activos", "Clientes", 15, "Principal" },
|
|
52
|
+
{ "Clientes nuevos", "Clientes", 16, "Principal" },
|
|
53
|
+
{ "Retención %", "Clientes", 17, "Principal" },
|
|
54
|
+
{ "Churn %", "Clientes", 18, "Principal" },
|
|
55
|
+
{ "NPS", "Clientes", 19, "Principal" },
|
|
56
|
+
{ "Reclamos", "Clientes", 20, "Principal" },
|
|
57
|
+
{ "Tiempo medio de respuesta", "Clientes", 21, "Principal" },
|
|
58
|
+
{ "Órdenes completadas", "Operaciones", 22, "Principal" },
|
|
59
|
+
{ "Entregas a tiempo %", "Operaciones", 23, "Principal" },
|
|
60
|
+
{ "Backlog operativo", "Operaciones", 24, "Principal" },
|
|
61
|
+
{ "Tiempo de ciclo", "Operaciones", 25, "Principal" },
|
|
62
|
+
{ "SLA cumplido %", "Operaciones", 26, "Principal" },
|
|
63
|
+
{ "Retrabajos", "Operaciones", 27, "Principal" },
|
|
64
|
+
{ "Capacidad utilizada %", "Operaciones", 28, "Principal" },
|
|
65
|
+
{ "Ingresos", "Finanzas", 29, "Principal" },
|
|
66
|
+
{ "Gastos operativos", "Finanzas", 30, "Principal" },
|
|
67
|
+
{ "EBITDA", "Finanzas", 31, "Principal" },
|
|
68
|
+
{ "Margen operativo %", "Finanzas", 32, "Principal" },
|
|
69
|
+
{ "Cash collected", "Finanzas", 33, "Principal" },
|
|
70
|
+
{ "Cuentas por cobrar", "Finanzas", 34, "Principal" },
|
|
71
|
+
{ "Variación vs presupuesto %", "Finanzas", 35, "Principal" },
|
|
72
|
+
{ "Productos activos", "Producto", 36, "Principal" },
|
|
73
|
+
{ "Unidades vendidas", "Producto", 37, "Principal" },
|
|
74
|
+
{ "Mix productos %", "Producto", 38, "Principal" },
|
|
75
|
+
{ "Devoluciones %", "Producto", 39, "Principal" },
|
|
76
|
+
{ "Margen por producto", "Producto", 40, "Principal" },
|
|
77
|
+
{ "Servicios adjuntos %", "Producto", 41, "Principal" },
|
|
78
|
+
{ "Productos sin venta", "Producto", 42, "Principal" },
|
|
79
|
+
{ "Headcount", "Personas", 43, "Principal" },
|
|
80
|
+
{ "Costo laboral", "Personas", 44, "Principal" },
|
|
81
|
+
{ "Rotación %", "Personas", 45, "Principal" },
|
|
82
|
+
{ "Ausentismo %", "Personas", 46, "Principal" },
|
|
83
|
+
{ "Horas trabajadas", "Personas", 47, "Principal" },
|
|
84
|
+
{ "Horas facturables %", "Personas", 48, "Principal" },
|
|
85
|
+
{ "Utilización %", "Personas", 49, "Principal" },
|
|
86
|
+
{ "Proyectos activos", "Proyectos", 50, "Principal" },
|
|
87
|
+
{ "Proyectos en riesgo", "Proyectos", 51, "Principal" },
|
|
88
|
+
{ "Avance promedio %", "Proyectos", 52, "Principal" },
|
|
89
|
+
{ "Rentabilidad de proyectos", "Proyectos", 53, "Principal" },
|
|
90
|
+
{ "Horas de proyecto", "Proyectos", 54, "Principal" },
|
|
91
|
+
{ "Desvío presupuesto %", "Proyectos", 55, "Principal" },
|
|
92
|
+
{ "Tareas vencidas", "Proyectos", 56, "Principal" },
|
|
93
|
+
{ "Ventas", "Dirección", 1, "Ejecutiva" },
|
|
94
|
+
{ "Margen %", "Dirección", 2, "Ejecutiva" },
|
|
95
|
+
{ "EBITDA", "Dirección", 3, "Ejecutiva" },
|
|
96
|
+
{ "Margen operativo %", "Dirección", 4, "Ejecutiva" },
|
|
97
|
+
{ "Cash collected", "Dirección", 5, "Ejecutiva" },
|
|
98
|
+
{ "Retención %", "Dirección", 6, "Ejecutiva" },
|
|
99
|
+
{ "Rentabilidad de proyectos", "Dirección", 7, "Ejecutiva" }
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
table '_Aux Overrides métrica-dimensión'
|
|
2
|
+
isHidden
|
|
3
|
+
lineageTag: 7805bc2b-53ba-4801-b182-952198b21848
|
|
4
|
+
|
|
5
|
+
column Métrica
|
|
6
|
+
lineageTag: ab8a88bc-2024-4321-9e00-e43084d93793
|
|
7
|
+
isNameInferred
|
|
8
|
+
sourceColumn: [Métrica]
|
|
9
|
+
|
|
10
|
+
column DimensionKey
|
|
11
|
+
lineageTag: 463d9e43-ca38-422e-8560-729f22bac9f3
|
|
12
|
+
isNameInferred
|
|
13
|
+
sourceColumn: [DimensionKey]
|
|
14
|
+
|
|
15
|
+
column Motivo
|
|
16
|
+
lineageTag: 1e8f2dd2-26c8-4a5f-b88b-dc396bc27911
|
|
17
|
+
isNameInferred
|
|
18
|
+
sourceColumn: [Motivo]
|
|
19
|
+
|
|
20
|
+
column Orden
|
|
21
|
+
lineageTag: 46a24123-cf85-414c-8764-6e823e378c8c
|
|
22
|
+
isNameInferred
|
|
23
|
+
sourceColumn: [Orden]
|
|
24
|
+
|
|
25
|
+
partition '_Aux Overrides métrica-dimensión' = calculated
|
|
26
|
+
mode: import
|
|
27
|
+
source =
|
|
28
|
+
DATATABLE (
|
|
29
|
+
"Métrica", STRING,
|
|
30
|
+
"DimensionKey", STRING,
|
|
31
|
+
"Motivo", STRING,
|
|
32
|
+
"Orden", INTEGER,
|
|
33
|
+
{
|
|
34
|
+
{ "Pipeline abierto", "cliente", "Pipeline se explica por cliente.", 0 },
|
|
35
|
+
{ "Pipeline abierto", "cliente_pais", "Pipeline se explica por geografía.", 1 },
|
|
36
|
+
{ "Pipeline abierto", "cliente_segmento", "Pipeline se explica por segmento.", 2 },
|
|
37
|
+
{ "Pipeline abierto", "canal", "Pipeline se explica por canal.", 3 },
|
|
38
|
+
{ "Pipeline abierto", "servicio", "Pipeline de servicios requiere detalle de servicio.", 4 },
|
|
39
|
+
{ "Pipeline abierto", "servicio_linea", "Pipeline de servicios requiere línea de servicio.", 5 },
|
|
40
|
+
{ "Tasa de conversión", "cliente_segmento", "La conversión se compara por segmento.", 0 },
|
|
41
|
+
{ "Tasa de conversión", "canal", "La conversión se compara por canal.", 1 },
|
|
42
|
+
{ "Tasa de conversión", "canal_tipo", "La conversión se compara por tipo de canal.", 2 },
|
|
43
|
+
{ "Tasa de conversión", "servicio_linea", "La conversión cambia por línea de servicio.", 3 },
|
|
44
|
+
{ "Servicios adjuntos %", "producto", "La adjunción se lee desde producto principal.", 0 },
|
|
45
|
+
{ "Servicios adjuntos %", "producto_categoria", "La adjunción se compara por categoría.", 1 },
|
|
46
|
+
{ "Servicios adjuntos %", "servicio", "La adjunción necesita ver el servicio agregado.", 2 },
|
|
47
|
+
{ "Servicios adjuntos %", "servicio_linea", "La adjunción necesita línea de servicio.", 3 },
|
|
48
|
+
{ "Headcount", "equipo", "Headcount pertenece a equipos.", 0 },
|
|
49
|
+
{ "Headcount", "equipo_area", "Headcount se explica por área del equipo.", 1 },
|
|
50
|
+
{ "Costo laboral", "equipo", "Costo laboral pertenece a equipos.", 0 },
|
|
51
|
+
{ "Costo laboral", "equipo_area", "Costo laboral se explica por área del equipo.", 1 }
|
|
52
|
+
}
|
|
53
|
+
)
|
|
54
|
+
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/// Presets M desconectados de períodos actuales para filtros rápidos del template.
|
|
2
|
+
table '_Aux Períodos'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 32f583da-e5a9-4582-b64b-3aae04d2dfeb
|
|
5
|
+
|
|
6
|
+
column 'Vista de calendario'
|
|
7
|
+
dataType: string
|
|
8
|
+
isHidden
|
|
9
|
+
isNullable: false
|
|
10
|
+
lineageTag: 8306ad09-d5c2-480c-aaaf-ff0d39333793
|
|
11
|
+
summarizeBy: none
|
|
12
|
+
sourceColumn: Calendar Type
|
|
13
|
+
|
|
14
|
+
changedProperty = IsHidden
|
|
15
|
+
|
|
16
|
+
column Período
|
|
17
|
+
dataType: string
|
|
18
|
+
isNullable: false
|
|
19
|
+
lineageTag: ab4db080-b0f2-4aa1-9877-015dd8028866
|
|
20
|
+
summarizeBy: none
|
|
21
|
+
sourceColumn: Período
|
|
22
|
+
sortByColumn: Orden
|
|
23
|
+
|
|
24
|
+
column Orden
|
|
25
|
+
dataType: int64
|
|
26
|
+
isHidden
|
|
27
|
+
isNullable: false
|
|
28
|
+
lineageTag: 9f1d6bf5-fa32-4d3a-98e3-bc1ef11fe03f
|
|
29
|
+
summarizeBy: none
|
|
30
|
+
sourceColumn: Sort
|
|
31
|
+
|
|
32
|
+
column FechaInicio
|
|
33
|
+
dataType: dateTime
|
|
34
|
+
isHidden
|
|
35
|
+
formatString: Long Date
|
|
36
|
+
lineageTag: 31742ee9-1a8a-4365-b42c-ed6b4d79c44c
|
|
37
|
+
summarizeBy: none
|
|
38
|
+
sourceColumn: StartDate
|
|
39
|
+
|
|
40
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
41
|
+
|
|
42
|
+
column FechaFin
|
|
43
|
+
dataType: dateTime
|
|
44
|
+
isHidden
|
|
45
|
+
formatString: Long Date
|
|
46
|
+
lineageTag: 9d4df114-f4a6-4bec-8e4d-62b69b4c2572
|
|
47
|
+
summarizeBy: none
|
|
48
|
+
sourceColumn: EndDate
|
|
49
|
+
|
|
50
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
51
|
+
|
|
52
|
+
partition 'Calendar Periods' = m
|
|
53
|
+
mode: import
|
|
54
|
+
queryGroup: Calendario
|
|
55
|
+
source =
|
|
56
|
+
let
|
|
57
|
+
Calendar = Table.Buffer(Calendario),
|
|
58
|
+
Presets = Table.Buffer(#"Períodos predefinidos"),
|
|
59
|
+
Types = Table.RenameColumns(
|
|
60
|
+
Table.SelectColumns(#"Tipos de calendario", {"Vista de calendario"}),
|
|
61
|
+
{{"Vista de calendario", "Calendar Type"}}
|
|
62
|
+
),
|
|
63
|
+
|
|
64
|
+
ModelToday = List.Max(Calendar[Fecha]),
|
|
65
|
+
Today = if Logical.From(IncluirHoy) then ModelToday else Date.AddDays(ModelToday, -1),
|
|
66
|
+
Yesterday = Date.AddDays(Today, -1),
|
|
67
|
+
HistoricalStart = #date(2013, 6, 1),
|
|
68
|
+
|
|
69
|
+
WeekStart = Date.StartOfWeek(Today, Day.Monday),
|
|
70
|
+
PrevWeekStart = Date.AddDays(WeekStart, -7),
|
|
71
|
+
PrevWeekEnd = Date.AddDays(WeekStart, -1),
|
|
72
|
+
|
|
73
|
+
RangeByKey = (columnName as text, key as nullable number) as record =>
|
|
74
|
+
let
|
|
75
|
+
rows = if key = null then #table({}, {}) else Table.SelectRows(Calendar, each Record.Field(_, columnName) = key),
|
|
76
|
+
startDate = if Table.IsEmpty(rows) then null else List.Min(rows[Fecha]),
|
|
77
|
+
endDate = if Table.IsEmpty(rows) then null else List.Max(rows[Fecha])
|
|
78
|
+
in
|
|
79
|
+
[Start = startDate, End = endDate],
|
|
80
|
+
|
|
81
|
+
MaxKeyBefore = (columnName as text, key as nullable number) as nullable number =>
|
|
82
|
+
let
|
|
83
|
+
values = if key = null then {} else List.Distinct(List.RemoveNulls(Table.Column(Calendar, columnName))),
|
|
84
|
+
prior = List.Select(values, each _ < key)
|
|
85
|
+
in
|
|
86
|
+
if List.IsEmpty(prior) then null else List.Max(prior),
|
|
87
|
+
|
|
88
|
+
CurrentFiscalRow = Table.SelectRows(Calendar, each [Fecha] = Today){0},
|
|
89
|
+
CurFY = CurrentFiscalRow[Fiscal445Year],
|
|
90
|
+
CurFM = CurrentFiscalRow[Fiscal445MonthNr],
|
|
91
|
+
CurFQ = CurrentFiscalRow[Fiscal445QuarterNr],
|
|
92
|
+
CurFS = CurrentFiscalRow[Fiscal445SemesterNr],
|
|
93
|
+
|
|
94
|
+
FiscalMonthKey = CurrentFiscalRow[Fiscal445MonthKey],
|
|
95
|
+
FiscalQuarterKey = CurrentFiscalRow[Fiscal445QuarterKey],
|
|
96
|
+
FiscalSemesterKey = CurrentFiscalRow[Fiscal445SemesterKey],
|
|
97
|
+
|
|
98
|
+
FiscalMonthRange = RangeByKey("Fiscal445MonthKey", FiscalMonthKey),
|
|
99
|
+
PrevFiscalMonthRange = RangeByKey("Fiscal445MonthKey", MaxKeyBefore("Fiscal445MonthKey", FiscalMonthKey)),
|
|
100
|
+
FiscalQuarterRange = RangeByKey("Fiscal445QuarterKey", FiscalQuarterKey),
|
|
101
|
+
PrevFiscalQuarterRange = RangeByKey("Fiscal445QuarterKey", MaxKeyBefore("Fiscal445QuarterKey", FiscalQuarterKey)),
|
|
102
|
+
FiscalSemesterRange = RangeByKey("Fiscal445SemesterKey", FiscalSemesterKey),
|
|
103
|
+
PrevFiscalSemesterRange = RangeByKey("Fiscal445SemesterKey", MaxKeyBefore("Fiscal445SemesterKey", FiscalSemesterKey)),
|
|
104
|
+
FiscalYearRange = RangeByKey("Fiscal445Year", CurFY),
|
|
105
|
+
FiscalPrevYearRange = RangeByKey("Fiscal445Year", CurFY - 1),
|
|
106
|
+
|
|
107
|
+
GMonthStart = Date.StartOfMonth(Today),
|
|
108
|
+
GPrevMonthStart = Date.StartOfMonth(Date.AddMonths(Today, -1)),
|
|
109
|
+
GPrevMonthEnd = Date.EndOfMonth(Date.AddMonths(Today, -1)),
|
|
110
|
+
GQuarterStartMonth = 3 * Number.IntegerDivide(Date.Month(Today) - 1, 3) + 1,
|
|
111
|
+
GQuarterStart = #date(Date.Year(Today), GQuarterStartMonth, 1),
|
|
112
|
+
GPrevQuarterStart = Date.AddMonths(GQuarterStart, -3),
|
|
113
|
+
GPrevQuarterEnd = Date.AddDays(GQuarterStart, -1),
|
|
114
|
+
GSemesterStart = #date(Date.Year(Today), if Date.Month(Today) <= 6 then 1 else 7, 1),
|
|
115
|
+
GPrevSemesterStart = Date.AddMonths(GSemesterStart, -6),
|
|
116
|
+
GPrevSemesterEnd = Date.AddDays(GSemesterStart, -1),
|
|
117
|
+
GYearStart = #date(Date.Year(Today), 1, 1),
|
|
118
|
+
GPrevYearStart = #date(Date.Year(Today) - 1, 1, 1),
|
|
119
|
+
GPrevYearEnd = #date(Date.Year(Today) - 1, 12, 31),
|
|
120
|
+
|
|
121
|
+
RangeForPeriod = (calendarType as text, sort as number) as record =>
|
|
122
|
+
let
|
|
123
|
+
is445 = calendarType = "Semanal 4-4-5",
|
|
124
|
+
startDate =
|
|
125
|
+
if sort = 1 then Today
|
|
126
|
+
else if sort = 2 then Yesterday
|
|
127
|
+
else if sort = 3 then Date.AddDays(Today, -6)
|
|
128
|
+
else if sort = 4 then Date.AddDays(Today, -29)
|
|
129
|
+
else if sort = 5 then Date.AddDays(Today, -89)
|
|
130
|
+
else if sort = 6 then Date.AddDays(Today, -179)
|
|
131
|
+
else if sort = 7 then Date.AddDays(Today, -364)
|
|
132
|
+
else if sort = 8 then WeekStart
|
|
133
|
+
else if sort = 9 then PrevWeekStart
|
|
134
|
+
else if is445 and sort = 10 then FiscalMonthRange[Start]
|
|
135
|
+
else if sort = 10 then GMonthStart
|
|
136
|
+
else if is445 and sort = 11 then PrevFiscalMonthRange[Start]
|
|
137
|
+
else if sort = 11 then GPrevMonthStart
|
|
138
|
+
else if is445 and sort = 12 then FiscalQuarterRange[Start]
|
|
139
|
+
else if sort = 12 then GQuarterStart
|
|
140
|
+
else if is445 and sort = 13 then PrevFiscalQuarterRange[Start]
|
|
141
|
+
else if sort = 13 then GPrevQuarterStart
|
|
142
|
+
else if is445 and sort = 14 then FiscalSemesterRange[Start]
|
|
143
|
+
else if sort = 14 then GSemesterStart
|
|
144
|
+
else if is445 and sort = 15 then PrevFiscalSemesterRange[Start]
|
|
145
|
+
else if sort = 15 then GPrevSemesterStart
|
|
146
|
+
else if is445 and sort = 16 then FiscalYearRange[Start]
|
|
147
|
+
else if sort = 16 then GYearStart
|
|
148
|
+
else if is445 and sort = 17 then FiscalPrevYearRange[Start]
|
|
149
|
+
else if sort = 17 then GPrevYearStart
|
|
150
|
+
else HistoricalStart,
|
|
151
|
+
endDate =
|
|
152
|
+
if sort = 1 then Today
|
|
153
|
+
else if sort = 2 then Yesterday
|
|
154
|
+
else if List.Contains({3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 18}, sort) then Today
|
|
155
|
+
else if sort = 9 then PrevWeekEnd
|
|
156
|
+
else if is445 and sort = 11 then PrevFiscalMonthRange[End]
|
|
157
|
+
else if sort = 11 then GPrevMonthEnd
|
|
158
|
+
else if is445 and sort = 13 then PrevFiscalQuarterRange[End]
|
|
159
|
+
else if sort = 13 then GPrevQuarterEnd
|
|
160
|
+
else if is445 and sort = 15 then PrevFiscalSemesterRange[End]
|
|
161
|
+
else if sort = 15 then GPrevSemesterEnd
|
|
162
|
+
else if is445 and sort = 17 then FiscalPrevYearRange[End]
|
|
163
|
+
else if sort = 17 then GPrevYearEnd
|
|
164
|
+
else Today
|
|
165
|
+
in
|
|
166
|
+
[StartDate = startDate, EndDate = endDate],
|
|
167
|
+
|
|
168
|
+
WithPresets = Table.AddColumn(Types, "Preset", each Presets),
|
|
169
|
+
Base = Table.ExpandTableColumn(WithPresets, "Preset", {"Período", "Sort"}),
|
|
170
|
+
WithRange = Table.AddColumn(Base, "Range", each RangeForPeriod([Calendar Type], [Sort]), type record),
|
|
171
|
+
Expanded = Table.ExpandRecordColumn(WithRange, "Range", {"StartDate", "EndDate"}, {"StartDate", "EndDate"}),
|
|
172
|
+
Typed = Table.TransformColumnTypes(
|
|
173
|
+
Expanded,
|
|
174
|
+
{{"StartDate", type date}, {"EndDate", type date}, {"Calendar Type", type text}, {"Período", type text}, {"Sort", Int64.Type}}
|
|
175
|
+
)
|
|
176
|
+
in
|
|
177
|
+
Typed
|
|
178
|
+
|
|
179
|
+
annotation PBI_NavigationStepName = Navegación
|
|
180
|
+
|
|
181
|
+
annotation PBI_ResultType = Exception
|
|
182
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// Tabla auxiliar desconectada que define cómo comparar un rango de fechas personalizado: contra el año anterior o contra el periodo inmediatamente previo.
|
|
2
|
+
table '_Aux Rango fechas modo'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 1970d89c-1eb0-4170-92bb-1231033a43c8
|
|
5
|
+
|
|
6
|
+
column 'Rango fechas modo'
|
|
7
|
+
dataType: string
|
|
8
|
+
isNullable: false
|
|
9
|
+
lineageTag: 2d1daef6-f22c-4194-92d7-65de6accad2a
|
|
10
|
+
summarizeBy: none
|
|
11
|
+
sourceColumn: Rango fechas modo
|
|
12
|
+
sortByColumn: Orden
|
|
13
|
+
|
|
14
|
+
column Orden
|
|
15
|
+
dataType: int64
|
|
16
|
+
isHidden
|
|
17
|
+
isNullable: false
|
|
18
|
+
lineageTag: 6cb5d07d-0332-481e-a35c-9b4ebf300dde
|
|
19
|
+
summarizeBy: none
|
|
20
|
+
sourceColumn: Orden
|
|
21
|
+
|
|
22
|
+
partition 'Aux Rango fechas modo' = m
|
|
23
|
+
mode: import
|
|
24
|
+
queryGroup: Calendario
|
|
25
|
+
source =
|
|
26
|
+
let
|
|
27
|
+
Source = #table(
|
|
28
|
+
type table [#"Rango fechas modo" = text, Orden = Int64.Type],
|
|
29
|
+
{
|
|
30
|
+
{"Interanual", 1},
|
|
31
|
+
{"Periodo previo", 2}
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
in
|
|
35
|
+
Source
|
|
36
|
+
|
package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas.tmdl
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// Tabla auxiliar desconectada con las fechas disponibles para el slicer de rango personalizado. No tiene relaciones físicas; CalendarContext traduce la selección a filtros reales.
|
|
2
|
+
table '_Aux Rango fechas'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: cf0e0bbf-716f-40a1-9cb3-85649cef4fe6
|
|
5
|
+
|
|
6
|
+
column Fecha
|
|
7
|
+
dataType: dateTime
|
|
8
|
+
isNullable: false
|
|
9
|
+
formatString: Long Date
|
|
10
|
+
lineageTag: 6e02c0e2-b2d8-4f53-af2a-8b9264b7ab5c
|
|
11
|
+
summarizeBy: none
|
|
12
|
+
sourceColumn: Fecha
|
|
13
|
+
|
|
14
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
15
|
+
|
|
16
|
+
partition 'Aux Rango fechas' = m
|
|
17
|
+
mode: import
|
|
18
|
+
queryGroup: Calendario
|
|
19
|
+
source =
|
|
20
|
+
let
|
|
21
|
+
Source = Table.SelectColumns(Calendario, {"Fecha"}),
|
|
22
|
+
DistinctDates = Table.Distinct(Source),
|
|
23
|
+
SortedRows = Table.Sort(DistinctDates, {{"Fecha", Order.Ascending}}),
|
|
24
|
+
Typed = Table.TransformColumnTypes(SortedRows, {{"Fecha", type date}})
|
|
25
|
+
in
|
|
26
|
+
Typed
|
|
27
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// Tabla desconectada del template para alternar entre calendario gregoriano y semanal 4-4-5.
|
|
2
|
+
table '_Aux Vista de calendario'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 30c2b190-4109-4c7b-ae8c-a4cb2895f15e
|
|
5
|
+
|
|
6
|
+
column 'Vista de calendario'
|
|
7
|
+
lineageTag: 383b4358-0b80-44e6-9b0a-7eb5fe33f262
|
|
8
|
+
summarizeBy: none
|
|
9
|
+
sourceColumn: [Tipo Calendario]
|
|
10
|
+
sortByColumn: 'Orden vista de calendario'
|
|
11
|
+
|
|
12
|
+
column 'Orden vista de calendario'
|
|
13
|
+
isHidden
|
|
14
|
+
formatString: 0
|
|
15
|
+
lineageTag: be4cbb5b-2720-41cb-aebd-b52005cead4e
|
|
16
|
+
summarizeBy: none
|
|
17
|
+
sourceColumn: [Orden Tipo Calendario]
|
|
18
|
+
|
|
19
|
+
partition 'Vista de calendario' = calculated
|
|
20
|
+
mode: import
|
|
21
|
+
source =
|
|
22
|
+
DATATABLE (
|
|
23
|
+
"Tipo Calendario", STRING,
|
|
24
|
+
"Orden Tipo Calendario", INTEGER,
|
|
25
|
+
{
|
|
26
|
+
{ "Gregoriano", 1 },
|
|
27
|
+
{ "Semanal 4-4-5", 2 }
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
table '_GC Cálculo'
|
|
2
|
+
isHidden
|
|
3
|
+
lineageTag: ed02182c-5eee-4e6f-97c7-2dd97712298b
|
|
4
|
+
|
|
5
|
+
/// Permite cambiar cómo se resume la métrica seleccionada: valor o acumulado.
|
|
6
|
+
calculationGroup
|
|
7
|
+
precedence: 10
|
|
8
|
+
|
|
9
|
+
multipleOrEmptySelectionExpression = SELECTEDMEASURE()
|
|
10
|
+
|
|
11
|
+
formatStringDefinition = SELECTEDMEASUREFORMATSTRING()
|
|
12
|
+
|
|
13
|
+
noSelectionExpression = SELECTEDMEASURE()
|
|
14
|
+
|
|
15
|
+
formatStringDefinition = SELECTEDMEASUREFORMATSTRING()
|
|
16
|
+
|
|
17
|
+
/// Muestra la métrica seleccionada con su agregación natural.
|
|
18
|
+
calculationItem Valor = SELECTEDMEASURE()
|
|
19
|
+
|
|
20
|
+
formatStringDefinition = SELECTEDMEASUREFORMATSTRING()
|
|
21
|
+
|
|
22
|
+
/// Acumula solo las métricas marcadas como acumulables en Métricas[Acumulado]. Para los carriers [Actual] y [Previo], delega el acumulado en Aux Tipo cálculo para no romper el eje temporal.
|
|
23
|
+
calculationItem Acumulado =
|
|
24
|
+
// Running sum solo para metricas acumulables.
|
|
25
|
+
// Los carriers [Actual] y [Previo] delegan el acumulado en 'Aux Tipo calculo',
|
|
26
|
+
// porque esos carriers tambien aplican rangos de comparacion.
|
|
27
|
+
VAR __HasTemporalAxis = EjeCalendarioEnContexto ()
|
|
28
|
+
VAR __SelectedMeasureName = SELECTEDMEASURENAME ()
|
|
29
|
+
VAR __SelectedMetricName =
|
|
30
|
+
COALESCE (
|
|
31
|
+
SELECTEDVALUE ( '_GC Métrica'[Métrica] ),
|
|
32
|
+
SELECTEDVALUE ( 'Métricas'[Métrica] ),
|
|
33
|
+
"Ventas"
|
|
34
|
+
)
|
|
35
|
+
VAR __MetricName =
|
|
36
|
+
IF (
|
|
37
|
+
__SelectedMeasureName IN { "Actual", "Previo" },
|
|
38
|
+
__SelectedMetricName,
|
|
39
|
+
__SelectedMeasureName
|
|
40
|
+
)
|
|
41
|
+
VAR __CanAccumulate =
|
|
42
|
+
COALESCE (
|
|
43
|
+
LOOKUPVALUE ( 'Métricas'[Acumulado], 'Métricas'[Métrica], __MetricName ),
|
|
44
|
+
FALSE ()
|
|
45
|
+
)
|
|
46
|
+
RETURN
|
|
47
|
+
IF (
|
|
48
|
+
__SelectedMeasureName IN { "Actual", "Previo" },
|
|
49
|
+
SELECTEDMEASURE (),
|
|
50
|
+
IF (
|
|
51
|
+
NOT __HasTemporalAxis || NOT __CanAccumulate,
|
|
52
|
+
SELECTEDMEASURE (),
|
|
53
|
+
CALCULATE (
|
|
54
|
+
SELECTEDMEASURE (),
|
|
55
|
+
FILTER (
|
|
56
|
+
ALLSELECTED ( 'Calendario'[Fecha] ),
|
|
57
|
+
'Calendario'[Fecha] <= MAX ( 'Calendario'[Fecha] )
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
formatStringDefinition = SELECTEDMEASUREFORMATSTRING()
|
|
64
|
+
|
|
65
|
+
column Cálculo
|
|
66
|
+
dataType: string
|
|
67
|
+
lineageTag: f8965a03-4327-4f99-a7bf-a2421b04b8fd
|
|
68
|
+
|
|
69
|
+
partition 'Partition_Vista del valor' = calculationGroup
|
|
70
|
+
|