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,73 @@
1
+ /// Dimensión demo de equipos internos para analizar personas, operaciones y proyectos sin exponer tablas técnicas al usuario.
2
+ table Equipos
3
+ lineageTag: 7c8aa83b-ccd1-4630-9483-64f58af8013a
4
+
5
+ column EquipoId
6
+ dataType: string
7
+ isHidden
8
+ lineageTag: 6a45ada5-dd38-40a0-a1e3-85780a6f2d19
9
+ sourceColumn: EquipoId
10
+
11
+ column Equipo
12
+ dataType: string
13
+ lineageTag: 0bd52f38-3740-456a-8ba7-9e9d78b37317
14
+ sourceColumn: Equipo
15
+
16
+ column 'Área equipo'
17
+ dataType: string
18
+ lineageTag: 65818ab8-afdf-407b-ac2a-a5f6f37f927a
19
+ sourceColumn: Área equipo
20
+
21
+ column Seniority
22
+ dataType: string
23
+ lineageTag: 745b1120-f8d0-4ee5-99a2-c9d09d90040d
24
+ sourceColumn: Seniority
25
+
26
+ column Data
27
+ dataType: string
28
+ isHidden
29
+ lineageTag: 36ba5ee1-2423-40e5-a472-b6a02f685375
30
+ sourceColumn: Data
31
+
32
+ partition Equipos = m
33
+ mode: import
34
+ queryGroup: 'Sample Dataset\Dimensiones'
35
+ source =
36
+ let
37
+ EntityCode = (entity as text, n as number) as text =>
38
+ let
39
+ CleanNumber = Number.From(n),
40
+ ToLetters = (value as number) as text =>
41
+ let
42
+ Current = Number.IntegerDivide(value, 1),
43
+ Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
44
+ Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
45
+ in
46
+ Prefix & Suffix,
47
+ BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
48
+ NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
49
+ CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
50
+ in
51
+ entity & BlockCode & NumberPart & CheckLetter,
52
+ Source = #table(
53
+ type table [EquipoId = Int64.Type, Equipo = text, #"Área equipo" = text, Seniority = text],
54
+ {
55
+ {1, "Revenue Ops", "Comercial", "Mixto"},
56
+ {2, "Growth Studio", "Marketing", "Mixto"},
57
+ {3, "Customer Success", "Clientes", "Senior"},
58
+ {4, "Delivery Services", "Operaciones", "Mixto"},
59
+ {5, "Finance Lab", "Finanzas", "Senior"},
60
+ {6, "People Ops", "Personas", "Mixto"}
61
+ }
62
+ ),
63
+ #"Tipo cambiado" = Table.TransformColumnTypes(Source, {{"EquipoId", Int64.Type}, {"Equipo", type text}, {"Área equipo", type text}, {"Seniority", type text}}, "es-ES"),
64
+ AddData = Table.AddColumn(#"Tipo cambiado", "Data", each "Demo", type text),
65
+ AddEquipoCodigo = Table.AddColumn(AddData, "EquipoCodigo", each EntityCode("Equipo", [EquipoId]), type text),
66
+ SelectForOutput = Table.SelectColumns(AddEquipoCodigo, {"Data", "EquipoCodigo", "Equipo", "Área equipo", "Seniority"}),
67
+ Result = Table.RenameColumns(SelectForOutput, {{"EquipoCodigo", "EquipoId"}}),
68
+ #"Tipo final" = Table.TransformColumnTypes(Result, {{"Data", type text}, {"EquipoId", type text}, {"Equipo", type text}, {"Área equipo", type text}, {"Seniority", type text}}, "es-ES")
69
+ in
70
+ #"Tipo final"
71
+
72
+ annotation PBI_ResultType = Table
73
+
@@ -0,0 +1,122 @@
1
+ /// Hecho demo de horas trabajadas, facturables y ausentes para personas y proyectos.
2
+ table Horas
3
+ isHidden
4
+ lineageTag: 577cea86-a6df-4e83-ac03-0a45f610da10
5
+
6
+ column HoraId
7
+ dataType: string
8
+ isHidden
9
+ lineageTag: a292ee1f-8053-43fa-912b-e3b2552245de
10
+ sourceColumn: HoraId
11
+
12
+ column Fecha
13
+ dataType: dateTime
14
+ formatString: Long Date
15
+ lineageTag: c612c3e0-3ef1-4bc7-bfdd-7f91cd22edc9
16
+ summarizeBy: none
17
+ sourceColumn: Fecha
18
+
19
+ annotation UnderlyingDateTimeDataType = Date
20
+
21
+ annotation SummarizationSetBy = Automatic
22
+
23
+ column EquipoId
24
+ dataType: string
25
+ isHidden
26
+ lineageTag: ec74cdd6-a793-40ce-872e-270b70263a8c
27
+ sourceColumn: EquipoId
28
+
29
+ column ProyectoId
30
+ dataType: string
31
+ isHidden
32
+ lineageTag: c06fcd40-f0fb-4e78-889f-53be32b64d03
33
+ sourceColumn: ProyectoId
34
+
35
+ column ServicioId
36
+ dataType: string
37
+ isHidden
38
+ lineageTag: 97fb1b9b-5347-44ec-9973-ecdf743e01d7
39
+ sourceColumn: ServicioId
40
+
41
+ column 'Horas Planificadas'
42
+ dataType: double
43
+ lineageTag: 2b6cb0b8-6f58-45c3-9d51-6e72d7c2a561
44
+ sourceColumn: Horas Planificadas
45
+
46
+ column 'Horas Trabajadas'
47
+ dataType: double
48
+ lineageTag: e03a2f71-885e-4d01-963e-832b9b698d4a
49
+ sourceColumn: Horas Trabajadas
50
+
51
+ column 'Horas Facturables'
52
+ dataType: double
53
+ lineageTag: bb9488eb-e50e-44aa-a0dd-4ac463150b67
54
+ sourceColumn: Horas Facturables
55
+
56
+ column 'Horas Disponibles'
57
+ dataType: double
58
+ lineageTag: 03b13fc6-6bd5-4658-982e-e203208fc583
59
+ sourceColumn: Horas Disponibles
60
+
61
+ column 'Horas Ausentes'
62
+ dataType: double
63
+ lineageTag: fc01e651-3379-4096-824a-a00249e7c777
64
+ sourceColumn: Horas Ausentes
65
+
66
+ column Data
67
+ dataType: string
68
+ lineageTag: a0aaa98a-7663-4f66-b62e-81c4508dfc19
69
+ sourceColumn: Data
70
+
71
+ partition Horas = m
72
+ mode: import
73
+ queryGroup: 'Sample Dataset\Hechos'
74
+ source =
75
+ let
76
+ EntityCode = (entity as text, n as number) as text =>
77
+ let
78
+ CleanNumber = Number.From(n),
79
+ ToLetters = (value as number) as text =>
80
+ let
81
+ Current = Number.IntegerDivide(value, 1),
82
+ Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
83
+ Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
84
+ in
85
+ Prefix & Suffix,
86
+ BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
87
+ NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
88
+ CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
89
+ in
90
+ entity & BlockCode & NumberPart & CheckLetter,
91
+ CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
92
+ EndDate = List.Max(CalendarDates[Fecha]),
93
+ StartDate = List.Min(CalendarDates[Fecha]),
94
+ DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
95
+ WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
96
+ SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
97
+ AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
98
+ ProjectCount = Table.RowCount(Proyectos),
99
+ EquipoCount = Table.RowCount(Equipos),
100
+ ServiceCount = Table.RowCount(Servicios),
101
+ ProjectsBase = Table.FromList(List.Numbers(1, ProjectCount), Splitter.SplitByNothing(), {"ProyectoNr"}),
102
+ EquiposBase = Table.FromList(List.Numbers(1, EquipoCount), Splitter.SplitByNothing(), {"EquipoNr"}),
103
+ AddProjects = Table.AddColumn(AddSemanaIndex, "Proyectos", each ProjectsBase),
104
+ ExpandProjects = Table.ExpandTableColumn(AddProjects, "Proyectos", {"ProyectoNr"}, {"ProyectoNr"}),
105
+ AddEquipos = Table.AddColumn(ExpandProjects, "Equipos", each EquiposBase),
106
+ ExpandEquipos = Table.ExpandTableColumn(AddEquipos, "Equipos", {"EquipoNr"}, {"EquipoNr"}),
107
+ AddValue = Table.AddColumn(ExpandEquipos, "Value", each [SemanaIndex] * ProjectCount * EquipoCount + ([ProyectoNr] - 1) * EquipoCount + [EquipoNr], Int64.Type),
108
+ AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ProyectoNr] + [EquipoNr] + [SemanaIndex], 7))})}), type date),
109
+ #"Con HoraId" = Table.AddColumn(AddFecha, "HoraId", each EntityCode("Hora", [Value]), type text),
110
+ #"Con EquipoId" = Table.AddColumn(#"Con HoraId", "EquipoId", each EntityCode("Equipo", [EquipoNr]), type text),
111
+ #"Con ProyectoId" = Table.AddColumn(#"Con EquipoId", "ProyectoId", each EntityCode("Proyecto", [ProyectoNr]), type text),
112
+ #"Con ServicioId" = Table.AddColumn(#"Con ProyectoId", "ServicioId", each EntityCode("Servicio", Number.Mod([ProyectoNr] + [EquipoNr] + [SemanaIndex] - 1, ServiceCount) + 1), type text),
113
+ #"Con Horas Planificadas" = Table.AddColumn(#"Con ServicioId", "Horas Planificadas", each 160 + Number.Mod([Value] * 3, 80), type number),
114
+ #"Con Horas Trabajadas" = Table.AddColumn(#"Con Horas Planificadas", "Horas Trabajadas", each 140 + Number.Mod([Value] * 5, 95), type number),
115
+ #"Con Horas Facturables" = Table.AddColumn(#"Con Horas Trabajadas", "Horas Facturables", each 95 + Number.Mod([Value] * 7, 80), type number),
116
+ #"Con Horas Disponibles" = Table.AddColumn(#"Con Horas Facturables", "Horas Disponibles", each 170 + Number.Mod([Value] * 4, 80), type number),
117
+ #"Con Horas Ausentes" = Table.AddColumn(#"Con Horas Disponibles", "Horas Ausentes", each Number.Mod([Value] * 2, 18), type number),
118
+ #"Con Data" = Table.AddColumn(#"Con Horas Ausentes", "Data", each "Demo", type text),
119
+ Result = Table.SelectColumns(#"Con Data", {"HoraId", "Fecha", "EquipoId", "ProyectoId", "ServicioId", "Horas Planificadas", "Horas Trabajadas", "Horas Facturables", "Horas Disponibles", "Horas Ausentes", "Data"})
120
+ in
121
+ Result
122
+
@@ -0,0 +1,146 @@
1
+ /// Hecho demo de experiencia de cliente: NPS, reclamos, churn y tiempos de respuesta.
2
+ table 'Interacciones clientes'
3
+ isHidden
4
+ lineageTag: 2776d1db-1190-4678-9b91-419f41c340ea
5
+
6
+ column InteraccionId
7
+ dataType: string
8
+ isHidden
9
+ lineageTag: ab332507-1a7d-4404-9c4b-9873ee7319cd
10
+ sourceColumn: InteraccionId
11
+
12
+ column Fecha
13
+ dataType: dateTime
14
+ formatString: Long Date
15
+ lineageTag: 4a5bb8dd-50c5-4b51-80ab-7e82bbf842b7
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: c992c1e0-ca67-4fed-886b-a280d1e5eb0b
27
+ sourceColumn: ClienteId
28
+
29
+ column CanalId
30
+ dataType: string
31
+ isHidden
32
+ lineageTag: 807e53d7-36b9-4c77-b6b8-55b7ca60d8cf
33
+ sourceColumn: CanalId
34
+
35
+ column ProductoId
36
+ dataType: string
37
+ isHidden
38
+ lineageTag: f55ba5da-eefc-4f0e-ba42-aeacb57cc82a
39
+ sourceColumn: ProductoId
40
+
41
+ column ServicioId
42
+ dataType: string
43
+ isHidden
44
+ lineageTag: a06ec792-7239-434f-bb4b-3246418939c9
45
+ sourceColumn: ServicioId
46
+
47
+ column 'Clientes Inicio'
48
+ dataType: int64
49
+ lineageTag: f1a61690-ff2c-4984-aaf6-5c03246456d7
50
+ sourceColumn: Clientes Inicio
51
+
52
+ column 'Clientes Perdidos'
53
+ dataType: int64
54
+ lineageTag: 899797ed-4df3-4509-a41d-5b082af9979c
55
+ sourceColumn: Clientes Perdidos
56
+
57
+ column NPS
58
+ dataType: int64
59
+ lineageTag: 7aaf516f-6438-4f59-ba3b-fa79b2def3c4
60
+ sourceColumn: NPS
61
+
62
+ column Reclamos
63
+ dataType: int64
64
+ lineageTag: 9b6e0ae4-d231-4714-b7af-030d5d16f80e
65
+ sourceColumn: Reclamos
66
+
67
+ column 'Tiempo Respuesta Horas'
68
+ dataType: double
69
+ lineageTag: 596aad22-eb65-42d8-9a1d-ac01f9d306fe
70
+ sourceColumn: Tiempo Respuesta Horas
71
+
72
+ column Data
73
+ dataType: string
74
+ lineageTag: 4c1c25a9-2f9b-459f-92ac-d5158bf4d7c2
75
+ sourceColumn: Data
76
+
77
+ partition 'Interacciones clientes' = 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
+ ClienteCount = Table.RowCount(Clientes),
105
+ ProductCount = Table.RowCount(Productos),
106
+ ServiceCount = Table.RowCount(Servicios),
107
+ ChannelCount = Table.RowCount(Canales),
108
+ ClientesBase = Table.FromList(List.Numbers(1, ClienteCount), Splitter.SplitByNothing(), {"ClienteNr"}),
109
+ AddClientes = Table.AddColumn(AddSemanaIndex, "Clientes", each ClientesBase),
110
+ ExpandClientes = Table.ExpandTableColumn(AddClientes, "Clientes", {"ClienteNr"}, {"ClienteNr"}),
111
+ AddValue = Table.AddColumn(ExpandClientes, "Value", each [SemanaIndex] * ClienteCount + [ClienteNr], Int64.Type),
112
+ AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ClienteNr] + [SemanaIndex], 7))})}), type date),
113
+ #"Con InteraccionId" = Table.AddColumn(AddFecha, "InteraccionId", each EntityCode("Interaccion", [Value]), type text),
114
+ #"Con ClienteId" = Table.AddColumn(#"Con InteraccionId", "ClienteId", each EntityCode("Cliente", [ClienteNr]), type text),
115
+ #"Con CanalId" = Table.AddColumn(#"Con ClienteId", "CanalId", each EntityCode("Canal", Number.Mod([ClienteNr] + [SemanaIndex] - 1, ChannelCount) + 1), type text),
116
+ #"Con ProductoId" = Table.AddColumn(#"Con CanalId", "ProductoId", each EntityCode("Producto", Number.Mod([ClienteNr] + [SemanaIndex] * 3 - 1, ProductCount) + 1), type text),
117
+ #"Con ServicioId" = Table.AddColumn(#"Con ProductoId", "ServicioId", each EntityCode("Servicio", Number.Mod([ClienteNr] + [SemanaIndex] * 5 - 1, ServiceCount) + 1), type text),
118
+ JoinClientes = Table.NestedJoin(#"Con ServicioId", {"ClienteId"}, Clientes, {"ClienteId"}, "Cliente", JoinKind.LeftOuter),
119
+ ExpandClientesDim = Table.ExpandTableColumn(JoinClientes, "Cliente", {"País", "Segmento"}, {"País", "Segmento"}),
120
+ JoinCanales = Table.NestedJoin(ExpandClientesDim, {"CanalId"}, Canales, {"CanalId"}, "Canal", JoinKind.LeftOuter),
121
+ ExpandCanales = Table.ExpandTableColumn(JoinCanales, "Canal", {"Canal", "Tipo de canal"}, {"Canal", "Tipo de canal"}),
122
+ #"Con Risk Score" = Table.AddColumn(ExpandCanales, "RiskScore", each
123
+ let
124
+ CountryRisk = if [País] = "Haiti" then 15 else if [País] = "Cuba" then 13 else if [País] = "Nicaragua" then 11 else if [País] = "Bolivia" then 9 else if [País] = "Paraguay" then 8 else if [País] = "El Salvador" then 8 else if [País] = "Brasil" then -7 else if [País] = "España" then -6 else if [País] = "Mexico" then -5 else if [País] = "Chile" then -4 else 0,
125
+ SegmentRisk = if [Segmento] = "Enterprise" then -6 else if [Segmento] = "Mid Market" then 1 else 7,
126
+ ChannelRisk = if [Canal] = "Directo" then -5 else if [Canal] = "Partner" then 1 else if [Canal] = "Marketplace" then 4 else 8,
127
+ AgingRisk = if [SemanaIndex] >= 78 then -3 else if [SemanaIndex] >= 52 then 1 else 4
128
+ in
129
+ CountryRisk + SegmentRisk + ChannelRisk + AgingRisk,
130
+ type number),
131
+ #"Con Clientes Inicio" = Table.AddColumn(#"Con Risk Score", "Clientes Inicio", each 145 + Number.Mod([Value] * 3, 70) + (if [Segmento] = "Enterprise" then 55 else if [Segmento] = "Mid Market" then 25 else 0), Int64.Type),
132
+ #"Con Clientes Perdidos" = Table.AddColumn(#"Con Clientes Inicio", "Clientes Perdidos", each
133
+ let
134
+ RawLost = 3 + Number.Mod([Value] + Number.Round([RiskScore] * 2, 0), 20),
135
+ AdjustedLost = RawLost + (if [RiskScore] > 10 then 8 else if [RiskScore] > 4 then 4 else if [RiskScore] < -8 then -3 else 0)
136
+ in
137
+ Number.RoundDown(List.Min({[Clientes Inicio] - 1, List.Max({0, AdjustedLost})})),
138
+ Int64.Type),
139
+ #"Con NPS" = Table.AddColumn(#"Con Clientes Perdidos", "NPS", each Number.Round(List.Min({88, List.Max({18, 68 - [RiskScore] * 1.9 + Number.Mod([Value] * 5 + [SemanaIndex], 21) - 10})}), 0), Int64.Type),
140
+ #"Con Reclamos" = Table.AddColumn(#"Con NPS", "Reclamos", each Number.RoundDown(List.Max({1, 4 + Number.Mod([Value] * 2, 18) + [RiskScore] / 2})), Int64.Type),
141
+ #"Con Tiempo Respuesta Horas" = Table.AddColumn(#"Con Reclamos", "Tiempo Respuesta Horas", each Number.Round(List.Min({24, List.Max({1.5, 5.2 + [RiskScore] * 0.28 + Number.Mod([Value] * 3, 18) / 2})}), 2), type number),
142
+ #"Con Data" = Table.AddColumn(#"Con Tiempo Respuesta Horas", "Data", each "Demo", type text),
143
+ Result = Table.SelectColumns(#"Con Data", {"InteraccionId", "Fecha", "ClienteId", "CanalId", "ProductoId", "ServicioId", "Clientes Inicio", "Clientes Perdidos", "NPS", "Reclamos", "Tiempo Respuesta Horas", "Data"})
144
+ in
145
+ Result
146
+
@@ -0,0 +1,119 @@
1
+ /// Hecho demo de marketing con leads, MQLs, inversión y ventas atribuidas.
2
+ table Leads
3
+ isHidden
4
+ lineageTag: e3376acf-2ee9-496e-91c7-e98fd0781fc8
5
+
6
+ column LeadBatchId
7
+ dataType: string
8
+ isHidden
9
+ lineageTag: 61d36478-3647-4253-a521-ed3aa08e8be5
10
+ sourceColumn: LeadBatchId
11
+
12
+ column Fecha
13
+ dataType: dateTime
14
+ formatString: Long Date
15
+ lineageTag: 4a286859-3e21-4c1a-ad96-c809cc79b657
16
+ summarizeBy: none
17
+ sourceColumn: Fecha
18
+
19
+ annotation UnderlyingDateTimeDataType = Date
20
+
21
+ annotation SummarizationSetBy = Automatic
22
+
23
+ column CampañaId
24
+ dataType: string
25
+ isHidden
26
+ lineageTag: 1b85b592-86a0-46e7-9882-5d49427418ed
27
+ sourceColumn: CampañaId
28
+
29
+ column CanalId
30
+ dataType: string
31
+ isHidden
32
+ lineageTag: 6c425811-0356-4864-8974-89f432598155
33
+ sourceColumn: CanalId
34
+
35
+ column ClienteId
36
+ dataType: string
37
+ isHidden
38
+ lineageTag: 21b56e6f-995a-4dbc-9918-7c92156750af
39
+ sourceColumn: ClienteId
40
+
41
+ column Leads
42
+ dataType: int64
43
+ lineageTag: 96d2344b-0ec8-491d-9298-a17c1a8aa2fc
44
+ sourceColumn: Leads
45
+
46
+ column MQLs
47
+ dataType: int64
48
+ lineageTag: d028f013-bb38-48ff-8936-59cd577f611c
49
+ sourceColumn: MQLs
50
+
51
+ column 'Clientes ganados'
52
+ dataType: int64
53
+ lineageTag: 8ccc22fc-7f9b-4f8f-962a-f6378ab52733
54
+ sourceColumn: Clientes ganados
55
+
56
+ column 'Costo Base'
57
+ dataType: double
58
+ lineageTag: 0f61bd65-1130-42f3-be2e-861b4a64c100
59
+ sourceColumn: Costo Base
60
+
61
+ column 'Ventas Atribuidas Base'
62
+ dataType: double
63
+ lineageTag: 84716c33-954c-4a79-a5f3-307fa5db925e
64
+ sourceColumn: Ventas Atribuidas Base
65
+
66
+ column Data
67
+ dataType: string
68
+ lineageTag: 91afdb61-2fd5-4417-a29f-533af3211edc
69
+ sourceColumn: Data
70
+
71
+ partition Leads = m
72
+ mode: import
73
+ queryGroup: 'Sample Dataset\Hechos'
74
+ source =
75
+ let
76
+ EntityCode = (entity as text, n as number) as text =>
77
+ let
78
+ CleanNumber = Number.From(n),
79
+ ToLetters = (value as number) as text =>
80
+ let
81
+ Current = Number.IntegerDivide(value, 1),
82
+ Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
83
+ Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
84
+ in
85
+ Prefix & Suffix,
86
+ BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
87
+ NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
88
+ CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
89
+ in
90
+ entity & BlockCode & NumberPart & CheckLetter,
91
+ CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
92
+ EndDate = List.Max(CalendarDates[Fecha]),
93
+ StartDate = List.Min(CalendarDates[Fecha]),
94
+ DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
95
+ WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
96
+ SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
97
+ AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
98
+ ClienteCount = Table.RowCount(Clientes),
99
+ CampaignCount = Table.RowCount(Campañas),
100
+ ChannelCount = Table.RowCount(Canales),
101
+ ClientesBase = Table.FromList(List.Numbers(1, ClienteCount), Splitter.SplitByNothing(), {"ClienteNr"}),
102
+ AddClientes = Table.AddColumn(AddSemanaIndex, "Clientes", each ClientesBase),
103
+ ExpandClientes = Table.ExpandTableColumn(AddClientes, "Clientes", {"ClienteNr"}, {"ClienteNr"}),
104
+ AddValue = Table.AddColumn(ExpandClientes, "Value", each [SemanaIndex] * ClienteCount + [ClienteNr], Int64.Type),
105
+ AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ClienteNr] + [SemanaIndex], 7))})}), type date),
106
+ #"Con LeadBatchId" = Table.AddColumn(AddFecha, "LeadBatchId", each EntityCode("LeadBatch", [Value]), type text),
107
+ #"Con CampañaId" = Table.AddColumn(#"Con LeadBatchId", "CampañaId", each EntityCode("Campana", Number.Mod([ClienteNr] + [SemanaIndex] - 1, CampaignCount) + 1), type text),
108
+ #"Con CanalId" = Table.AddColumn(#"Con CampañaId", "CanalId", each EntityCode("Canal", Number.Mod([ClienteNr] + [SemanaIndex] - 1, ChannelCount) + 1), type text),
109
+ #"Con ClienteId" = Table.AddColumn(#"Con CanalId", "ClienteId", each EntityCode("Cliente", [ClienteNr]), type text),
110
+ #"Con Leads" = Table.AddColumn(#"Con ClienteId", "Leads", each 35 + Number.Mod([Value] * 11 + [SemanaIndex] * 3, 90), Int64.Type),
111
+ #"Con MQLs" = Table.AddColumn(#"Con Leads", "MQLs", each 12 + Number.Mod([Value] * 7 + [SemanaIndex], 45), Int64.Type),
112
+ #"Con Clientes ganados" = Table.AddColumn(#"Con MQLs", "Clientes ganados", each 2 + Number.Mod([Value], 9), Int64.Type),
113
+ #"Con Costo Base" = Table.AddColumn(#"Con Clientes ganados", "Costo Base", each 2400 + Number.Mod([Value] * 421 + [SemanaIndex] * 17, 8500), type number),
114
+ #"Con Ventas Atribuidas Base" = Table.AddColumn(#"Con Costo Base", "Ventas Atribuidas Base", each 9000 + Number.Mod([Value] * 1733 + [SemanaIndex] * 101, 48000), type number),
115
+ #"Con Data" = Table.AddColumn(#"Con Ventas Atribuidas Base", "Data", each "Demo", type text),
116
+ Result = Table.SelectColumns(#"Con Data", {"LeadBatchId", "Fecha", "CampañaId", "CanalId", "ClienteId", "Leads", "MQLs", "Clientes ganados", "Costo Base", "Ventas Atribuidas Base", "Data"})
117
+ in
118
+ Result
119
+
@@ -0,0 +1,44 @@
1
+ /// Selector desconectado de moneda de reporte, cargado desde Power Query para mantener el dataset de ejemplo fuera de DAX.
2
+ table Monedas
3
+ lineageTag: b7ee2bd9-23b2-416d-8794-e70029e343e8
4
+
5
+ column Moneda
6
+ dataType: string
7
+ lineageTag: 32e5f3f6-0e89-4a45-99af-d22fed0b43ef
8
+ summarizeBy: none
9
+ sourceColumn: Moneda
10
+
11
+ column Símbolo
12
+ dataType: string
13
+ isHidden
14
+ lineageTag: 94423e83-79d8-496b-8503-771be16c228c
15
+ summarizeBy: none
16
+ sourceColumn: Simbolo
17
+
18
+ column Orden
19
+ dataType: int64
20
+ isHidden
21
+ lineageTag: ba2a6509-9118-492d-a6e6-cb80f60f44be
22
+ summarizeBy: none
23
+ sourceColumn: Orden
24
+
25
+ partition Monedas = m
26
+ mode: import
27
+ queryGroup: 'Sample Dataset\Dimensiones'
28
+ source =
29
+ let
30
+ Source = #table(
31
+ type table [Moneda = text, Simbolo = text, Orden = Int64.Type],
32
+ {
33
+ { "USD", "$", 1 },
34
+ { "ARS", "$AR", 2 },
35
+ { "EUR", "€", 3 }
36
+ }
37
+ )
38
+ in
39
+ Source
40
+
41
+ annotation PBI_NavigationStepName = Navegación
42
+
43
+ annotation PBI_ResultType = Table
44
+
@@ -0,0 +1,145 @@
1
+ /// Hecho demo financiero con importes base para ingresos, gastos, cobros y cuentas por cobrar.
2
+ table 'Movimientos financieros'
3
+ isHidden
4
+ lineageTag: 5bacdbad-24ef-4b9f-b23d-8cb0a0680965
5
+
6
+ column MovimientoId
7
+ dataType: string
8
+ isHidden
9
+ lineageTag: 7d30513c-1531-4de6-9e68-b95934b11623
10
+ sourceColumn: MovimientoId
11
+
12
+ column Fecha
13
+ dataType: dateTime
14
+ formatString: Long Date
15
+ lineageTag: 989253e1-dcac-4b91-8d48-b6de0decb59d
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: c37f98c3-cd73-42bd-974e-5480dc7e27da
27
+ sourceColumn: ClienteId
28
+
29
+ column CanalId
30
+ dataType: string
31
+ isHidden
32
+ lineageTag: 92c30c92-4948-41be-9aa0-c5564f1883b7
33
+ sourceColumn: CanalId
34
+
35
+ column ProductoId
36
+ dataType: string
37
+ isHidden
38
+ lineageTag: 3176aa4e-889e-4f57-a1e3-0c804e8aacbc
39
+ sourceColumn: ProductoId
40
+
41
+ column ServicioId
42
+ dataType: string
43
+ isHidden
44
+ lineageTag: 158ae241-cc2f-4c1b-aba6-73890cd3df0e
45
+ sourceColumn: ServicioId
46
+
47
+ column ProyectoId
48
+ dataType: string
49
+ isHidden
50
+ lineageTag: 3e8c05ed-f043-433b-905d-b069d13952e5
51
+ sourceColumn: ProyectoId
52
+
53
+ column EquipoId
54
+ dataType: string
55
+ isHidden
56
+ lineageTag: 734b0053-4822-4ce5-a289-4be98f6ab022
57
+ sourceColumn: EquipoId
58
+
59
+ column 'Tipo movimiento'
60
+ dataType: string
61
+ lineageTag: 51bb8c45-bb6b-4f40-87e5-cc29e3a1a58e
62
+ sourceColumn: Tipo movimiento
63
+
64
+ column 'Importe Base'
65
+ dataType: double
66
+ lineageTag: 0494ead5-abce-4e88-be59-8a97c5848e09
67
+ sourceColumn: Importe Base
68
+
69
+ column Data
70
+ dataType: string
71
+ lineageTag: 1864bd5b-37d4-4c91-a87c-d7e088a8d72d
72
+ sourceColumn: Data
73
+
74
+ partition 'Movimientos financieros' = m
75
+ mode: import
76
+ queryGroup: 'Sample Dataset\Hechos'
77
+ source =
78
+ let
79
+ EntityCode = (entity as text, n as number) as text =>
80
+ let
81
+ CleanNumber = Number.From(n),
82
+ ToLetters = (value as number) as text =>
83
+ let
84
+ Current = Number.IntegerDivide(value, 1),
85
+ Prefix = if Current < 26 then "" else @ToLetters(Number.IntegerDivide(Current, 26) - 1),
86
+ Suffix = Character.FromNumber(65 + Number.Mod(Current, 26))
87
+ in
88
+ Prefix & Suffix,
89
+ BlockCode = ToLetters(Number.IntegerDivide(CleanNumber - 1, 100)),
90
+ NumberPart = Text.PadStart(Text.From(Number.Mod(CleanNumber - 1, 100) + 1, "en-US"), 2, "0"),
91
+ CheckLetter = Character.FromNumber(65 + Number.Mod(CleanNumber * 7 + Text.Length(entity) + 3, 26))
92
+ in
93
+ entity & BlockCode & NumberPart & CheckLetter,
94
+ CalendarDates = Table.TransformColumnTypes(Table.SelectColumns(Calendario, {"Fecha"}), {{"Fecha", type date}}),
95
+ EndDate = List.Max(CalendarDates[Fecha]),
96
+ StartDate = List.Min(CalendarDates[Fecha]),
97
+ DateWindow = Table.SelectRows(CalendarDates, each [Fecha] >= StartDate and [Fecha] <= EndDate),
98
+ WeekTable = Table.Distinct(Table.AddColumn(DateWindow, "WeekStart", each Date.StartOfWeek([Fecha], Day.Monday), type date)[[WeekStart]]),
99
+ SortedWeeks = Table.Sort(WeekTable, {{"WeekStart", Order.Ascending}}),
100
+ AddSemanaIndex = Table.AddIndexColumn(SortedWeeks, "SemanaIndex", 0, 1, Int64.Type),
101
+ ClienteCount = Table.RowCount(Clientes),
102
+ ProductCount = Table.RowCount(Productos),
103
+ ServiceCount = Table.RowCount(Servicios),
104
+ ProjectCount = Table.RowCount(Proyectos),
105
+ EquipoCount = Table.RowCount(Equipos),
106
+ ChannelCount = Table.RowCount(Canales),
107
+ ClientesBase = Table.FromList(List.Numbers(1, ClienteCount), Splitter.SplitByNothing(), {"ClienteNr"}),
108
+ AddClientes = Table.AddColumn(AddSemanaIndex, "Clientes", each ClientesBase),
109
+ ExpandClientes = Table.ExpandTableColumn(AddClientes, "Clientes", {"ClienteNr"}, {"ClienteNr"}),
110
+ AddValue = Table.AddColumn(ExpandClientes, "Value", each [SemanaIndex] * ClienteCount + [ClienteNr], Int64.Type),
111
+ AddFecha = Table.AddColumn(AddValue, "Fecha", each List.Min({EndDate, List.Max({StartDate, Date.AddDays([WeekStart], Number.Mod([ClienteNr] + [SemanaIndex], 7))})}), type date),
112
+ #"Con MovimientoId" = Table.AddColumn(AddFecha, "MovimientoId", each EntityCode("Movimiento", [Value]), type text),
113
+ #"Con ClienteId" = Table.AddColumn(#"Con MovimientoId", "ClienteId", each EntityCode("Cliente", [ClienteNr]), type text),
114
+ JoinClientes = Table.NestedJoin(#"Con ClienteId", {"ClienteId"}, Clientes, {"ClienteId"}, "Cliente", JoinKind.LeftOuter),
115
+ ExpandClientesDim = Table.ExpandTableColumn(JoinClientes, "Cliente", {"Pais", "Segmento"}, {"Pais", "Segmento"}),
116
+ AddChannelNr = Table.AddColumn(ExpandClientesDim, "ChannelNr", each Number.Mod([ClienteNr] + [SemanaIndex] - 1, ChannelCount) + 1, Int64.Type),
117
+ AddProductNr = Table.AddColumn(AddChannelNr, "ProductNr", each Number.Mod([ClienteNr] + [SemanaIndex] * 3 - 1, ProductCount) + 1, Int64.Type),
118
+ AddServiceNr = Table.AddColumn(AddProductNr, "ServiceNr", each Number.Mod([ClienteNr] + [SemanaIndex] * 5 - 1, ServiceCount) + 1, Int64.Type),
119
+ AddProjectNr = Table.AddColumn(AddServiceNr, "ProjectNr", each Number.Mod([ClienteNr] + [SemanaIndex] * 7 - 1, ProjectCount) + 1, Int64.Type),
120
+ AddEquipoNr = Table.AddColumn(AddProjectNr, "EquipoNr", each Number.Mod([ClienteNr] + [SemanaIndex] - 1, EquipoCount) + 1, Int64.Type),
121
+ #"Con CanalId" = Table.AddColumn(AddEquipoNr, "CanalId", each EntityCode("Canal", [ChannelNr]), type text),
122
+ #"Con ProductoId" = Table.AddColumn(#"Con CanalId", "ProductoId", each EntityCode("Producto", [ProductNr]), type text),
123
+ #"Con ServicioId" = Table.AddColumn(#"Con ProductoId", "ServicioId", each EntityCode("Servicio", [ServiceNr]), type text),
124
+ #"Con ProyectoId" = Table.AddColumn(#"Con ServicioId", "ProyectoId", each EntityCode("Proyecto", [ProjectNr]), type text),
125
+ #"Con EquipoId" = Table.AddColumn(#"Con ProyectoId", "EquipoId", each EntityCode("Equipo", [EquipoNr]), type text),
126
+ #"Con Tipo movimiento" = Table.AddColumn(#"Con EquipoId", "Tipo movimiento", each let r = Number.Mod([Value], 4) in if r = 0 then "Ingreso" else if r = 1 then "Gasto operativo" else if r = 2 then "Cobro" else "Cuenta por cobrar", type text),
127
+ AddYearNr = Table.AddColumn(#"Con Tipo movimiento", "YearNr", each Date.Year([Fecha]), Int64.Type),
128
+ AddMonthNr = Table.AddColumn(AddYearNr, "MonthNr", each Date.Month([Fecha]), Int64.Type),
129
+ AddYearFactor = Table.AddColumn(AddMonthNr, "YearFactor", each if [YearNr] = 2024 then 0.92 else if [YearNr] = 2025 then 1.08 else if [YearNr] = 2026 then 1.18 else 1.0, type number),
130
+ AddCountryFactor = Table.AddColumn(AddYearFactor, "CountryFactor", each if [Pais] = "Brasil" then 2.25 else if [Pais] = "Mexico" then 2.05 else if [Pais] = "España" then 1.90 else if [Pais] = "Colombia" then 1.68 else if [Pais] = "Argentina" then 1.55 else if [Pais] = "Chile" then 1.42 else if [Pais] = "Peru" then 1.28 else if [Pais] = "Venezuela" then 1.12 else if [Pais] = "Ecuador" then 1.02 else if [Pais] = "Republica Dominicana" then 0.96 else if [Pais] = "Uruguay" then 0.88 else if [Pais] = "Panama" then 0.82 else if [Pais] = "Costa Rica" then 0.74 else if [Pais] = "Guatemala" then 0.68 else if [Pais] = "Paraguay" then 0.58 else if [Pais] = "Bolivia" then 0.52 else if [Pais] = "Honduras" then 0.46 else if [Pais] = "El Salvador" then 0.40 else if [Pais] = "Nicaragua" then 0.35 else if [Pais] = "Cuba" then 0.30 else if [Pais] = "Haiti" then 0.22 else 1.0, type number),
131
+ AddSegmentFactor = Table.AddColumn(AddCountryFactor, "SegmentFactor", each if [Segmento] = "Enterprise" then 2.35 else if [Segmento] = "Mid Market" then 1.10 else if [Segmento] = "SMB" then 0.56 else 1.0, type number),
132
+ AddChannelFactor = Table.AddColumn(AddSegmentFactor, "ChannelFactor", each if [ChannelNr] = 1 then 1.72 else if [ChannelNr] = 2 then 1.18 else if [ChannelNr] = 3 then 0.82 else if [ChannelNr] = 4 then 0.54 else 1.0, type number),
133
+ AddProductFactor = Table.AddColumn(AddChannelFactor, "ProductFactor", each 0.62 + Number.Mod([ProductNr] * 29, 150) / 100, type number),
134
+ AddServiceFactor = Table.AddColumn(AddProductFactor, "ServiceFactor", each 0.68 + Number.Mod([ServiceNr] * 31, 140) / 100, type number),
135
+ AddProjectFactor = Table.AddColumn(AddServiceFactor, "ProjectFactor", each 0.70 + Number.Mod([ProjectNr] * 23, 160) / 100, type number),
136
+ AddEquipoFactor = Table.AddColumn(AddProjectFactor, "EquipoFactor", each 0.75 + Number.Mod([EquipoNr] * 19, 120) / 100, type number),
137
+ AddMovementFactor = Table.AddColumn(AddEquipoFactor, "MovementFactor", each if [Tipo movimiento] = "Ingreso" then 1.18 else if [Tipo movimiento] = "Gasto operativo" then 0.82 else if [Tipo movimiento] = "Cobro" then 1.04 else if [Tipo movimiento] = "Cuenta por cobrar" then 1.34 else 1.0, type number),
138
+ AddSeasonFactor = Table.AddColumn(AddMovementFactor, "SeasonFactor", each if [MonthNr] = 1 then 0.78 else if [MonthNr] = 2 then 0.86 else if [MonthNr] = 3 then 0.96 else if [MonthNr] = 4 then 1.04 else if [MonthNr] = 5 then 1.10 else if [MonthNr] = 6 then 1.18 else if [MonthNr] = 7 then 1.26 else if [MonthNr] = 8 then 1.20 else if [MonthNr] = 9 then 1.06 else if [MonthNr] = 10 then 1.16 else if [MonthNr] = 11 then 1.34 else if [MonthNr] = 12 then 1.52 else 1.0, type number),
139
+ AddNoiseFactor = Table.AddColumn(AddSeasonFactor, "NoiseFactor", each 0.82 + Number.Mod([Value] * 37 + [ClienteNr] * 17 + [ProductNr] * 13 + [ProjectNr] * 11, 95) / 100, type number),
140
+ #"Con Importe Base" = Table.AddColumn(AddNoiseFactor, "Importe Base", each Number.Round((6500 + Number.Mod([Value] * 1231 + [SemanaIndex] * 313, 68000)) * [YearFactor] * [CountryFactor] * [SegmentFactor] * [ChannelFactor] * [ProductFactor] * [ServiceFactor] * [ProjectFactor] * [EquipoFactor] * [MovementFactor] * [SeasonFactor] * [NoiseFactor], 0), type number),
141
+ #"Con Data" = Table.AddColumn(#"Con Importe Base", "Data", each "Demo", type text),
142
+ Result = Table.SelectColumns(#"Con Data", {"MovimientoId", "Fecha", "ClienteId", "CanalId", "ProductoId", "ServicioId", "ProyectoId", "EquipoId", "Tipo movimiento", "Importe Base", "Data"})
143
+ in
144
+ Result
145
+