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,84 @@
|
|
|
1
|
+
/// Dimension de canales de venta sintética, cargada desde Power Query para que el sample dataset no dependa de DAX calculated tables.
|
|
2
|
+
table Canales
|
|
3
|
+
lineageTag: 8271174d-1f18-43d9-ad8e-370998b8d018
|
|
4
|
+
|
|
5
|
+
column CanalId
|
|
6
|
+
dataType: string
|
|
7
|
+
isHidden
|
|
8
|
+
lineageTag: c9c93f4f-3a85-4e54-ac8d-0a0b70be1d19
|
|
9
|
+
summarizeBy: none
|
|
10
|
+
sourceColumn: CanalId
|
|
11
|
+
|
|
12
|
+
column Canal
|
|
13
|
+
dataType: string
|
|
14
|
+
lineageTag: 08a98eb8-a791-4152-95d7-4e19d120f890
|
|
15
|
+
summarizeBy: none
|
|
16
|
+
sourceColumn: Canal
|
|
17
|
+
|
|
18
|
+
column 'Tipo de canal'
|
|
19
|
+
dataType: string
|
|
20
|
+
lineageTag: 0ffdfecc-0590-4bbf-8fe4-88976ec80165
|
|
21
|
+
summarizeBy: none
|
|
22
|
+
sourceColumn: Tipo Canal
|
|
23
|
+
|
|
24
|
+
column Data
|
|
25
|
+
dataType: string
|
|
26
|
+
isHidden
|
|
27
|
+
lineageTag: a556458b-a3fe-4961-92b3-8d06567a9bea
|
|
28
|
+
summarizeBy: none
|
|
29
|
+
sourceColumn: Data
|
|
30
|
+
|
|
31
|
+
/// Drill-down de canales: Tipo de canal -> Canal.
|
|
32
|
+
hierarchy 'Jerarquía de canales'
|
|
33
|
+
lineageTag: 71851210-3fe5-4b08-952f-0be1ca0869cc
|
|
34
|
+
|
|
35
|
+
level 'Tipo de canal'
|
|
36
|
+
lineageTag: e384b060-dce2-4831-b447-54f7f783f26d
|
|
37
|
+
column: 'Tipo de canal'
|
|
38
|
+
|
|
39
|
+
level Canal
|
|
40
|
+
lineageTag: 13f2950d-1530-4077-b9d9-418929ea4cfb
|
|
41
|
+
column: Canal
|
|
42
|
+
|
|
43
|
+
partition Canales = m
|
|
44
|
+
mode: import
|
|
45
|
+
queryGroup: 'Sample Dataset\Dimensiones'
|
|
46
|
+
source =
|
|
47
|
+
let
|
|
48
|
+
EntityCode = (entity as text, n as number) as text =>
|
|
49
|
+
let
|
|
50
|
+
CleanNumber = Number.From(n),
|
|
51
|
+
ToLetters = (value as number) as text =>
|
|
52
|
+
let
|
|
53
|
+
Current = Number.IntegerDivide(value, 1),
|
|
54
|
+
Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
|
|
55
|
+
Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
|
|
56
|
+
in
|
|
57
|
+
Prefix & Suffix,
|
|
58
|
+
BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
|
|
59
|
+
NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
|
|
60
|
+
CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
|
|
61
|
+
in
|
|
62
|
+
entity & BlockCode & NumberPart & CheckLetter,
|
|
63
|
+
Source = #table(
|
|
64
|
+
type table [CanalId = Int64.Type, Canal = text, #"Tipo Canal" = text],
|
|
65
|
+
{
|
|
66
|
+
{ 1, "Directo", "Owned" },
|
|
67
|
+
{ 2, "Partner", "Indirecto" },
|
|
68
|
+
{ 3, "Marketplace", "Digital" },
|
|
69
|
+
{ 4, "Outbound", "Sales-led" }
|
|
70
|
+
}
|
|
71
|
+
),
|
|
72
|
+
#"Tipo cambiado" = Table.TransformColumnTypes(Source,{{"CanalId", Int64.Type}, {"Canal", type text}, {"Tipo Canal", type text}}),
|
|
73
|
+
AddData = Table.AddColumn(#"Tipo cambiado", "Data", each "Demo", type text),
|
|
74
|
+
AddCanalCodigo = Table.AddColumn(AddData, "CanalCodigo", each EntityCode("Canal", [CanalId]), type text),
|
|
75
|
+
SelectForOutput = Table.SelectColumns(AddCanalCodigo, {"Data", "CanalCodigo", "Canal", "Tipo Canal"}),
|
|
76
|
+
Result = Table.RenameColumns(SelectForOutput, {{"CanalCodigo", "CanalId"}}),
|
|
77
|
+
#"Tipo final" = Table.TransformColumnTypes(Result,{{"Data", type text}, {"CanalId", type text}, {"Canal", type text}, {"Tipo Canal", type text}})
|
|
78
|
+
in
|
|
79
|
+
#"Tipo final"
|
|
80
|
+
|
|
81
|
+
annotation PBI_NavigationStepName = Navegación
|
|
82
|
+
|
|
83
|
+
annotation PBI_ResultType = Exception
|
|
84
|
+
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/// Dimensión sintética de clientes con 210 empresas de Latinoamérica y España, cargada desde Power Query para que el sample dataset no dependa de DAX calculated tables.
|
|
2
|
+
table Clientes
|
|
3
|
+
lineageTag: 54ff947e-7506-466e-9b73-bff64c48595f
|
|
4
|
+
|
|
5
|
+
column ClienteId
|
|
6
|
+
dataType: string
|
|
7
|
+
isHidden
|
|
8
|
+
lineageTag: 2f987211-80a8-4f05-9eb7-da2c4dd9ea62
|
|
9
|
+
summarizeBy: none
|
|
10
|
+
sourceColumn: ClienteId
|
|
11
|
+
|
|
12
|
+
column Cliente
|
|
13
|
+
dataType: string
|
|
14
|
+
lineageTag: fecfa652-2fa2-473c-864c-7d09d7e648a9
|
|
15
|
+
summarizeBy: none
|
|
16
|
+
sourceColumn: Cliente
|
|
17
|
+
|
|
18
|
+
column Segmento
|
|
19
|
+
dataType: string
|
|
20
|
+
lineageTag: 36d442f5-31d1-4ab8-a1ba-11245bb9ad8f
|
|
21
|
+
summarizeBy: none
|
|
22
|
+
sourceColumn: Segmento
|
|
23
|
+
|
|
24
|
+
column País
|
|
25
|
+
dataType: string
|
|
26
|
+
lineageTag: 42ffd8c8-2cf0-4a05-ba20-6f66604f4ac1
|
|
27
|
+
summarizeBy: none
|
|
28
|
+
sourceColumn: Pais
|
|
29
|
+
|
|
30
|
+
column Data
|
|
31
|
+
dataType: string
|
|
32
|
+
isHidden
|
|
33
|
+
lineageTag: bad33f97-bbdb-40f0-9dfb-946ef21e50b3
|
|
34
|
+
summarizeBy: none
|
|
35
|
+
sourceColumn: Data
|
|
36
|
+
|
|
37
|
+
/// Drill-down de clientes por geografía y segmento: País -> Segmento -> Cliente.
|
|
38
|
+
hierarchy 'Jerarquía cliente'
|
|
39
|
+
lineageTag: 1d161dd7-61e9-4d09-a0f7-e3f4f26ebe00
|
|
40
|
+
|
|
41
|
+
level País
|
|
42
|
+
lineageTag: adf1fd83-c944-4965-a35a-ea2004e353c4
|
|
43
|
+
column: País
|
|
44
|
+
|
|
45
|
+
level Segmento
|
|
46
|
+
lineageTag: 48391495-ee0e-4630-9ad5-a9c2c13afd65
|
|
47
|
+
column: Segmento
|
|
48
|
+
|
|
49
|
+
level Cliente
|
|
50
|
+
lineageTag: 9d1261b1-4c3b-4d2e-bc48-424ae929a18d
|
|
51
|
+
column: Cliente
|
|
52
|
+
|
|
53
|
+
partition Clientes = m
|
|
54
|
+
mode: import
|
|
55
|
+
queryGroup: 'Sample Dataset\Dimensiones'
|
|
56
|
+
source =
|
|
57
|
+
let
|
|
58
|
+
EntityCode = (entity as text, n as number) as text =>
|
|
59
|
+
let
|
|
60
|
+
CleanNumber = Number.From(n),
|
|
61
|
+
ToLetters = (value as number) as text =>
|
|
62
|
+
let
|
|
63
|
+
Current = Number.IntegerDivide(value, 1),
|
|
64
|
+
Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
|
|
65
|
+
Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
|
|
66
|
+
in
|
|
67
|
+
Prefix & Suffix,
|
|
68
|
+
BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
|
|
69
|
+
NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
|
|
70
|
+
CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
|
|
71
|
+
in
|
|
72
|
+
entity & BlockCode & NumberPart & CheckLetter,
|
|
73
|
+
Base = Table.FromList(List.Numbers(1, 210), Splitter.SplitByNothing(), {"ClienteId"}),
|
|
74
|
+
AddCountryId = Table.AddColumn(Base, "CountryId", each Number.Mod([ClienteId] - 1, 21) + 1, Int64.Type),
|
|
75
|
+
AddCompanySlot = Table.AddColumn(AddCountryId, "CompanySlot", each Number.IntegerDivide([ClienteId] - 1, 21) + 1, Int64.Type),
|
|
76
|
+
AddPais = Table.AddColumn(
|
|
77
|
+
AddCompanySlot,
|
|
78
|
+
"Pais",
|
|
79
|
+
each
|
|
80
|
+
if [CountryId] = 1 then "Argentina"
|
|
81
|
+
else if [CountryId] = 2 then "Bolivia"
|
|
82
|
+
else if [CountryId] = 3 then "Brasil"
|
|
83
|
+
else if [CountryId] = 4 then "Chile"
|
|
84
|
+
else if [CountryId] = 5 then "Colombia"
|
|
85
|
+
else if [CountryId] = 6 then "Costa Rica"
|
|
86
|
+
else if [CountryId] = 7 then "Cuba"
|
|
87
|
+
else if [CountryId] = 8 then "Ecuador"
|
|
88
|
+
else if [CountryId] = 9 then "El Salvador"
|
|
89
|
+
else if [CountryId] = 10 then "Guatemala"
|
|
90
|
+
else if [CountryId] = 11 then "Haiti"
|
|
91
|
+
else if [CountryId] = 12 then "Honduras"
|
|
92
|
+
else if [CountryId] = 13 then "Mexico"
|
|
93
|
+
else if [CountryId] = 14 then "Nicaragua"
|
|
94
|
+
else if [CountryId] = 15 then "Panama"
|
|
95
|
+
else if [CountryId] = 16 then "Paraguay"
|
|
96
|
+
else if [CountryId] = 17 then "Peru"
|
|
97
|
+
else if [CountryId] = 18 then "Republica Dominicana"
|
|
98
|
+
else if [CountryId] = 19 then "Uruguay"
|
|
99
|
+
else if [CountryId] = 20 then "Venezuela"
|
|
100
|
+
else "España",
|
|
101
|
+
type text
|
|
102
|
+
),
|
|
103
|
+
AddCompanyList = Table.AddColumn(
|
|
104
|
+
AddPais,
|
|
105
|
+
"CompanyList",
|
|
106
|
+
each
|
|
107
|
+
if [CountryId] = 1 then "Mercado Libre|Globant|YPF|Arcor|Techint|Banco Galicia|Aerolineas Argentinas|Telecom Argentina|Banco Macro|Despegar"
|
|
108
|
+
else if [CountryId] = 2 then "YPFB|Banco Nacional de Bolivia|Banco Mercantil Santa Cruz|Entel Bolivia|Cerveceria Boliviana Nacional|Sofia Ltda|PIL Andina|Tigo Bolivia|Fancesa|Imcruz"
|
|
109
|
+
else if [CountryId] = 3 then "Petrobras|Vale|Itau Unibanco|Bradesco|Ambev|Natura|Embraer|Magazine Luiza|Nubank|Localiza"
|
|
110
|
+
else if [CountryId] = 4 then "Cencosud|Falabella|LATAM Airlines|Banco de Chile|SQM|Copec|Enel Chile|Entel Chile|CCU|Ripley"
|
|
111
|
+
else if [CountryId] = 5 then "Ecopetrol|Bancolombia|Grupo Aval|Rappi|Avianca|Grupo Exito|Bavaria|Grupo Sura|Grupo Nutresa|Terpel"
|
|
112
|
+
else if [CountryId] = 6 then "FIFCO|BAC Credomatic|Dos Pinos|Florida Ice and Farm|Banco Nacional de Costa Rica|Kolbi|Auto Mercado|Grupo Purdy|Cafe Britt|Coopenae"
|
|
113
|
+
else if [CountryId] = 7 then "Cubana de Aviacion|ETECSA|Habanos|CIMEX|Gaviota|Havana Club|TRD Caribe|Banco Metropolitano|BioCubaFarma|Cubatur"
|
|
114
|
+
else if [CountryId] = 8 then "Banco Pichincha|Corporacion Favorita|Pronaca|Banco Guayaquil|CNT Ecuador|Tonicorp|La Fabril|Diners Club Ecuador|Supermaxi|Cerveceria Nacional Ecuador"
|
|
115
|
+
else if [CountryId] = 9 then "Grupo Calleja|Banco Agricola|Tigo El Salvador|Avianca El Salvador|La Constancia|Super Selectos|Davivienda El Salvador|Grupo Q|Pollo Campero El Salvador|AES El Salvador"
|
|
116
|
+
else if [CountryId] = 10 then "Pollo Campero|Banco Industrial|Tigo Guatemala|Cementos Progreso|Cerveceria Centro Americana|Grupo Pantaleon|Banco G&T Continental|Corporacion Multi Inversiones|CBC Guatemala|Agexport"
|
|
117
|
+
else if [CountryId] = 11 then "Digicel Haiti|Sogebank|Unibank Haiti|Rhum Barbancourt|Natcom Haiti|Comme Il Faut|Sunrise Airways|Brasserie Nationale d'Haiti|Valerio Canez|Caribbean Bottling"
|
|
118
|
+
else if [CountryId] = 12 then "Banco Atlantida|Tigo Honduras|Ficohsa|Cerveceria Hondurena|Diunsa|Grupo Terra|Supermercados La Colonia|Banco de Occidente Honduras|Lacthosa|Espresso Americano"
|
|
119
|
+
else if [CountryId] = 13 then "America Movil|Cemex|Grupo Bimbo|FEMSA|Banorte|Televisa|Grupo Modelo|Liverpool|Walmex|Aeromexico"
|
|
120
|
+
else if [CountryId] = 14 then "Banpro|Lafise Bancentro|Tigo Nicaragua|Claro Nicaragua|Flor de Cana|Grupo Pellas|Casa Pellas|Cargill Nicaragua|La Colonia Nicaragua|Agricorp"
|
|
121
|
+
else if [CountryId] = 15 then "Copa Airlines|Banco General|Bladex|Cable & Wireless Panama|Grupo Melo|Super 99|Rey Holdings|Cerveceria Nacional Panama|Banistmo|ASSA Seguros"
|
|
122
|
+
else if [CountryId] = 16 then "Banco Continental|Tigo Paraguay|Personal Paraguay|Cervepar|Inverfin|Vision Banco|Superseis|Chacomer|Banco Itau Paraguay|Copetrol"
|
|
123
|
+
else if [CountryId] = 17 then "Alicorp|Interbank|Banco de Credito del Peru|Backus|Credicorp|Ferreycorp|InRetail|Aenza|Volcan|Belcorp"
|
|
124
|
+
else if [CountryId] = 18 then "Grupo Popular|Banco BHD|Cerveceria Nacional Dominicana|Claro Dominicana|Altice Dominicana|Grupo Rica|Casa Brugal|Punta Cana Group|Banreservas|Aerodom"
|
|
125
|
+
else if [CountryId] = 19 then "ANCAP|Antel|Banco Republica|Conaprole|PedidosYa|Zonamerica|Tienda Inglesa|Montevideo Refrescos|Abitab|Ta-Ta"
|
|
126
|
+
else if [CountryId] = 20 then "PDVSA|Empresas Polar|Banco Mercantil|Digitel|Movistar Venezuela|Banesco|Farmatodo|Ron Santa Teresa|CANTV|Avior Airlines"
|
|
127
|
+
else "Telefonica|Santander|BBVA|Inditex|Iberdrola|Repsol|CaixaBank|Ferrovial|Mapfre|Mercadona",
|
|
128
|
+
type text
|
|
129
|
+
),
|
|
130
|
+
AddCliente = Table.AddColumn(AddCompanyList, "Cliente", each Text.Split([CompanyList], "|"){[CompanySlot] - 1}, type text),
|
|
131
|
+
AddSegmento = Table.AddColumn(AddCliente, "Segmento", each if [CompanySlot] <= 3 then "Enterprise" else if [CompanySlot] <= 7 then "Mid Market" else "SMB", type text),
|
|
132
|
+
AddData = Table.AddColumn(AddSegmento, "Data", each "Demo", type text),
|
|
133
|
+
AddClienteCodigo = Table.AddColumn(AddData, "ClienteCodigo", each EntityCode("Cliente", [ClienteId]), type text),
|
|
134
|
+
SelectForOutput = Table.SelectColumns(AddClienteCodigo, {"Data", "ClienteCodigo", "Cliente", "Segmento", "Pais"}),
|
|
135
|
+
Result = Table.RenameColumns(SelectForOutput, {{"ClienteCodigo", "ClienteId"}}),
|
|
136
|
+
#"Tipo cambiado" = Table.TransformColumnTypes(Result,{{"Data", type text}, {"ClienteId", type text}, {"Cliente", type text}, {"Segmento", type text}, {"Pais", type text}})
|
|
137
|
+
in
|
|
138
|
+
#"Tipo cambiado"
|
|
139
|
+
|
|
140
|
+
annotation PBI_NavigationStepName = Navegación
|
|
141
|
+
|
|
142
|
+
annotation PBI_ResultType = Table
|
|
143
|
+
|
package/templates/base-template/base-template.SemanticModel/definition/tables/Devoluciones.tmdl
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/// Hecho demo de devoluciones para analizar calidad comercial y de producto.
|
|
2
|
+
table Devoluciones
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 5b1fe8b5-7f3c-4bb0-963d-25354bafc3d5
|
|
5
|
+
|
|
6
|
+
column DevolucionId
|
|
7
|
+
dataType: string
|
|
8
|
+
isHidden
|
|
9
|
+
lineageTag: f1e1896c-b1f4-4498-8b7f-7d13762bbb6a
|
|
10
|
+
sourceColumn: DevolucionId
|
|
11
|
+
|
|
12
|
+
column Fecha
|
|
13
|
+
dataType: dateTime
|
|
14
|
+
formatString: Long Date
|
|
15
|
+
lineageTag: d20afc45-f4a4-4db9-a76a-9da10853e18b
|
|
16
|
+
summarizeBy: none
|
|
17
|
+
sourceColumn: Fecha
|
|
18
|
+
|
|
19
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
20
|
+
|
|
21
|
+
annotation SummarizationSetBy = Automatic
|
|
22
|
+
|
|
23
|
+
column ClienteId
|
|
24
|
+
dataType: string
|
|
25
|
+
isHidden
|
|
26
|
+
lineageTag: 29711a42-2851-4517-a181-ab655d804b50
|
|
27
|
+
sourceColumn: ClienteId
|
|
28
|
+
|
|
29
|
+
column CanalId
|
|
30
|
+
dataType: string
|
|
31
|
+
isHidden
|
|
32
|
+
lineageTag: aa867963-6f70-497a-95ae-8fbf56dddc90
|
|
33
|
+
sourceColumn: CanalId
|
|
34
|
+
|
|
35
|
+
column ProductoId
|
|
36
|
+
dataType: string
|
|
37
|
+
isHidden
|
|
38
|
+
lineageTag: 4ca50030-69c6-4684-9d9c-6e45594f11db
|
|
39
|
+
sourceColumn: ProductoId
|
|
40
|
+
|
|
41
|
+
column 'Unidades Devueltas'
|
|
42
|
+
dataType: int64
|
|
43
|
+
lineageTag: 458777ab-3066-4ae7-b84b-35f5cc191d40
|
|
44
|
+
sourceColumn: Unidades Devueltas
|
|
45
|
+
|
|
46
|
+
column Data
|
|
47
|
+
dataType: string
|
|
48
|
+
lineageTag: de47d5c3-c2a5-4f6b-8920-7ccde42db2e5
|
|
49
|
+
sourceColumn: Data
|
|
50
|
+
|
|
51
|
+
partition Devoluciones = m
|
|
52
|
+
mode: import
|
|
53
|
+
queryGroup: 'Sample Dataset\Hechos'
|
|
54
|
+
source =
|
|
55
|
+
let
|
|
56
|
+
EntityCode = (entity as text, n as number) as text =>
|
|
57
|
+
let
|
|
58
|
+
CleanNumber = Number.From(n),
|
|
59
|
+
ToLetters = (value as number) as text =>
|
|
60
|
+
let
|
|
61
|
+
Current = Number.IntegerDivide(value, 1),
|
|
62
|
+
Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
|
|
63
|
+
Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
|
|
64
|
+
in
|
|
65
|
+
Prefix & Suffix,
|
|
66
|
+
BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
|
|
67
|
+
NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
|
|
68
|
+
CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
|
|
69
|
+
in
|
|
70
|
+
entity & BlockCode & NumberPart & CheckLetter,
|
|
71
|
+
CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
|
|
72
|
+
EndDate = List.Max(CalendarDates[Fecha]),
|
|
73
|
+
StartDate = List.Min(CalendarDates[Fecha]),
|
|
74
|
+
DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
|
|
75
|
+
WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
|
|
76
|
+
SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
|
|
77
|
+
AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
|
|
78
|
+
ClienteCount = Table.RowCount(Clientes),
|
|
79
|
+
ProductCount = Table.RowCount(Productos),
|
|
80
|
+
ChannelCount = Table.RowCount(Canales),
|
|
81
|
+
ClientesBase = Table.FromList(List.Numbers(1, ClienteCount), Splitter.SplitByNothing(), {"ClienteNr"}),
|
|
82
|
+
AddClientes = Table.AddColumn(AddSemanaIndex, "Clientes", each ClientesBase),
|
|
83
|
+
ExpandClientes = Table.ExpandTableColumn(AddClientes, "Clientes", {"ClienteNr"}, {"ClienteNr"}),
|
|
84
|
+
AddValue = Table.AddColumn(ExpandClientes, "Value", each [SemanaIndex] * ClienteCount + [ClienteNr], Int64.Type),
|
|
85
|
+
AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ClienteNr] + [SemanaIndex], 7))})}), type date),
|
|
86
|
+
#"Con DevolucionId" = Table.AddColumn(AddFecha, "DevolucionId", each EntityCode("Devolucion", [Value]), type text),
|
|
87
|
+
#"Con ClienteId" = Table.AddColumn(#"Con DevolucionId", "ClienteId", each EntityCode("Cliente", [ClienteNr]), type text),
|
|
88
|
+
#"Con CanalId" = Table.AddColumn(#"Con ClienteId", "CanalId", each EntityCode("Canal", Number.Mod([ClienteNr] + [SemanaIndex] - 1, ChannelCount) + 1), type text),
|
|
89
|
+
#"Con ProductoId" = Table.AddColumn(#"Con CanalId", "ProductoId", each EntityCode("Producto", Number.Mod([ClienteNr] + [SemanaIndex] * 3 - 1, ProductCount) + 1), type text),
|
|
90
|
+
#"Con Unidades Devueltas" = Table.AddColumn(#"Con ProductoId", "Unidades Devueltas", each 1 + Number.Mod([Value], 9), Int64.Type),
|
|
91
|
+
#"Con Data" = Table.AddColumn(#"Con Unidades Devueltas", "Data", each "Demo", type text),
|
|
92
|
+
Result = Table.SelectColumns(#"Con Data", {"DevolucionId", "Fecha", "ClienteId", "CanalId", "ProductoId", "Unidades Devueltas", "Data"})
|
|
93
|
+
in
|
|
94
|
+
Result
|
|
95
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/// Hecho demo de ejecución económica y avance de proyectos.
|
|
2
|
+
table 'Ejecución proyectos'
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 2707cc7b-40b8-4c29-b1f2-014e1cad8a35
|
|
5
|
+
|
|
6
|
+
column EjecucionProyectoId
|
|
7
|
+
dataType: string
|
|
8
|
+
isHidden
|
|
9
|
+
lineageTag: 2b331a4f-1344-4873-a891-c20cf99cef52
|
|
10
|
+
sourceColumn: EjecucionProyectoId
|
|
11
|
+
|
|
12
|
+
column Fecha
|
|
13
|
+
dataType: dateTime
|
|
14
|
+
formatString: Long Date
|
|
15
|
+
lineageTag: 141f5bae-5bcf-4658-89c0-3a7df94b8516
|
|
16
|
+
summarizeBy: none
|
|
17
|
+
sourceColumn: Fecha
|
|
18
|
+
|
|
19
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
20
|
+
|
|
21
|
+
annotation SummarizationSetBy = Automatic
|
|
22
|
+
|
|
23
|
+
column ProyectoId
|
|
24
|
+
dataType: string
|
|
25
|
+
isHidden
|
|
26
|
+
lineageTag: c9bc1b3a-53e3-4706-82fb-b6dec49b372d
|
|
27
|
+
sourceColumn: ProyectoId
|
|
28
|
+
|
|
29
|
+
column ClienteId
|
|
30
|
+
dataType: string
|
|
31
|
+
isHidden
|
|
32
|
+
lineageTag: 65bac4a8-f8c1-4b49-8d9d-5bdeef690138
|
|
33
|
+
sourceColumn: ClienteId
|
|
34
|
+
|
|
35
|
+
column ServicioId
|
|
36
|
+
dataType: string
|
|
37
|
+
isHidden
|
|
38
|
+
lineageTag: 0b3608a8-acee-4020-9eff-c0075b3622dd
|
|
39
|
+
sourceColumn: ServicioId
|
|
40
|
+
|
|
41
|
+
column EquipoId
|
|
42
|
+
dataType: string
|
|
43
|
+
isHidden
|
|
44
|
+
lineageTag: 0b732596-abc1-41a7-b10b-a32d75b14a76
|
|
45
|
+
sourceColumn: EquipoId
|
|
46
|
+
|
|
47
|
+
column 'Estado ejecución'
|
|
48
|
+
dataType: string
|
|
49
|
+
lineageTag: 55e857c6-502e-44de-a572-fdd3bfc681e4
|
|
50
|
+
sourceColumn: Estado ejecución
|
|
51
|
+
|
|
52
|
+
column Avance
|
|
53
|
+
dataType: double
|
|
54
|
+
lineageTag: e829e3a1-8d19-4094-afcc-42c0c84b8d29
|
|
55
|
+
sourceColumn: Avance
|
|
56
|
+
|
|
57
|
+
column 'Ingresos Base'
|
|
58
|
+
dataType: double
|
|
59
|
+
lineageTag: a8460de0-91c3-4b6e-bdeb-26ef157cafff
|
|
60
|
+
sourceColumn: Ingresos Base
|
|
61
|
+
|
|
62
|
+
column 'Costos Base'
|
|
63
|
+
dataType: double
|
|
64
|
+
lineageTag: 64efd801-0a27-4b69-b62e-a04c09531933
|
|
65
|
+
sourceColumn: Costos Base
|
|
66
|
+
|
|
67
|
+
column 'Presupuesto Base'
|
|
68
|
+
dataType: double
|
|
69
|
+
lineageTag: 1011af16-40a9-4522-9af4-f9809ce32c9c
|
|
70
|
+
sourceColumn: Presupuesto Base
|
|
71
|
+
|
|
72
|
+
column Data
|
|
73
|
+
dataType: string
|
|
74
|
+
lineageTag: e43654f7-1184-4445-ac73-5932f98265f3
|
|
75
|
+
sourceColumn: Data
|
|
76
|
+
|
|
77
|
+
partition 'Ejecución proyectos' = m
|
|
78
|
+
mode: import
|
|
79
|
+
queryGroup: 'Sample Dataset\Hechos'
|
|
80
|
+
source =
|
|
81
|
+
let
|
|
82
|
+
EntityCode = (entity as text, n as number) as text =>
|
|
83
|
+
let
|
|
84
|
+
CleanNumber = Number.From(n),
|
|
85
|
+
ToLetters = (value as number) as text =>
|
|
86
|
+
let
|
|
87
|
+
Current = Number.IntegerDivide(value, 1),
|
|
88
|
+
Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
|
|
89
|
+
Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
|
|
90
|
+
in
|
|
91
|
+
Prefix & Suffix,
|
|
92
|
+
BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
|
|
93
|
+
NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
|
|
94
|
+
CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
|
|
95
|
+
in
|
|
96
|
+
entity & BlockCode & NumberPart & CheckLetter,
|
|
97
|
+
CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
|
|
98
|
+
EndDate = List.Max(CalendarDates[Fecha]),
|
|
99
|
+
StartDate = List.Min(CalendarDates[Fecha]),
|
|
100
|
+
DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
|
|
101
|
+
WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
|
|
102
|
+
SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
|
|
103
|
+
AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
|
|
104
|
+
ProjectCount = Table.RowCount(Proyectos),
|
|
105
|
+
EquipoCount = Table.RowCount(Equipos),
|
|
106
|
+
ClienteCount = Table.RowCount(Clientes),
|
|
107
|
+
ServiceCount = Table.RowCount(Servicios),
|
|
108
|
+
ProjectsBase = Table.FromList(List.Numbers(1, ProjectCount), Splitter.SplitByNothing(), {"ProyectoNr"}),
|
|
109
|
+
EquiposBase = Table.FromList(List.Numbers(1, EquipoCount), Splitter.SplitByNothing(), {"EquipoNr"}),
|
|
110
|
+
AddProjects = Table.AddColumn(AddSemanaIndex, "Proyectos", each ProjectsBase),
|
|
111
|
+
ExpandProjects = Table.ExpandTableColumn(AddProjects, "Proyectos", {"ProyectoNr"}, {"ProyectoNr"}),
|
|
112
|
+
AddEquipos = Table.AddColumn(ExpandProjects, "Equipos", each EquiposBase),
|
|
113
|
+
ExpandEquipos = Table.ExpandTableColumn(AddEquipos, "Equipos", {"EquipoNr"}, {"EquipoNr"}),
|
|
114
|
+
AddValue = Table.AddColumn(ExpandEquipos, "Value", each [SemanaIndex] * ProjectCount * EquipoCount + ([ProyectoNr] - 1) * EquipoCount + [EquipoNr], Int64.Type),
|
|
115
|
+
AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ProyectoNr] + [EquipoNr] + [SemanaIndex], 7))})}), type date),
|
|
116
|
+
#"Con EjecucionProyectoId" = Table.AddColumn(AddFecha, "EjecucionProyectoId", each EntityCode("EjecucionProyecto", [Value]), type text),
|
|
117
|
+
#"Con ProyectoId" = Table.AddColumn(#"Con EjecucionProyectoId", "ProyectoId", each EntityCode("Proyecto", [ProyectoNr]), type text),
|
|
118
|
+
#"Con ClienteId" = Table.AddColumn(#"Con ProyectoId", "ClienteId", each EntityCode("Cliente", Number.Mod([ProyectoNr] * 17 + [EquipoNr] * 11 + [SemanaIndex] - 1, ClienteCount) + 1), type text),
|
|
119
|
+
#"Con ServicioId" = Table.AddColumn(#"Con ClienteId", "ServicioId", each EntityCode("Servicio", Number.Mod([ProyectoNr] + [EquipoNr] + [SemanaIndex] - 1, ServiceCount) + 1), type text),
|
|
120
|
+
#"Con EquipoId" = Table.AddColumn(#"Con ServicioId", "EquipoId", each EntityCode("Equipo", [EquipoNr]), type text),
|
|
121
|
+
#"Con Estado ejecución" = Table.AddColumn(#"Con EquipoId", "Estado ejecución", each let r = Number.Mod([Value], 5) in if r = 0 then "En riesgo" else if r = 3 then "Cerrado" else "Activo", type text),
|
|
122
|
+
#"Con Avance" = Table.AddColumn(#"Con Estado ejecución", "Avance", each (20 + Number.Mod([Value] * 7, 80)) / 100, type number),
|
|
123
|
+
#"Con Ingresos Base" = Table.AddColumn(#"Con Avance", "Ingresos Base", each 12000 + Number.Mod([Value] * 1777 + [SemanaIndex] * 149, 75000), type number),
|
|
124
|
+
#"Con Costos Base" = Table.AddColumn(#"Con Ingresos Base", "Costos Base", each 8000 + Number.Mod([Value] * 1249 + [SemanaIndex] * 131, 62000), type number),
|
|
125
|
+
#"Con Presupuesto Base" = Table.AddColumn(#"Con Costos Base", "Presupuesto Base", each 14000 + Number.Mod([Value] * 1667 + [SemanaIndex] * 163, 76000), type number),
|
|
126
|
+
#"Con Data" = Table.AddColumn(#"Con Presupuesto Base", "Data", each "Demo", type text),
|
|
127
|
+
Result = Table.SelectColumns(#"Con Data", {"EjecucionProyectoId", "Fecha", "ProyectoId", "ClienteId", "ServicioId", "EquipoId", "Estado ejecución", "Avance", "Ingresos Base", "Costos Base", "Presupuesto Base", "Data"})
|
|
128
|
+
in
|
|
129
|
+
Result
|
|
130
|
+
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/// Hecho demo de entregas para analizar cumplimiento operativo asociado a productos y servicios.
|
|
2
|
+
table Entregas
|
|
3
|
+
isHidden
|
|
4
|
+
lineageTag: 10a8bccd-5fe8-4467-a253-3c62fdc61113
|
|
5
|
+
|
|
6
|
+
column EntregaId
|
|
7
|
+
dataType: string
|
|
8
|
+
isHidden
|
|
9
|
+
lineageTag: ac5fbfda-a670-4d16-a86b-0a44e66c5c85
|
|
10
|
+
sourceColumn: EntregaId
|
|
11
|
+
|
|
12
|
+
column Fecha
|
|
13
|
+
dataType: dateTime
|
|
14
|
+
formatString: Long Date
|
|
15
|
+
lineageTag: 89531d21-e7eb-4079-b610-9d830c54d7be
|
|
16
|
+
summarizeBy: none
|
|
17
|
+
sourceColumn: Fecha
|
|
18
|
+
|
|
19
|
+
annotation UnderlyingDateTimeDataType = Date
|
|
20
|
+
|
|
21
|
+
annotation SummarizationSetBy = Automatic
|
|
22
|
+
|
|
23
|
+
column ClienteId
|
|
24
|
+
dataType: string
|
|
25
|
+
isHidden
|
|
26
|
+
lineageTag: ebed0747-4f36-4c24-b1b5-5a2e18526eb1
|
|
27
|
+
sourceColumn: ClienteId
|
|
28
|
+
|
|
29
|
+
column CanalId
|
|
30
|
+
dataType: string
|
|
31
|
+
isHidden
|
|
32
|
+
lineageTag: 9ffaca7e-5d3d-421e-9531-d9da2efe191a
|
|
33
|
+
sourceColumn: CanalId
|
|
34
|
+
|
|
35
|
+
column ProductoId
|
|
36
|
+
dataType: string
|
|
37
|
+
isHidden
|
|
38
|
+
lineageTag: be3b37cd-a8cc-40cd-a265-8d9f2423d76c
|
|
39
|
+
sourceColumn: ProductoId
|
|
40
|
+
|
|
41
|
+
column ServicioId
|
|
42
|
+
dataType: string
|
|
43
|
+
isHidden
|
|
44
|
+
lineageTag: 071b8a59-c178-4acd-a76b-7e42ffdf3e02
|
|
45
|
+
sourceColumn: ServicioId
|
|
46
|
+
|
|
47
|
+
column Entregas
|
|
48
|
+
dataType: int64
|
|
49
|
+
lineageTag: e2d6fff8-0a55-4f7d-8a30-05c0b534ec6a
|
|
50
|
+
sourceColumn: Entregas
|
|
51
|
+
|
|
52
|
+
column 'Entregas A Tiempo'
|
|
53
|
+
dataType: int64
|
|
54
|
+
lineageTag: f6ab66f2-6e41-4edb-964c-3981a5b378bf
|
|
55
|
+
sourceColumn: Entregas A Tiempo
|
|
56
|
+
|
|
57
|
+
column Data
|
|
58
|
+
dataType: string
|
|
59
|
+
lineageTag: 8b994c7e-8bf5-4993-bf41-7dbbd5add0c1
|
|
60
|
+
sourceColumn: Data
|
|
61
|
+
|
|
62
|
+
partition Entregas = m
|
|
63
|
+
mode: import
|
|
64
|
+
queryGroup: 'Sample Dataset\Hechos'
|
|
65
|
+
source =
|
|
66
|
+
let
|
|
67
|
+
EntityCode = (entity as text, n as number) as text =>
|
|
68
|
+
let
|
|
69
|
+
CleanNumber = Number.From(n),
|
|
70
|
+
ToLetters = (value as number) as text =>
|
|
71
|
+
let
|
|
72
|
+
Current = Number.IntegerDivide(value, 1),
|
|
73
|
+
Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
|
|
74
|
+
Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
|
|
75
|
+
in
|
|
76
|
+
Prefix & Suffix,
|
|
77
|
+
BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
|
|
78
|
+
NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
|
|
79
|
+
CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
|
|
80
|
+
in
|
|
81
|
+
entity & BlockCode & NumberPart & CheckLetter,
|
|
82
|
+
CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
|
|
83
|
+
EndDate = List.Max(CalendarDates[Fecha]),
|
|
84
|
+
StartDate = List.Min(CalendarDates[Fecha]),
|
|
85
|
+
DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
|
|
86
|
+
WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
|
|
87
|
+
SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
|
|
88
|
+
AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
|
|
89
|
+
ClienteCount = Table.RowCount(Clientes),
|
|
90
|
+
ProductCount = Table.RowCount(Productos),
|
|
91
|
+
ServiceCount = Table.RowCount(Servicios),
|
|
92
|
+
ChannelCount = Table.RowCount(Canales),
|
|
93
|
+
ClientesBase = Table.FromList(List.Numbers(1, ClienteCount), Splitter.SplitByNothing(), {"ClienteNr"}),
|
|
94
|
+
AddClientes = Table.AddColumn(AddSemanaIndex, "Clientes", each ClientesBase),
|
|
95
|
+
ExpandClientes = Table.ExpandTableColumn(AddClientes, "Clientes", {"ClienteNr"}, {"ClienteNr"}),
|
|
96
|
+
AddValue = Table.AddColumn(ExpandClientes, "Value", each [SemanaIndex] * ClienteCount + [ClienteNr], Int64.Type),
|
|
97
|
+
AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ClienteNr] + [SemanaIndex], 7))})}), type date),
|
|
98
|
+
#"Con EntregaId" = Table.AddColumn(AddFecha, "EntregaId", each EntityCode("Entrega", [Value]), type text),
|
|
99
|
+
#"Con ClienteId" = Table.AddColumn(#"Con EntregaId", "ClienteId", each EntityCode("Cliente", [ClienteNr]), type text),
|
|
100
|
+
#"Con CanalId" = Table.AddColumn(#"Con ClienteId", "CanalId", each EntityCode("Canal", Number.Mod([ClienteNr] + [SemanaIndex] - 1, ChannelCount) + 1), type text),
|
|
101
|
+
#"Con ProductoId" = Table.AddColumn(#"Con CanalId", "ProductoId", each EntityCode("Producto", Number.Mod([ClienteNr] + [SemanaIndex] * 3 - 1, ProductCount) + 1), type text),
|
|
102
|
+
#"Con ServicioId" = Table.AddColumn(#"Con ProductoId", "ServicioId", each EntityCode("Servicio", Number.Mod([ClienteNr] + [SemanaIndex] * 5 - 1, ServiceCount) + 1), type text),
|
|
103
|
+
JoinClientes = Table.NestedJoin(#"Con ServicioId", {"ClienteId"}, Clientes, {"ClienteId"}, "Cliente", JoinKind.LeftOuter),
|
|
104
|
+
ExpandClientesDim = Table.ExpandTableColumn(JoinClientes, "Cliente", {"País", "Segmento"}, {"País", "Segmento"}),
|
|
105
|
+
JoinCanales = Table.NestedJoin(ExpandClientesDim, {"CanalId"}, Canales, {"CanalId"}, "Canal", JoinKind.LeftOuter),
|
|
106
|
+
ExpandCanales = Table.ExpandTableColumn(JoinCanales, "Canal", {"Canal", "Tipo de canal"}, {"Canal", "Tipo de canal"}),
|
|
107
|
+
#"Con Entregas" = Table.AddColumn(ExpandCanales, "Entregas", each 18 + Number.Mod([Value] * 5, 44), Int64.Type),
|
|
108
|
+
#"Con Delivery Rate" = Table.AddColumn(#"Con Entregas", "DeliveryRate", each
|
|
109
|
+
let
|
|
110
|
+
CountryRate = if [País] = "Chile" then 0.11 else if [País] = "España" then 0.10 else if [País] = "Brasil" then 0.08 else if [País] = "Mexico" then 0.06 else if [País] = "Haiti" then -0.16 else if [País] = "Cuba" then -0.13 else if [País] = "Nicaragua" then -0.11 else if [País] = "Bolivia" then -0.08 else 0,
|
|
111
|
+
SegmentRate = if [Segmento] = "Enterprise" then 0.05 else if [Segmento] = "Mid Market" then 0.01 else -0.04,
|
|
112
|
+
ChannelRate = if [Canal] = "Directo" then 0.05 else if [Canal] = "Partner" then 0.02 else if [Canal] = "Marketplace" then -0.03 else -0.06,
|
|
113
|
+
Noise = (Number.Mod([Value] * 7 + [SemanaIndex] * 3, 13) - 6) / 100
|
|
114
|
+
in
|
|
115
|
+
List.Min({0.96, List.Max({0.50, 0.72 + CountryRate + SegmentRate + ChannelRate + Noise})}),
|
|
116
|
+
type number),
|
|
117
|
+
#"Con Entregas A Tiempo" = Table.AddColumn(#"Con Delivery Rate", "Entregas A Tiempo", each Number.RoundDown([Entregas] * [DeliveryRate]), Int64.Type),
|
|
118
|
+
#"Con Data" = Table.AddColumn(#"Con Entregas A Tiempo", "Data", each "Demo", type text),
|
|
119
|
+
Result = Table.SelectColumns(#"Con Data", {"EntregaId", "Fecha", "ClienteId", "CanalId", "ProductoId", "ServicioId", "Entregas", "Entregas A Tiempo", "Data"})
|
|
120
|
+
in
|
|
121
|
+
Result
|
|
122
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// Tabla visible para filtrar el selector de métricas por equipo de análisis o job-to-be-done.
|
|
2
|
+
table 'Equipos métricas'
|
|
3
|
+
lineageTag: a98e02cd-4fe7-4c9a-a413-c3bf719a8f38
|
|
4
|
+
|
|
5
|
+
column Equipo
|
|
6
|
+
lineageTag: 15bc738d-2827-4f57-a219-1c45f5f71980
|
|
7
|
+
isNameInferred
|
|
8
|
+
sourceColumn: [Equipo]
|
|
9
|
+
sortByColumn: Orden
|
|
10
|
+
|
|
11
|
+
column Orden
|
|
12
|
+
lineageTag: 381cac36-c603-4ba8-9877-492353ba8771
|
|
13
|
+
isNameInferred
|
|
14
|
+
sourceColumn: [Orden]
|
|
15
|
+
|
|
16
|
+
column Descripción
|
|
17
|
+
lineageTag: b565c10d-0d95-4d50-93f3-eb37184680e9
|
|
18
|
+
isNameInferred
|
|
19
|
+
sourceColumn: [Descripción]
|
|
20
|
+
|
|
21
|
+
partition 'Equipos métricas' = calculated
|
|
22
|
+
mode: import
|
|
23
|
+
source =
|
|
24
|
+
DATATABLE (
|
|
25
|
+
"Equipo", STRING,
|
|
26
|
+
"Orden", INTEGER,
|
|
27
|
+
"Descripción", STRING,
|
|
28
|
+
{
|
|
29
|
+
{ "Ventas", 1, "Crecimiento, ventas y pipeline." },
|
|
30
|
+
{ "Marketing", 2, "Generación de demanda y eficiencia de campañas." },
|
|
31
|
+
{ "Clientes", 3, "Retención, experiencia y salud de clientes." },
|
|
32
|
+
{ "Operaciones", 4, "Entrega, capacidad y cumplimiento operativo." },
|
|
33
|
+
{ "Finanzas", 5, "Resultado económico, caja y presupuesto." },
|
|
34
|
+
{ "Producto", 6, "Portafolio, mix y desempeño de productos/servicios." },
|
|
35
|
+
{ "Personas", 7, "Talento, capacidad interna y utilización." },
|
|
36
|
+
{ "Proyectos", 8, "Ejecución, riesgo y rentabilidad de proyectos." },
|
|
37
|
+
{ "Dirección", 9, "Vista ejecutiva de las métricas transversales de la empresa." }
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
|