{"id":119,"date":"2026-06-11T13:23:21","date_gmt":"2026-06-11T13:23:21","guid":{"rendered":"https:\/\/bricopm.com\/?p=119"},"modified":"2026-06-11T13:31:36","modified_gmt":"2026-06-11T13:31:36","slug":"articulo-2-modelo-de-datos-tabla-plana-vs-star-schema","status":"publish","type":"post","link":"https:\/\/bricopm.com\/en\/articulo-2-modelo-de-datos-tabla-plana-vs-star-schema\/","title":{"rendered":"Modelo de Datos \u2014 Tabla Plana vs. Star Schema"},"content":{"rendered":"\n<div class=\"wp-block-group alignfull is-style-ext-preset--group--natural-1--section has-background-background-color has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-e955bbaf wp-block-group-is-layout-constrained\" style=\"margin-top:0;margin-bottom:0;padding-top:var(--wp--preset--spacing--70);padding-bottom:var(--wp--preset--spacing--70)\">\n<div class=\"wp-block-group alignwide ext-is-logical-start has-global-padding is-content-justification-left is-layout-constrained wp-container-core-group-is-layout-6729bdbe wp-block-group-is-layout-constrained\">\n<h2 class=\"wp-block-heading ext-animate--on\">Serie: Power BI para Gesti\u00f3n de Programas Cloud<br>Prerrequisito: Art\u00edculo 1 \u2014 Power Query: conexi\u00f3n y transformaciones del Excel<\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left ext-animate--on\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"has-text-align-left ext-animate--on\">En el art\u00edculo anterior conectamos el Excel al Power BI y preparamos los datos en Power Query. Ahora toca tomar la decisi\u00f3n m\u00e1s importante antes de escribir una sola medida DAX: <strong>\u00bfc\u00f3mo estructuramos el modelo de datos?<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left ext-animate--on\">Esta decisi\u00f3n afecta al rendimiento, a la legibilidad del DAX, a la facilidad de mantenimiento y a c\u00f3mo escala el modelo si el programa crece. No hay una respuesta \u00fanica correcta \u2014 depende del contexto. En este art\u00edculo presento los dos enfoques principales, sus ventajas e inconvenientes, y los criterios para elegir uno u otro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Los dos enfoques<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Opci\u00f3n A: Tabla plana (Flat Table)<\/h3>\n\n\n\n<p>Todos los atributos del servicio en una sola tabla. Cada fila es un servicio; cada columna, un atributo.<\/p>\n\n\n\n<p>AllServices<br>\u251c\u2500\u2500 service_name<br>\u251c\u2500\u2500 WAVE<br>\u251c\u2500\u2500 MIGRATION SCOPE<br>\u251c\u2500\u2500 MIGRATION STRATEGY<br>\u251c\u2500\u2500 Environment<br>\u251c\u2500\u2500 Infra_type<br>\u251c\u2500\u2500 Criticality<br>\u251c\u2500\u2500 PROVEEDOR Implementation Status<br>\u251c\u2500\u2500 Fecha esperada de migraci\u00f3n<br>\u251c\u2500\u2500 Fecha de migraci\u00f3n\/monitorizaci\u00f3n<br>\u2514\u2500\u2500 \u2026 (31 columnas)<\/p>\n\n\n\n<p>El modelo queda as\u00ed: <strong>dos tablas<\/strong> \u2014 <code>AllServices<\/code> y <code>Calendario<\/code> \u2014 con una (o varias) relaciones entre ellas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Opci\u00f3n B: Star Schema (Esquema en estrella)<\/h3>\n\n\n\n<p>Los atributos categ\u00f3ricos se separan en tablas de dimensiones independientes. La tabla central (<code>FactServicios<\/code>) contiene solo hechos medibles y claves for\u00e1neas.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>dim_Wave          dim_Scope         dim_Strategy\n    \u2502                 \u2502                  \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                       \u2502\n                 FactServicios         Calendario\n                 (claves + fechas          \u2502\n                  + m\u00e9tricas)         \u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n\n\n\n<p>Las tablas de dimensiones t\u00edpicas para nuestro modelo ser\u00edan:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tabla dimensi\u00f3n<\/th><th>Columnas clave<\/th><\/tr><\/thead><tbody><tr><td><code>dim_Wave<\/code><\/td><td>WaveID, Wave, OrdenWave<\/td><\/tr><tr><td><code>dim_Scope<\/code><\/td><td>ScopeID, MigrationScope, TipoScope (ThirdParty \/ InHouse)<\/td><\/tr><tr><td><code>dim_Strategy<\/code><\/td><td>StrategyID, MigrationStrategy<\/td><\/tr><tr><td><code>dim_Environment<\/code><\/td><td>EnvironmentID, Environment<\/td><\/tr><tr><td><code>dim_Criticality<\/code><\/td><td>CriticalityID, Criticality, NivelPrioridad<\/td><\/tr><tr><td><code>dim_Proveedor<\/code><\/td><td>ProveedorID, ProveedorNombre<\/td><\/tr><tr><td><code>Calendario<\/code><\/td><td>Date, A\u00f1o, Trimestre, Mes, Semana\u2026<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Comparativa directa<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Criterio<\/th><th>Tabla plana<\/th><th>Star Schema<\/th><\/tr><\/thead><tbody><tr><td><strong>Complejidad inicial<\/strong><\/td><td>Baja \u2014 una tabla, listo<\/td><td>Alta \u2014 hay que crear y relacionar dimensiones<\/td><\/tr><tr><td><strong>Rendimiento<\/strong><\/td><td>Bueno hasta ~100k filas<\/td><td>\u00d3ptimo a cualquier escala; VertiPaq comprime mejor columnas de baja cardinalidad en dims separadas<\/td><\/tr><tr><td><strong>Legibilidad del DAX<\/strong><\/td><td>Medidas m\u00e1s largas con filtros expl\u00edcitos<\/td><td>Medidas m\u00e1s limpias; los filtros viajan por las relaciones autom\u00e1ticamente<\/td><\/tr><tr><td><strong>Mantenimiento<\/strong><\/td><td>F\u00e1cil si el Excel no cambia de estructura<\/td><td>M\u00e1s robusto ante cambios: modificar una dimensi\u00f3n no afecta a la tabla de hechos<\/td><\/tr><tr><td><strong>Valores duplicados<\/strong><\/td><td>S\u00ed \u2014 \u00abZEUS (ThirdParty)\u00bb se repite en 8 filas<\/td><td>No \u2014 cada scope aparece una sola vez en <code>dim_Scope<\/code><\/td><\/tr><tr><td><strong>Filtros cruzados<\/strong><\/td><td>Requieren CROSSFILTER o BOTH en relaciones<\/td><td>Fluyen naturalmente de dim \u2192 fact<\/td><\/tr><tr><td><strong>Curva de aprendizaje<\/strong><\/td><td>Menor<\/td><td>Mayor \u2014 hay que entender cardinalidad y direcci\u00f3n de filtros<\/td><\/tr><tr><td><strong>Fuente \u00fanica (Excel)<\/strong><\/td><td>Ideal<\/td><td>Requiere generar las dims en Power Query o DAX<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfCu\u00e1ndo usar cada uno?<\/h2>\n\n\n\n<p><strong>Usa tabla plana cuando:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El origen de datos es un \u00fanico Excel que controlas t\u00fa directamente.<\/li>\n\n\n\n<li>El volumen de datos es menor de 100.000 filas.<\/li>\n\n\n\n<li>El equipo que mantiene el modelo tiene experiencia limitada en Power BI.<\/li>\n\n\n\n<li>El programa tiene fecha de fin definida y el modelo no necesita escalar indefinidamente.<\/li>\n\n\n\n<li>La velocidad de desarrollo importa m\u00e1s que la arquitectura perfecta.<\/li>\n<\/ul>\n\n\n\n<p><strong>Usa star schema cuando:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los datos vienen de m\u00faltiples fuentes (Excel + Jira + ServiceNow + Azure Cost Management).<\/li>\n\n\n\n<li>El volumen supera las 100.000 filas o crece de forma continua.<\/li>\n\n\n\n<li>Varios equipos van a construir medidas DAX sobre el mismo modelo.<\/li>\n\n\n\n<li>Las dimensiones cambian con frecuencia (nuevos scopes, nuevas waves) y quieres gestionar esos cambios en un \u00fanico sitio.<\/li>\n\n\n\n<li>El rendimiento de las consultas empieza a ser perceptible.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">El modelo de esta serie<\/h2>\n\n\n\n<p>En este programa trabajamos con un Excel de control \u00fanico, ~500 servicios, y un equipo t\u00e9cnico peque\u00f1o. La tabla plana es la elecci\u00f3n correcta por pragmatismo: nos permite ir directo a construir los dashboards sin invertir tiempo en arquitectura.<\/p>\n\n\n\n<p>Aun as\u00ed, introducimos <strong>un elemento del star schema que s\u00ed vale la pena en cualquier caso<\/strong>: la tabla <code>Calendario<\/code> separada. Esta tabla es obligatoria para las funciones de Time Intelligence de DAX (<code>DATEADD<\/code>, <code>TOTALYTD<\/code>, acumulados\u2026) y no tiene coste de complejidad significativo.<\/p>\n\n\n\n<p>El modelo final de esta serie tiene esta estructura:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Calendario \u2500\u2500(activa)\u2500\u2500\u2500\u2500\u2500\u2500\u25ba AllServices&#91;Fecha esperada de migraci\u00f3n]\n           \u2500\u2500(inactiva)\u2500\u2500\u2500\u2500\u25ba AllServices&#91;Fecha de migraci\u00f3n\/monitorizaci\u00f3n]\n           \u2500\u2500(inactiva)\u2500\u2500\u2500\u2500\u25ba AllServices&#91;Fecha de decomisionado]\n           \u2500\u2500(inactiva)\u2500\u2500\u2500\u2500\u25ba AllServices&#91;Migration window]<\/code><\/pre>\n\n\n\n<p>Las relaciones inactivas se activan dentro de cada medida DAX con <code>USERELATIONSHIP()<\/code>. Este patr\u00f3n \u2014 una tabla de fechas con m\u00faltiples roles \u2014 es el m\u00e1s habitual en modelos de seguimiento de programas y lo veremos en detalle en el art\u00edculo del Burn Up.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Nota sobre escalabilidad:<\/strong> Si en el futuro el programa incorpora datos de coste (AWS Cost Explorer, Azure Billing) o de gesti\u00f3n de incidencias (Jira, ServiceNow), ese ser\u00eda el momento natural de migrar a star schema. La tabla <code>AllServices<\/code> se convertir\u00eda en <code>FactServicios<\/code>, y las columnas categ\u00f3ricas se extraer\u00edan a dimensiones. La migraci\u00f3n es mec\u00e1nica si el DAX est\u00e1 bien escrito.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Crear la tabla Calendario en DAX<\/h2>\n\n\n\n<p>Si no la creaste en el Art\u00edculo 1, aqu\u00ed est\u00e1 la definici\u00f3n completa. En Power BI Desktop: <strong>Home \u2192 New Table<\/strong> y pega este c\u00f3digo:<\/p>\n\n\n\n<p>dax<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Calendario =\nADDCOLUMNS(\n    CALENDAR(DATE(2025, 1, 1), DATE(2026, 12, 31)),\n    \"A\u00f1o\",          YEAR(&#91;Date]),\n    \"Trimestre\",    \"Q\" &amp; QUARTER(&#91;Date]),\n    \"Mes Num\",      MONTH(&#91;Date]),\n    \"Mes Nombre\",   FORMAT(&#91;Date], \"MMMM\"),\n    \"Mes Corto\",    FORMAT(&#91;Date], \"MMM\"),\n    \"Semana\",       WEEKNUM(&#91;Date], 2),\n    \"D\u00eda Semana\",   WEEKDAY(&#91;Date], 2),\n    \"D\u00eda Nombre\",   FORMAT(&#91;Date], \"dddd\"),\n    \"A\u00f1oMes\",       FORMAT(&#91;Date], \"YYYY-MM\"),\n    \"A\u00f1oTrimestre\", FORMAT(&#91;Date], \"YYYY\") &amp; \"-\" &amp; \"Q\" &amp; QUARTER(&#91;Date])\n)<\/code><\/pre>\n\n\n\n<p>Una vez creada, ve a la vista de Modelo \u2192 clic derecho en <code>Calendario<\/code> \u2192 <strong>Mark as Date Table<\/strong> \u2192 selecciona la columna <code>Date<\/code>. Esto es obligatorio para que las funciones de Time Intelligence funcionen correctamente.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Por qu\u00e9 <code>CALENDAR<\/code> y no <code>CALENDARAUTO<\/code><\/h3>\n\n\n\n<p><code>CALENDARAUTO<\/code> genera autom\u00e1ticamente el rango de fechas bas\u00e1ndose en las columnas de fecha del modelo. Es c\u00f3moda pero fr\u00e1gil: si una fecha err\u00f3nea llega en el Excel (por ejemplo, un valor <code>01\/01\/1900<\/code> por un error de formato), la tabla Calendario se expandir\u00e1 hasta esa fecha y las funciones de acumulado dejar\u00e1n de funcionar bien. <code>CALENDAR<\/code> con fechas expl\u00edcitas es m\u00e1s predecible y segura en modelos alimentados por Excel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Establecer las relaciones<\/h2>\n\n\n\n<p>Con la tabla <code>Calendario<\/code> creada y marcada, ve a la <strong>vista de Modelo<\/strong> y arrastra:<\/p>\n\n\n\n<p><strong>1. Relaci\u00f3n activa<\/strong> (la que Power BI usa por defecto):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Calendario[Date]<\/code> \u2192 <code>AllServices[Fecha esperada de migraci\u00f3n]<\/code><\/li>\n\n\n\n<li>Cardinalidad: Uno a muchos (1:*)<\/li>\n\n\n\n<li>Direcci\u00f3n de filtro: Single (Calendario filtra AllServices)<\/li>\n<\/ul>\n\n\n\n<p><strong>2. Relaciones inactivas<\/strong> (se activar\u00e1n en DAX con <code>USERELATIONSHIP<\/code>):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>Calendario[Date]<\/code> \u2192 <code>AllServices[Fecha de migraci\u00f3n\/monitorizaci\u00f3n]<\/code><\/li>\n\n\n\n<li><code>Calendario[Date]<\/code> \u2192 <code>AllServices[Fecha de decomisionado]<\/code><\/li>\n\n\n\n<li><code>Calendario[Date]<\/code> \u2192 <code>AllServices[Migration window]<\/code><\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Power BI no permite m\u00e1s de una relaci\u00f3n activa entre el mismo par de tablas. Las relaciones inactivas existen en el modelo pero no filtran datos por defecto \u2014 solo se activan cuando una medida DAX las invoca expl\u00edcitamente con <code>USERELATIONSHIP()<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Direcci\u00f3n de filtro: Single vs. Both<\/h3>\n\n\n\n<p>Mant\u00e9n todas las relaciones en direcci\u00f3n <strong>Single<\/strong> (Calendario \u2192 AllServices). La direcci\u00f3n <code>Both<\/code> (bidireccional) puede parecer conveniente pero introduce ambig\u00fcedad en el filtrado y es una fuente habitual de resultados incorrectos en modelos con m\u00faltiples relaciones. En un modelo de tabla plana con una sola tabla de hechos no hay ning\u00fan escenario que requiera filtrado bidireccional.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Verificaci\u00f3n del modelo<\/h2>\n\n\n\n<p>Antes de pasar a escribir medidas DAX, comprueba en la vista de Modelo que:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La tabla <code>Calendario<\/code> tiene el icono de calendario (\ud83d\udcc5) en la columna <code>Date<\/code> \u2014 indica que est\u00e1 marcada como Date Table.<\/li>\n\n\n\n<li>Hay exactamente <strong>una l\u00ednea continua<\/strong> (relaci\u00f3n activa) y <strong>tres l\u00edneas discontinuas<\/strong> (relaciones inactivas) entre <code>Calendario<\/code> y <code>AllServices<\/code>.<\/li>\n\n\n\n<li>Todas las relaciones son de cardinalidad <strong>1:<\/strong>* (uno en Calendario, muchos en AllServices).<\/li>\n\n\n\n<li>No hay relaciones entre <code>AllServices<\/code> y s\u00ed misma.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00f3ximo art\u00edculo<\/h2>\n\n\n\n<p>Con el modelo de datos listo y las relaciones establecidas, en el <strong>Art\u00edculo 3<\/strong> construiremos las medidas DAX fundamentales del programa:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code># Total Elementos<\/code> \u2014 base de todos los ratios<\/li>\n\n\n\n<li><code># Migrados<\/code> \u2014 conteo real de servicios en estado DONE<\/li>\n\n\n\n<li><code># Por Migrar<\/code> \u2014 lo que queda<\/li>\n\n\n\n<li><code>% Completado<\/code> \u2014 ratio de progreso<\/li>\n\n\n\n<li><code># Planificado Acumulado<\/code> \u2014 l\u00ednea planificada del Burn Up<\/li>\n\n\n\n<li><code># Real Acumulado<\/code> \u2014 l\u00ednea real del Burn Up<\/li>\n\n\n\n<li><code># Fecha Estimada Fin<\/code> \u2014 proyecci\u00f3n lineal hacia el fin de contrato<\/li>\n<\/ul>\n\n\n\n<p>Cada medida vendr\u00e1 acompa\u00f1ada del c\u00f3digo DAX y la explicaci\u00f3n de por qu\u00e9 est\u00e1 escrita as\u00ed \u2014 incluyendo los patrones de <code>CALCULATE<\/code>, <code>USERELATIONSHIP<\/code> y <code>FILTER<\/code> que aparecen una y otra vez en este tipo de modelos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>Recursos del art\u00edculo: Excel mock (<code>All_Services_AWS_MOCK.xlsx<\/code>) disponible para descarga. Los datos son ficticios y no contienen informaci\u00f3n sensible.<\/em><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-query alignwide is-layout-flow wp-block-query-is-layout-flow\"><ul class=\"columns-3 wp-block-post-template is-layout-grid wp-container-core-post-template-is-layout-10753265 wp-block-post-template-is-layout-grid\"><li class=\"wp-block-post post-119 post type-post status-publish format-standard hentry category-powerbi\">\n\n<div class=\"wp-block-group is-style-ext-preset--group--natural-1--item-card-1--align-start ext-animate--on has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-ext-preset--group--natural-1--item-card-1--align-start--2\">\n\n\n<div class=\"wp-block-group is-style-default has-global-padding is-layout-constrained wp-container-core-group-is-layout-e0082cf6 wp-block-group-is-layout-constrained\"><div style=\"font-size:14px;font-style:normal;font-weight:600\" class=\"taxonomy-category wp-block-post-terms\"><a href=\"https:\/\/bricopm.com\/en\/category\/powerbi\/\" rel=\"tag\">Power bi<\/a><\/div>\n\n<h2 style=\"font-size:clamp(15.747px, 0.984rem + ((1vw - 3.2px) * 0.86), 24px); margin-top:8px;margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-title\"><a href=\"https:\/\/bricopm.com\/en\/articulo-2-modelo-de-datos-tabla-plana-vs-star-schema\/\" target=\"_self\" >Modelo de Datos \u2014 Tabla Plana vs. Star Schema<\/a><\/h2>\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-excerpt has-small-font-size\"><p class=\"wp-block-post-excerpt__excerpt\">Serie: Power BI para Gesti\u00f3n de Programas CloudPrerrequisito: Art\u00edculo 1 \u2014 Power Query: conexi\u00f3n y&hellip; <\/p><\/div>\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-b35fda84 wp-block-group-is-layout-flex\" style=\"margin-top:24px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><div class=\"wp-block-avatar\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Kike - bricopm Avatar' src='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo wp-block-avatar__image' height='48' width='48'  style=\"border-radius:100px;\"\/><\/a><\/div>\n\n<div style=\"font-size:14px;font-style:normal;font-weight:600;text-decoration:none;\" class=\"wp-block-post-author-name\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">Kike &#8211; bricopm<\/a><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity wp-container-content-4daaf377\"\/>\n\n\n<div style=\"font-size:14px;text-transform:capitalize;\" class=\"wp-block-post-date\"><time datetime=\"2026-06-11T13:23:21+00:00\">Jun 11, 2026<\/time><\/div><\/div>\n<\/div>\n<\/div>\n\n<\/li><li class=\"wp-block-post post-104 post type-post status-publish format-standard hentry category-powerbi tag-excel tag-power-query\">\n\n<div class=\"wp-block-group is-style-ext-preset--group--natural-1--item-card-1--align-start ext-animate--on has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-ext-preset--group--natural-1--item-card-1--align-start--3\">\n\n\n<div class=\"wp-block-group is-style-default has-global-padding is-layout-constrained wp-container-core-group-is-layout-e0082cf6 wp-block-group-is-layout-constrained\"><div style=\"font-size:14px;font-style:normal;font-weight:600\" class=\"taxonomy-category wp-block-post-terms\"><a href=\"https:\/\/bricopm.com\/en\/category\/powerbi\/\" rel=\"tag\">Power bi<\/a><\/div>\n\n<h2 style=\"font-size:clamp(15.747px, 0.984rem + ((1vw - 3.2px) * 0.86), 24px); margin-top:8px;margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-title\"><a href=\"https:\/\/bricopm.com\/en\/como-estructurar-el-excel-y-prepararlo-en-power-query\/\" target=\"_self\" >C\u00f3mo estructurar el Excel y prepararlo en Power Query<\/a><\/h2>\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-excerpt has-small-font-size\"><p class=\"wp-block-post-excerpt__excerpt\">Introducci\u00f3n Antes de construir cualquier visual en Power BI, hay que resolver una pregunta fundamental:&hellip; <\/p><\/div>\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-b35fda84 wp-block-group-is-layout-flex\" style=\"margin-top:24px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><div class=\"wp-block-avatar\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Kike - bricopm Avatar' src='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo wp-block-avatar__image' height='48' width='48'  style=\"border-radius:100px;\"\/><\/a><\/div>\n\n<div style=\"font-size:14px;font-style:normal;font-weight:600;text-decoration:none;\" class=\"wp-block-post-author-name\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">Kike &#8211; bricopm<\/a><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity wp-container-content-4daaf377\"\/>\n\n\n<div style=\"font-size:14px;text-transform:capitalize;\" class=\"wp-block-post-date\"><time datetime=\"2026-05-17T17:35:05+00:00\">May 17, 2026<\/time><\/div><\/div>\n<\/div>\n<\/div>\n\n<\/li><li class=\"wp-block-post post-100 post type-post status-publish format-standard hentry category-leadership\">\n\n<div class=\"wp-block-group is-style-ext-preset--group--natural-1--item-card-1--align-start ext-animate--on has-global-padding is-layout-constrained wp-block-group-is-layout-constrained is-style-ext-preset--group--natural-1--item-card-1--align-start--4\">\n\n\n<div class=\"wp-block-group is-style-default has-global-padding is-layout-constrained wp-container-core-group-is-layout-e0082cf6 wp-block-group-is-layout-constrained\"><div style=\"font-size:14px;font-style:normal;font-weight:600\" class=\"taxonomy-category wp-block-post-terms\"><a href=\"https:\/\/bricopm.com\/en\/category\/leadership\/\" rel=\"tag\">Leadership<\/a><\/div>\n\n<h2 style=\"font-size:clamp(15.747px, 0.984rem + ((1vw - 3.2px) * 0.86), 24px); margin-top:8px;margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-title\"><a href=\"https:\/\/bricopm.com\/en\/socratic-coaching-for-project-program-managers\/\" target=\"_self\" >Socratic Coaching for Project &amp; Program Managers<\/a><\/h2>\n\n<div style=\"margin-top:var(--wp--preset--spacing--20);margin-bottom:var(--wp--preset--spacing--20);\" class=\"wp-block-post-excerpt has-small-font-size\"><p class=\"wp-block-post-excerpt__excerpt\">The original principle holds: choose questions with the highest Return on Questions (ROQ)\u2014 questions that&hellip; <\/p><\/div>\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-b35fda84 wp-block-group-is-layout-flex\" style=\"margin-top:24px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0\"><div class=\"wp-block-avatar\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Kike - bricopm Avatar' src='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/c85601819d33e68562d938e236a88cbf2296ecf3859a7e7699992ca66c11b7fc?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo wp-block-avatar__image' height='48' width='48'  style=\"border-radius:100px;\"\/><\/a><\/div>\n\n<div style=\"font-size:14px;font-style:normal;font-weight:600;text-decoration:none;\" class=\"wp-block-post-author-name\"><a href=\"https:\/\/bricopm.com\/en\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">Kike &#8211; bricopm<\/a><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity wp-container-content-4daaf377\"\/>\n\n\n<div style=\"font-size:14px;text-transform:capitalize;\" class=\"wp-block-post-date\"><time datetime=\"2026-02-24T17:35:44+00:00\">Feb 24, 2026<\/time><\/div><\/div>\n<\/div>\n<\/div>\n\n<\/li><\/ul><\/div>\n\n\n\n<div class=\"wp-block-buttons alignwide is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-ext-preset--button--natural-1--button-1 is-style-ext-preset--button--natural-1--button-1--5\"><a class=\"wp-block-button__link wp-element-button\" href=\"#extendify-blog\">Ver todo<\/a><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Serie: Power BI para Gesti\u00f3n de Programas CloudPrerrequisito: Art\u00edculo 1 \u2014 Power Query: conexi\u00f3n y transformaciones del Excel Introducci\u00f3n En el art\u00edculo anterior conectamos el Excel al Power BI y preparamos los datos en Power Query. Ahora toca tomar la decisi\u00f3n m\u00e1s importante antes de escribir una sola medida DAX: \u00bfc\u00f3mo estructuramos el modelo de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-119","post","type-post","status-publish","format-standard","hentry","category-powerbi"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/posts\/119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/comments?post=119"}],"version-history":[{"count":3,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/posts\/119\/revisions"}],"predecessor-version":[{"id":122,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/posts\/119\/revisions\/122"}],"wp:attachment":[{"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/media?parent=119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/categories?post=119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bricopm.com\/en\/wp-json\/wp\/v2\/tags?post=119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}