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