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.
Files changed (276) hide show
  1. package/.claude-plugin/marketplace.json +31 -0
  2. package/.claude-plugin/plugin.json +34 -0
  3. package/.claude-plugin/skill-manifest.json +79 -0
  4. package/.mcp.json +13 -0
  5. package/.plugin/plugin.json +14 -0
  6. package/LICENSE +21 -0
  7. package/README.md +849 -0
  8. package/bin/build-plugin.js +97 -0
  9. package/bin/cli.js +891 -0
  10. package/bin/commands/autoupdate.js +128 -0
  11. package/bin/commands/build-desktop.js +368 -0
  12. package/bin/commands/create-from-template.js +165 -0
  13. package/bin/commands/diff.js +435 -0
  14. package/bin/commands/install.js +542 -0
  15. package/bin/commands/lint.js +441 -0
  16. package/bin/commands/mcp-setup.js +255 -0
  17. package/bin/commands/session-update.js +204 -0
  18. package/bin/commands/smoke-test.js +20 -0
  19. package/bin/commands/uninstall.js +611 -0
  20. package/bin/commands/update-check.js +427 -0
  21. package/bin/commands/validate-cases.js +264 -0
  22. package/bin/commands/validate-projects.js +426 -0
  23. package/bin/commands/watch.js +251 -0
  24. package/bin/lib/agents.js +62 -0
  25. package/bin/lib/base-template-smoke.js +299 -0
  26. package/bin/lib/claude-hooks.js +160 -0
  27. package/bin/lib/generators/claude-plugin.js +529 -0
  28. package/bin/lib/generators/index.js +116 -0
  29. package/bin/lib/generators/shared.js +257 -0
  30. package/bin/lib/mcp-config.js +835 -0
  31. package/bin/lib/microsoft-mcp.js +206 -0
  32. package/bin/lib/powerbi-mcp-session.js +140 -0
  33. package/bin/lib/skills.js +164 -0
  34. package/bin/lib/template-scaffold.js +366 -0
  35. package/bin/mcp/powerbi-modeling-launcher.js +42 -0
  36. package/bin/postinstall.js +50 -0
  37. package/bin/utils/mcp-detect.js +346 -0
  38. package/bin/utils/tui.js +314 -0
  39. package/commands/bi-connect.md +520 -0
  40. package/commands/bi-dax.md +464 -0
  41. package/commands/bi-kickoff.md +550 -0
  42. package/commands/bi-modeling.md +485 -0
  43. package/commands/bi-performance.md +521 -0
  44. package/commands/bi-powerquery.md +229 -0
  45. package/commands/bi-refactor.md +249 -0
  46. package/commands/bi-scorecard.md +268 -0
  47. package/commands/bi-start.md +272 -0
  48. package/config.example.json +23 -0
  49. package/config.json +23 -0
  50. package/desktop-extension/manifest.json +30 -0
  51. package/desktop-extension/package.json +10 -0
  52. package/desktop-extension/server.js +137 -0
  53. package/package.json +94 -0
  54. package/skills/bi-connect/SKILL.md +522 -0
  55. package/skills/bi-connect/scripts/update-check.js +427 -0
  56. package/skills/bi-dax/SKILL.md +466 -0
  57. package/skills/bi-dax/scripts/update-check.js +427 -0
  58. package/skills/bi-kickoff/SKILL.md +552 -0
  59. package/skills/bi-kickoff/references/flow.html +78 -0
  60. package/skills/bi-kickoff/references/flow.md +62 -0
  61. package/skills/bi-kickoff/scripts/update-check.js +427 -0
  62. package/skills/bi-modeling/SKILL.md +487 -0
  63. package/skills/bi-modeling/scripts/update-check.js +427 -0
  64. package/skills/bi-performance/SKILL.md +523 -0
  65. package/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
  66. package/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
  67. package/skills/bi-performance/scripts/update-check.js +427 -0
  68. package/skills/bi-powerquery/SKILL.md +231 -0
  69. package/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
  70. package/skills/bi-powerquery/references/power-query-standards.md +74 -0
  71. package/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
  72. package/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
  73. package/skills/bi-powerquery/scripts/update-check.js +427 -0
  74. package/skills/bi-refactor/SKILL.md +251 -0
  75. package/skills/bi-refactor/references/flow.md +27 -0
  76. package/skills/bi-refactor/scripts/update-check.js +427 -0
  77. package/skills/bi-scorecard/SKILL.md +270 -0
  78. package/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
  79. package/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
  80. package/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
  81. package/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
  82. package/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
  83. package/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
  84. package/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
  85. package/skills/bi-scorecard/scripts/update-check.js +427 -0
  86. package/skills/bi-start/SKILL.md +274 -0
  87. package/skills/bi-start/scripts/update-check.js +427 -0
  88. package/src/content/base.md +197 -0
  89. package/src/content/mcp-requirements.json +57 -0
  90. package/src/content/routing.md +201 -0
  91. package/src/content/skills/bi-connect.md +493 -0
  92. package/src/content/skills/bi-dax.md +437 -0
  93. package/src/content/skills/bi-kickoff/SKILL.md +523 -0
  94. package/src/content/skills/bi-kickoff/references/flow.html +78 -0
  95. package/src/content/skills/bi-kickoff/references/flow.md +62 -0
  96. package/src/content/skills/bi-modeling.md +458 -0
  97. package/src/content/skills/bi-performance/SKILL.md +494 -0
  98. package/src/content/skills/bi-performance/scripts/install-tabular-editor.ps1 +159 -0
  99. package/src/content/skills/bi-performance/scripts/run-bpa.ps1 +265 -0
  100. package/src/content/skills/bi-powerquery/SKILL.md +202 -0
  101. package/src/content/skills/bi-powerquery/references/base-template-data-contract.md +323 -0
  102. package/src/content/skills/bi-powerquery/references/power-query-standards.md +74 -0
  103. package/src/content/skills/bi-powerquery/scripts/new-powerquery-staging.ps1 +371 -0
  104. package/src/content/skills/bi-powerquery/scripts/test-powerquery-contract.ps1 +225 -0
  105. package/src/content/skills/bi-refactor/SKILL.md +222 -0
  106. package/src/content/skills/bi-refactor/references/flow.md +27 -0
  107. package/src/content/skills/bi-scorecard/SKILL.md +241 -0
  108. package/src/content/skills/bi-scorecard/examples/base-template-scorecard-blueprint.expected.json +105 -0
  109. package/src/content/skills/bi-scorecard/examples/base-template-scorecard-overlay.json +82 -0
  110. package/src/content/skills/bi-scorecard/scripts/new-scorecard-blueprint-from-base-template.ps1 +124 -0
  111. package/src/content/skills/bi-scorecard/scripts/powerbi-goal-status-rules-api.ps1 +39 -0
  112. package/src/content/skills/bi-scorecard/scripts/powerbi-goal-values-api.ps1 +48 -0
  113. package/src/content/skills/bi-scorecard/scripts/powerbi-goals-api.ps1 +68 -0
  114. package/src/content/skills/bi-scorecard/scripts/powerbi-rest-common.ps1 +197 -0
  115. package/src/content/skills/bi-scorecard/scripts/powerbi-scorecards-api.ps1 +53 -0
  116. package/src/content/skills/bi-start.md +266 -0
  117. package/templates/base-template/AGENTS.md +33 -0
  118. package/templates/base-template/base-template.Report/.platform +11 -0
  119. package/templates/base-template/base-template.Report/StaticResources/RegisteredResources/BISuperpowers.json +3888 -0
  120. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/CY18SU07.json +177 -0
  121. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BaseThemes/Fluent2-CY26SU03.json +4104 -0
  122. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleCityPark.json +26 -0
  123. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleDefault.json +26 -0
  124. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleNeutral.json +26 -0
  125. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleOrchid.json +26 -0
  126. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/AccessibleTidal.json +26 -0
  127. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Bloom.json +139 -0
  128. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CityPark.json +40 -0
  129. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Classroom.json +40 -0
  130. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/ColorblindSafe.json +48 -0
  131. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/CopilotDefault.json +1861 -0
  132. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Divergent.json +127 -0
  133. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Electric.json +48 -0
  134. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Frontier.json +136 -0
  135. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/HighContrast.json +40 -0
  136. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Highrise.json +41 -0
  137. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Innovate.json +227 -0
  138. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/NewExecutive.json +41 -0
  139. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Solar.json +33 -0
  140. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Storm.json +25 -0
  141. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Sunset.json +48 -0
  142. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Temperature.json +33 -0
  143. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Tidal.json +100 -0
  144. package/templates/base-template/base-template.Report/StaticResources/SharedResources/BuiltInThemes/Twilight.json +40 -0
  145. package/templates/base-template/base-template.Report/definition/bookmarks/1d40d43c7ade66e8603c.bookmark.json +2297 -0
  146. package/templates/base-template/base-template.Report/definition/bookmarks/af068ff51c0ca3089ea7.bookmark.json +2300 -0
  147. package/templates/base-template/base-template.Report/definition/bookmarks/bookmarks.json +11 -0
  148. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/page.json +130 -0
  149. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/mobile.json +11 -0
  150. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/0352fd80d074693a65db/visual.json +669 -0
  151. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/mobile.json +11 -0
  152. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/1c5a14bf493697344b68/visual.json +723 -0
  153. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/mobile.json +11 -0
  154. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/3486cf7624c5b109b4e5/visual.json +333 -0
  155. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/mobile.json +11 -0
  156. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/4d8b989008edc0db28d1/visual.json +109 -0
  157. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/mobile.json +31 -0
  158. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/55e10ac7d76a1954f94f/visual.json +378 -0
  159. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/mobile.json +11 -0
  160. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/57f52ecf4490f70e4da1/visual.json +175 -0
  161. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/mobile.json +11 -0
  162. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/5f4d76bbc870118e9840/visual.json +468 -0
  163. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/mobile.json +11 -0
  164. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/73629e1abebb7a444b59/visual.json +359 -0
  165. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/mobile.json +11 -0
  166. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/749cb1388c7e0a88161c/visual.json +690 -0
  167. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/90677f13cea5d1275990/visual.json +17 -0
  168. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/mobile.json +11 -0
  169. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/92cf92e3da10493adb78/visual.json +468 -0
  170. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/mobile.json +10 -0
  171. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/9fe17b1971f68443fc15/visual.json +328 -0
  172. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/mobile.json +11 -0
  173. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a30bd0950630ed94e8a3/visual.json +578 -0
  174. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/mobile.json +11 -0
  175. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/a56e91d9400a835e4814/visual.json +432 -0
  176. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/mobile.json +11 -0
  177. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/aded24cd205c0b528642/visual.json +801 -0
  178. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/mobile.json +37 -0
  179. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/af34b26f14a8a724c9a9/visual.json +1318 -0
  180. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/b529688fe5a226643322/visual.json +209 -0
  181. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/mobile.json +11 -0
  182. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/c4c6f332d05e72e2eb06/visual.json +174 -0
  183. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/mobile.json +29 -0
  184. package/templates/base-template/base-template.Report/definition/pages/6a4808bb8bb9166f49ff/visuals/fa81f184e2cb0e8b087c/visual.json +241 -0
  185. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/page.json +130 -0
  186. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/mobile.json +11 -0
  187. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/07e9c4302e29029c5462/visual.json +690 -0
  188. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/mobile.json +11 -0
  189. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/109ceede4bc015b0c006/visual.json +468 -0
  190. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/mobile.json +11 -0
  191. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/118257e006d472277e10/visual.json +359 -0
  192. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/mobile.json +11 -0
  193. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/2caf02e0137c4a1280cc/visual.json +669 -0
  194. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/mobile.json +11 -0
  195. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/311e76fe3c9edad68204/visual.json +109 -0
  196. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/31c21f8cbeb3b208940a/visual.json +209 -0
  197. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/3ab72c25062437149b03/visual.json +17 -0
  198. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/mobile.json +11 -0
  199. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5959867442abcb0ce2b3/visual.json +788 -0
  200. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/mobile.json +11 -0
  201. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/5b96e0f88d192b044a13/visual.json +592 -0
  202. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/mobile.json +11 -0
  203. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/64e749a63d0786000e22/visual.json +468 -0
  204. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/mobile.json +11 -0
  205. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/7ae1ca604edac6586ad0/visual.json +1310 -0
  206. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/mobile.json +11 -0
  207. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/840300733885141a6603/visual.json +175 -0
  208. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/mobile.json +11 -0
  209. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/a38448cdb203279273d2/visual.json +516 -0
  210. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d1e86f213a3841d12e20/visual.json +328 -0
  211. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/mobile.json +11 -0
  212. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d4a484c1bcc8ee3075e2/visual.json +432 -0
  213. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/mobile.json +11 -0
  214. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/d87cb5cf06acca19bbb5/visual.json +241 -0
  215. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/mobile.json +11 -0
  216. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/e243da2677209ed69408/visual.json +174 -0
  217. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/mobile.json +11 -0
  218. package/templates/base-template/base-template.Report/definition/pages/9a5b670b015cab882629/visuals/f3aaf24f5b22b67573b0/visual.json +333 -0
  219. package/templates/base-template/base-template.Report/definition/pages/pages.json +8 -0
  220. package/templates/base-template/base-template.Report/definition/report.json +89 -0
  221. package/templates/base-template/base-template.Report/definition/version.json +4 -0
  222. package/templates/base-template/base-template.Report/definition.pbir +9 -0
  223. package/templates/base-template/base-template.SemanticModel/.platform +11 -0
  224. package/templates/base-template/base-template.SemanticModel/definition/cultures/es-AR.tmdl +11185 -0
  225. package/templates/base-template/base-template.SemanticModel/definition/database.tmdl +3 -0
  226. package/templates/base-template/base-template.SemanticModel/definition/expressions.tmdl +234 -0
  227. package/templates/base-template/base-template.SemanticModel/definition/functions.tmdl +637 -0
  228. package/templates/base-template/base-template.SemanticModel/definition/model.tmdl +82 -0
  229. package/templates/base-template/base-template.SemanticModel/definition/relationships.tmdl +271 -0
  230. package/templates/base-template/base-template.SemanticModel/definition/tables/Calendario.tmdl +200 -0
  231. package/templates/base-template/base-template.SemanticModel/definition/tables/Campa/303/261as.tmdl +75 -0
  232. package/templates/base-template/base-template.SemanticModel/definition/tables/Canales.tmdl +84 -0
  233. package/templates/base-template/base-template.SemanticModel/definition/tables/Clientes.tmdl +143 -0
  234. package/templates/base-template/base-template.SemanticModel/definition/tables/Devoluciones.tmdl +95 -0
  235. package/templates/base-template/base-template.SemanticModel/definition/tables/Ejecuci/303/263n proyectos.tmdl" +130 -0
  236. package/templates/base-template/base-template.SemanticModel/definition/tables/Entregas.tmdl +122 -0
  237. package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos m/303/251tricas.tmdl" +40 -0
  238. package/templates/base-template/base-template.SemanticModel/definition/tables/Equipos.tmdl +73 -0
  239. package/templates/base-template/base-template.SemanticModel/definition/tables/Horas.tmdl +122 -0
  240. package/templates/base-template/base-template.SemanticModel/definition/tables/Interacciones clientes.tmdl +146 -0
  241. package/templates/base-template/base-template.SemanticModel/definition/tables/Leads.tmdl +119 -0
  242. package/templates/base-template/base-template.SemanticModel/definition/tables/Monedas.tmdl +44 -0
  243. package/templates/base-template/base-template.SemanticModel/definition/tables/Movimientos financieros.tmdl +145 -0
  244. package/templates/base-template/base-template.SemanticModel/definition/tables/M/303/251tricas.tmdl +1294 -0
  245. package/templates/base-template/base-template.SemanticModel/definition/tables/N/303/263mina.tmdl +110 -0
  246. package/templates/base-template/base-template.SemanticModel/definition/tables/Oportunidades.tmdl +135 -0
  247. package/templates/base-template/base-template.SemanticModel/definition/tables/Presupuesto.tmdl +125 -0
  248. package/templates/base-template/base-template.SemanticModel/definition/tables/Productos.tmdl +98 -0
  249. package/templates/base-template/base-template.SemanticModel/definition/tables/Proyectos.tmdl +77 -0
  250. package/templates/base-template/base-template.SemanticModel/definition/tables/Servicios.tmdl +75 -0
  251. package/templates/base-template/base-template.SemanticModel/definition/tables/Tareas proyecto.tmdl +102 -0
  252. package/templates/base-template/base-template.SemanticModel/definition/tables/Tipo de cambio.tmdl +67 -0
  253. package/templates/base-template/base-template.SemanticModel/definition/tables/Ventas.tmdl +180 -0
  254. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux An/303/241lisis dimensiones.tmdl" +38 -0
  255. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Comparaciones.tmdl +227 -0
  256. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Compatibilidad m/303/251trica-dimensi/303/263n.tmdl" +68 -0
  257. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modelo configuraci/303/263n.tmdl" +44 -0
  258. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Modo fechas.tmdl +36 -0
  259. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux M/303/251trica-Equipo.tmdl" +102 -0
  260. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Overrides m/303/251trica-dimensi/303/263n.tmdl" +54 -0
  261. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Per/303/255odos.tmdl" +182 -0
  262. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas modo.tmdl +36 -0
  263. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Rango fechas.tmdl +27 -0
  264. package/templates/base-template/base-template.SemanticModel/definition/tables/_Aux Vista de calendario.tmdl +30 -0
  265. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC C/303/241lculo.tmdl" +70 -0
  266. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Eje X.tmdl +63 -0
  267. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC M/303/251trica.tmdl" +374 -0
  268. package/templates/base-template/base-template.SemanticModel/definition/tables/_GC Tipo c/303/241lculo.tmdl" +223 -0
  269. package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Dimensi/303/263n.tmdl" +98 -0
  270. package/templates/base-template/base-template.SemanticModel/definition/tables/_PC Eje X.tmdl +68 -0
  271. package/templates/base-template/base-template.SemanticModel/definition/tables//303/223rdenes servicio.tmdl" +151 -0
  272. package/templates/base-template/base-template.SemanticModel/definition.pbism +5 -0
  273. package/templates/base-template/base-template.SemanticModel/diagramLayout.json +568 -0
  274. package/templates/base-template/base-template.pbip +14 -0
  275. package/templates/base-template/template.manifest.json +41 -0
  276. 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
+
@@ -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
+