{"id":104,"date":"2026-05-17T17:35:05","date_gmt":"2026-05-17T17:35:05","guid":{"rendered":"https:\/\/bricopm.com\/?p=104"},"modified":"2026-05-17T18:10:35","modified_gmt":"2026-05-17T18:10:35","slug":"como-estructurar-el-excel-y-prepararlo-en-power-query","status":"publish","type":"post","link":"https:\/\/bricopm.com\/es_es\/como-estructurar-el-excel-y-prepararlo-en-power-query\/","title":{"rendered":"C\u00f3mo estructurar el Excel y prepararlo en Power Query"},"content":{"rendered":"<h3 class=\"wp-block-post-title\">C\u00f3mo estructurar el Excel y prepararlo en Power Query<\/h3>\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p>Antes de construir cualquier visual en Power BI, hay que resolver una pregunta fundamental: \u00bfc\u00f3mo estructuro mis datos para que el modelo sea flexible, eficiente y f\u00e1cil de mantener?<\/p>\n\n\n\n<p>En esta serie trabajaremos con un programa de migraci\u00f3n cloud: cientos de servicios que deben moverse desde un datacenter on-premise hacia instancias EC2 en AWS y m\u00e1quinas virtuales en Azure, coordinados con dos proveedores externos y organizados en oleadas (waves). Es exactamente el tipo de programa donde Power BI brilla: muchas variables, fechas cr\u00edticas, estados cambiantes y m\u00faltiples stakeholders que necesitan vistas distintas del mismo dato.<\/p>\n\n\n\n<p>Este primer art\u00edculo cubre los cimientos: el modelo de datos en Excel y las transformaciones en Power Query necesarias para que los dashboards funcionen correctamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. El principio de la tabla plana<\/h2>\n\n\n\n<p>Power BI trabaja mejor con una tabla plana: una fila por unidad m\u00ednima de seguimiento (en nuestro caso, un servicio o servidor), y una columna por cada atributo de esa unidad. Sin celdas combinadas, sin subtotales embebidos, sin filas de resumen en medio de los datos.<\/p>\n\n\n\n<p>\ud83d\udca1 <em>Si tu Excel tiene cabeceras multinivel, grupos colapsables o totales intercalados, Power Query puede limpiarlos \u2014 pero es mucho m\u00e1s f\u00e1cil evitarlos desde el origen.<\/em><\/p>\n\n\n\n<p>Nuestra tabla principal \u00abAll Services AWS\u00bb sigue este principio: cada fila es un servicio, y las columnas recogen desde el tipo de infraestructura hasta las fechas de migraci\u00f3n planificada y real. Eso es lo que permite a Power BI agregar, filtrar y calcular con DAX sin restricciones.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Referencia de columnas del modelo<\/h2>\n\n\n\n<p>La siguiente tabla documenta las columnas de la hoja \u00abAll Services AWS\u00bb, su tipo de dato correcto y su funci\u00f3n en los dashboards:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Columna<\/strong><\/td><td><strong>Tipo<\/strong><\/td><td><strong>Valores<\/strong><\/td><td><strong>Uso en Power BI<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>account_name<\/strong><\/td><td>Texto<\/td><td>Segmentaci\u00f3n por cuenta AWS<\/td><td>Filtro de entorno cloud<\/td><\/tr><tr><td><strong>Environment<\/strong><\/td><td>Texto<\/td><td>PRO \/ PRE \/ INT \/ dev \/ tst<\/td><td>Normalizar en Power Query<\/td><\/tr><tr><td><strong>Service_type<\/strong><\/td><td>Texto<\/td><td>EC2, RDS, ALB, FSX, Lambda\u2026<\/td><td>Clasificaci\u00f3n de infraestructura<\/td><\/tr><tr><td><strong>service_name<\/strong><\/td><td>Texto<\/td><td>Identificador \u00fanico del servicio<\/td><td>Clave de detalle<\/td><\/tr><tr><td><strong>Root Domain<\/strong><\/td><td>Texto<\/td><td>SCI \/ OPS \/ WEB \/ DATA \/ CORE<\/td><td>Agrupaci\u00f3n por dominio<\/td><\/tr><tr><td><strong>Infra_type<\/strong><\/td><td>Texto<\/td><td>EC2, Azure, FSX, Containers\u2026<\/td><td>Dimensi\u00f3n de ubicaci\u00f3n<\/td><\/tr><tr><td><strong>WAVE<\/strong><\/td><td>Texto<\/td><td>1, 2, 3, 4, 5, Azure, ULTIMO<\/td><td>Eje de oleadas<\/td><\/tr><tr><td><strong>ORDEN WAVE<\/strong><\/td><td>Entero<\/td><td>Orden dentro de la wave<\/td><td>Ordenaci\u00f3n de visuales<\/td><\/tr><tr><td><strong>MIGRATION SCOPE<\/strong><\/td><td>Texto<\/td><td>Dioses griegos (Zeus, Hera\u2026)<\/td><td>Dimensi\u00f3n principal de <br>agrupaci\u00f3n<\/td><\/tr><tr><td><strong>MIGRATION STRATEGY<\/strong><\/td><td>Texto<\/td><td>Lift&amp;Shift, Deprecar, Azure\u2026<\/td><td>Tipo de movimiento<\/td><\/tr><tr><td><strong>DC Server Name<\/strong><\/td><td>Texto<\/td><td>Nombre ficticio del servidor origen<\/td><td>Filtro de servidor<\/td><\/tr><tr><td><strong>Criticality<\/strong><\/td><td>Texto<\/td><td>CRITICAL \/ HIGH \/ MEDIUM \/ LOW<\/td><td>Sem\u00e1foro de prioridad<\/td><\/tr><tr><td><strong>CPU<\/strong><\/td><td>Entero<\/td><td>N\u00facleos del servidor<\/td><td>Dimensionado de recursos<\/td><\/tr><tr><td><strong>RAM (GB)<\/strong><\/td><td>Entero<\/td><td>Memoria RAM en GB<\/td><td>Dimensionado de recursos<\/td><\/tr><tr><td><strong>operating_system<\/strong><\/td><td>Texto<\/td><td>Windows, Red hat, Ubuntu\u2026<\/td><td>Inventario de SO<\/td><\/tr><tr><td><strong>ec2_size<\/strong><\/td><td>Texto<\/td><td>t3.medium, m5.large\u2026<\/td><td>Talla de instancia EC2<\/td><\/tr><tr><td><strong>ec2_friendly_name<\/strong><\/td><td>Texto<\/td><td>Nombre amigable en AWS<\/td><td>Identificaci\u00f3n post-migraci\u00f3n<\/td><\/tr><tr><td><strong>PROVEEDOR Impl. Status<\/strong><\/td><td>Texto<\/td><td>1) NOT STARTED \u2026 5) DISCARDED<\/td><td>Estado de implementaci\u00f3n \u2192 Burn Up<\/td><\/tr><tr><td><strong>PROVEEDOR Decom. Status<\/strong><\/td><td>Texto<\/td><td>Pending \/ In Progress \/ Done<\/td><td>Control de decomisionado<\/td><\/tr><tr><td><strong>fecha solicitud<\/strong><\/td><td>Fecha<\/td><td>Fecha de petici\u00f3n al proveedor<\/td><td>Inicio del proceso<\/td><\/tr><tr><td><strong>fecha de entrega<\/strong><\/td><td>Fecha<\/td><td>Fecha de entrega acordada<\/td><td>SLA del proveedor<\/td><\/tr><tr><td><strong>Fecha de migraci\u00f3n<\/strong><\/td><td>Fecha<\/td><td>Fecha real de migraci\u00f3n<\/td><td>L\u00ednea real del Burn Up<\/td><\/tr><tr><td><strong>Fecha esperada migraci\u00f3n<\/strong><\/td><td>Fecha<\/td><td>Fecha planificada de migraci\u00f3n<\/td><td>L\u00ednea planificada del Burn Up<\/td><\/tr><tr><td><strong>Fecha de decomisionado<\/strong><\/td><td>Fecha<\/td><td>Fecha real de apagado servidor origen<\/td><td>Burndown de servidores activos<\/td><\/tr><tr><td><strong>Update windows<\/strong><\/td><td>Texto<\/td><td>Ventana de mantenimiento<\/td><td>Planificaci\u00f3n de intervenci\u00f3n<\/td><\/tr><tr><td><strong>Intervention window<\/strong><\/td><td>Texto<\/td><td>Horario de intervenci\u00f3n permitido<\/td><td>Coordinaci\u00f3n operativa<\/td><\/tr><tr><td><strong>Migration window<\/strong><\/td><td>Fecha<\/td><td>Ventana de migraci\u00f3n asignada<\/td><td>Planificaci\u00f3n de wave<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\ud83d\udca1 <em>Las columnas de fecha son las m\u00e1s cr\u00edticas: Power BI solo puede usar funciones de Time Intelligence (DATEADD, TOTALYTD, acumulados\u2026) si est\u00e1n en formato Date. Si llegan como texto, los gr\u00e1ficos de Burn Up y Burndown no funcionar\u00e1n.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Conectar el Excel a Power BI Desktop<\/h2>\n\n\n\n<p>El proceso de conexi\u00f3n es sencillo pero hay que seguir el orden correcto para evitar problemas de permisos y rutas relativas:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Abre Power BI Desktop \u2192 Home \u2192 Get Data \u2192 Excel Workbook.<\/li>\n\n\n\n<li>Navega hasta el archivo All_Services_AWS_MOCK.xlsx y haz clic en Open.<\/li>\n\n\n\n<li>En el Navigator, marca la hoja \u00abAll Services AWS\u00bb y haz clic en Transform Data (no en Load directamente \u2014 necesitamos pasar por Power Query).<\/li>\n<\/ol>\n\n\n\n<p>\u26a0\ufe0f&nbsp; <strong>Si haces clic en \u00abLoad\u00bb sin pasar por Power Query, los tipos de dato se inferir\u00e1n autom\u00e1ticamente y casi seguro las fechas llegar\u00e1n como texto. Siempre usa \u00abTransform Data\u00bb en el primer acceso.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Transformaciones en Power Query<\/h2>\n\n\n\n<p>Power Query es el ETL integrado de Power BI. Aqu\u00ed preparamos los datos antes de que lleguen al modelo: limpiamos, normalizamos y a\u00f1adimos columnas calculadas que ser\u00eda imposible o ineficiente hacer en DAX.<\/p>\n\n\n\n<p>Estos son los 10 pasos necesarios para nuestro modelo, en orden:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>#<\/strong><\/td><td><strong>Paso<\/strong><\/td><td><strong>Acci\u00f3n en Power Query<\/strong><\/td><td><strong>Por qu\u00e9<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>1<\/strong><\/td><td><strong>Conectar al Excel<\/strong><\/td><td>Home \u2192 Get Data \u2192 Excel Workbook<\/td><td>Seleccionar All Services AWS<\/td><\/tr><tr><td><strong>2<\/strong><\/td><td><strong>Promover cabeceras<\/strong><\/td><td>Use First Row as Headers (si no se aplica solo)<\/td><td>Verificar que todos los nombres de columna son correctos<\/td><\/tr><tr><td><strong>3<\/strong><\/td><td><strong>Eliminar columnas vac\u00edas<\/strong><\/td><td>Remove Columns \u2192 columnas sin nombre o \u00abColumn N\u00bb<\/td><td>Reducir ruido en el modelo<\/td><\/tr><tr><td><strong>4<\/strong><\/td><td><strong>Normalizar Environment<\/strong><\/td><td>Transform \u2192 Replace Values: \u00abpro\u00bb\u2192\u00bbPRO\u00bb, \u00abpre\u00bb\u2192\u00bbPRE\u00bb, \u00abdev\u00bb\u2192\u00bbDEV\u00bb, \u00abtst\u00bb\u2192\u00bbTST\u00bb, \u00abint\u00bb\u2192\u00bbINT\u00bb<\/td><td>Consistencia para filtros y agrupaciones<\/td><\/tr><tr><td><strong>5<\/strong><\/td><td><strong>Tipo Fechas<\/strong><\/td><td>Seleccionar las 5 columnas de fecha \u2192 Data Type: Date<\/td><td>Obligatorio para Time Intelligence DAX<\/td><\/tr><tr><td><strong>6<\/strong><\/td><td><strong>Tipo num\u00e9rico CPU\/RAM<\/strong><\/td><td>CPU y RAM (GB) \u2192 Data Type: Whole Number<\/td><td>Evitar errores en c\u00e1lculos de recursos<\/td><\/tr><tr><td><strong>7<\/strong><\/td><td><strong>WAVE como texto<\/strong><\/td><td>WAVE \u2192 Data Type: Text<\/td><td>Evitar que Power BI lo trate como n\u00famero<\/td><\/tr><tr><td><strong>8<\/strong><\/td><td><strong>Columna Status Simplif.<\/strong><\/td><td>Add Column \u2192 Custom Column \u2192 f\u00f3rmula de sem\u00e1foro<\/td><td>Crear campo \u00abStatus_Color\u00bb para KPI cards<\/td><\/tr><tr><td><strong>9<\/strong><\/td><td><strong>Columna EsMigrado<\/strong><\/td><td>Add Column \u2192 Custom Column \u2192 campo booleano DONE<\/td><td>Base para contar migraciones reales<\/td><\/tr><tr><td><strong>10<\/strong><\/td><td><strong>Renombrar tabla<\/strong><\/td><td>Doble clic en el nombre de la query \u2192 \u00abAllServices\u00bb<\/td><td>Buena pr\u00e1ctica para referencias DAX limpias<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Normalizar el campo Environment<\/h3>\n\n\n\n<p>El campo Environment tiene valores duplicados en may\u00fasculas y min\u00fasculas (PRO, pro, PRE, pre\u2026). En Power Query, ve a la columna Environment \u2192 Transform \u2192 Replace Values y aplica cada sustituci\u00f3n:<\/p>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<pre class=\"wp-block-code\"><code>\"pro\"\u00a0 \u2192 \"PRO\"\n\"pre\"\u00a0 \u2192 \"PRE\"\n\"int\"\u00a0 \u2192 \"INT\"\n\"dev\"\u00a0 \u2192 \"DEV\"\n\"tst\"\u00a0 \u2192 \"TST\"<\/code><\/pre>\n<\/div>\n\n\n\n<p>\ud83d\udca1 <em>Alternativamente puedes usar Transform \u2192 Format \u2192 UPPERCASE sobre toda la columna, que hace lo mismo en un solo paso.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Columna personalizada: EsMigrado<\/h3>\n\n\n\n<p>Necesitamos una columna booleana que identifique si un servicio est\u00e1 completamente migrado (estado \u00ab4) DONE\u00bb). Ser\u00e1 la base del contador de migraciones reales en los KPIs y en la l\u00ednea real del Burn Up.<\/p>\n\n\n\n<p>En Power Query: Add Column \u2192 Custom Column \u2192 nombre: EsMigrado \u2192 f\u00f3rmula:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EsMigrado = if &#91;#\"PROVEEDOR Implementation Status\"] = \"4) DONE\"\n\n\u00a0 then 1\n\n\u00a0 else 0<\/code><\/pre>\n\n\n\n<p>\ud83d\udca1 <em>Usamos 1\/0 en lugar de true\/false para poder sumar directamente con SUMX en DAX sin necesidad de conversi\u00f3n.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.3 Columna personalizada: Status_Color<\/h3>\n\n\n\n<p>Para los KPI cards y sem\u00e1foros visuales necesitamos una versi\u00f3n simplificada del estado. A\u00f1ade una columna \u00abStatus_Color\u00bb con esta l\u00f3gica:<\/p>\n\n\n\n<p>\u00a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Status_Color = if &#91;#\"PROVEEDOR Implementation Status\"] = \"4) DONE\"\u00a0\u00a0\u00a0\u00a0\u00a0 then \"Verde\"\n\u00a0 else if &#91;#\"PROVEEDOR Implementation Status\"] = \"3) IN PROGRESS\" then \"Azul\"\n\u00a0 else if &#91;#\"PROVEEDOR Implementation Status\"] = \"2) REQUESTED\"\u00a0\u00a0 then \"Amarillo\"\n\u00a0 else if &#91;#\"PROVEEDOR Implementation Status\"] = \"5) DISCARDED\"\u00a0\u00a0 then \"Rojo\"\n\u00a0 else \"Gris\"<\/code><\/pre>\n\n\n\n<p>Esta columna te permitir\u00e1 usar reglas de color condicional en las tarjetas y tablas sin necesidad de l\u00f3gica DAX adicional.<\/p>\n\n\n\n<p>La correspondencia entre estado, color y comportamiento en DAX es la siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Valor original<\/strong><\/td><td><strong>Color<\/strong><\/td><td><strong>Muestra<\/strong><\/td><td><strong>Comportamiento en DAX<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>1) NOT STARTED<\/strong><\/td><td>Gris<\/td><td>&nbsp;<\/td><td>0 \u2014 no iniciado, no cuenta como progreso<\/td><\/tr><tr><td><strong>2) REQUESTED<\/strong><\/td><td>Amarillo<\/td><td>&nbsp;<\/td><td>1 \u2014 en tramitaci\u00f3n, pendiente de proveedor<\/td><\/tr><tr><td><strong>3) IN PROGRESS<\/strong><\/td><td>Azul<\/td><td>&nbsp;<\/td><td>2 \u2014 en ejecuci\u00f3n activa<\/td><\/tr><tr><td><strong>4) DONE<\/strong><\/td><td>Verde<\/td><td>&nbsp;<\/td><td>3 \u2014 completado, suma al acumulado real<\/td><\/tr><tr><td><strong>5) DISCARDED<\/strong><\/td><td>Rojo<\/td><td>&nbsp;<\/td><td>4 \u2014 descartado, excluir de ratios<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u26a0\ufe0f&nbsp; <strong>Los servicios con estado \u00ab5) DISCARDED\u00bb deben excluirse de los ratios de progreso. En DAX usaremos CALCULATE con un filtro NOT DISCARDED para todos los KPIs principales.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.4 Tipos de dato para columnas de fecha<\/h3>\n\n\n\n<p>Selecciona las siguientes columnas manteniendo Ctrl pulsado y as\u00edgnales Data Type: Date (no DateTime):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>fecha solicitud<\/li>\n\n\n\n<li>fecha de entrega<\/li>\n\n\n\n<li>Fecha de migraci\u00f3n\/monitorizaci\u00f3n<\/li>\n\n\n\n<li>Fecha esperada de migraci\u00f3n<\/li>\n\n\n\n<li>Fecha de decomisionado<\/li>\n\n\n\n<li>Migration window<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udca1 <em>Usar Date en lugar de DateTime simplifica los c\u00e1lculos de acumulados y evita problemas de granularidad horaria en los gr\u00e1ficos de l\u00ednea.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Tabla de fechas (Calendar Table)<\/h2>\n\n\n\n<p>Para que las funciones de Time Intelligence de DAX funcionen correctamente, Power BI necesita una tabla de fechas independiente, marcada como \u00abDate Table\u00bb. Esta tabla act\u00faa como eje temporal al que se vinculan todas las columnas de fecha de la tabla principal.<\/p>\n\n\n\n<p>Crea una nueva tabla en Power BI Desktop (Home \u2192 Enter Data, o directamente en DAX con New Table):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Calendario =\n\u00a0 ADDCOLUMNS(\n\u00a0\u00a0\u00a0\u00a0\u00a0 CALENDAR(DATE(2025,1,1), DATE(2026,12,31)),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"A\u00f1o\",\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 YEAR(&#91;Date]),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Trimestre\",\u00a0\u00a0 \"Q\" &amp; QUARTER(&#91;Date]),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Mes Num\",\u00a0\u00a0\u00a0\u00a0 MONTH(&#91;Date]),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Mes Nombre\",\u00a0 FORMAT(&#91;Date], \"MMMM\"),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Semana\",\u00a0\u00a0\u00a0\u00a0\u00a0 WEEKNUM(&#91;Date]),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"Dia Semana\",\u00a0 FORMAT(&#91;Date], \"dddd\"),\n\u00a0\u00a0\u00a0\u00a0\u00a0 \"A\u00f1oMes\",\u00a0\u00a0\u00a0\u00a0\u00a0 FORMAT(&#91;Date], \"YYYY-MM\")\n\u00a0 )<\/code><\/pre>\n\n\n\n<p>Una vez creada, ve a la vista de Modelo \u2192 clic derecho en la tabla Calendario \u2192 Mark as Date Table \u2192 selecciona la columna Date.<\/p>\n\n\n\n<p>\ud83d\udca1 <em>Esta tabla es obligatoria para poder usar DATEADD, TOTALYTD, SAMEPERIODLASTYEAR y todas las funciones de inteligencia temporal que usaremos en los art\u00edculos de Burn Up y Burndown.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Relaciones en el modelo<\/h2>\n\n\n\n<p>Con la tabla de fechas creada, establece las relaciones en la vista de Modelo (el icono de diagrama en la barra lateral izquierda):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Calendario[Date] \u2192 AllServices[Fecha esperada de migraci\u00f3n]\u00a0 (relaci\u00f3n activa \u2014 para la l\u00ednea planificada)<\/li>\n\n\n\n<li>Calendario[Date] \u2192 AllServices[Fecha de migraci\u00f3n\/monitorizaci\u00f3n]\u00a0 (relaci\u00f3n inactiva \u2014 para la l\u00ednea real, activaremos con USERELATIONSHIP en DAX)<\/li>\n\n\n\n<li>Calendario[Date] \u2192 AllServices[Fecha de decomisionado]\u00a0 (relaci\u00f3n inactiva \u2014 para el Burndown)<\/li>\n<\/ul>\n\n\n\n<p>\u26a0\ufe0f&nbsp; <strong>Power BI solo admite una relaci\u00f3n activa entre dos tablas. Las dem\u00e1s deben ser inactivas y se activan dentro de cada medida DAX con USERELATIONSHIP(). Esto es el patr\u00f3n est\u00e1ndar para modelos con m\u00faltiples roles de fecha.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Verificaci\u00f3n antes de cerrar Power Query<\/h2>\n\n\n\n<p>Antes de hacer clic en Close &amp; Apply, revisa esta checklist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>La tabla se llama \u00abAllServices\u00bb (sin espacios ni caracteres especiales)<\/li>\n\n\n\n<li>Las 6 columnas de fecha tienen tipo Date (icono de calendario en la cabecera)<\/li>\n\n\n\n<li>CPU y RAM (GB) tienen tipo Whole Number<\/li>\n\n\n\n<li>WAVE tiene tipo Text<\/li>\n\n\n\n<li>Las columnas EsMigrado y Status_Color est\u00e1n presentes<\/li>\n\n\n\n<li>El campo Environment no tiene valores en min\u00fasculas<\/li>\n\n\n\n<li>No hay columnas \u00abColumn1\u00bb, \u00abColumn2\u00bb ni columnas sin nombre<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udca1 <em>Cada vez que actualices el Excel origen, Power BI refrescar\u00e1 autom\u00e1ticamente todos estos pasos. Por eso es importante que la estructura del fichero (nombres de columnas, hoja \u00abAll Services AWS\u00bb) se mantenga estable entre actualizaciones.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00f3ximo art\u00edculo<\/h2>\n\n\n\n<p>Con el modelo de datos limpio y las relaciones establecidas, en el Art\u00edculo 2 construiremos las medidas DAX fundamentales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li># Total Elementos (excluyendo Discarded)<\/li>\n\n\n\n<li># Elementos Migrados (DONE acumulado real)<\/li>\n\n\n\n<li># Elementos Planificados (acumulado por fecha esperada)<\/li>\n\n\n\n<li>% Completado<\/li>\n\n\n\n<li>Fecha Estimada de Fin (proyecci\u00f3n lineal)<\/li>\n<\/ul>\n\n\n\n<p>Estas medidas son la base del Burn Up chart que vimos en las capturas de pantalla: la visualizaci\u00f3n m\u00e1s potente para comunicar el estado real vs. planificado de un programa de migraci\u00f3n ante direcci\u00f3n.<\/p>\n\n\n\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\">Blog<\/h2>\n\n\n\n<p class=\"has-text-align-left ext-animate--on\">Esta secci\u00f3n ofrece una visi\u00f3n general del blog, mostrando una variedad de art\u00edculos, ideas y recursos para informar e inspirar a los lectores.<\/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-104 post type-post status-publish format-standard hentry category-uncategorized 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--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\/es_es\/category\/uncategorized\/\" rel=\"tag\">Uncategorized<\/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\/es_es\/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\/es_es\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Avatar de admin' 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\/es_es\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">admin<\/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-uncategorized\">\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\/es_es\/category\/uncategorized\/\" rel=\"tag\">Uncategorized<\/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\/es_es\/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\/es_es\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Avatar de admin' 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\/es_es\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">admin<\/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><li class=\"wp-block-post post-48 post type-post status-publish format-standard has-post-thumbnail hentry category-category-4\">\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\"><figure style=\"aspect-ratio:4\/3;\" class=\"wp-block-post-featured-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1470\" height=\"980\" src=\"https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" style=\"width:100%;height:100%;object-fit:cover;\" srcset=\"https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7.jpg 1470w, https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7-300x200.jpg 300w, https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7-1024x683.jpg 1024w, https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7-768x512.jpg 768w, https:\/\/bricopm.com\/wp-content\/uploads\/2026\/01\/featured-image-7-18x12.jpg 18w\" sizes=\"auto, (max-width: 1470px) 100vw, 1470px\" \/><\/figure>\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\/es_es\/category\/category-4\/\" rel=\"tag\">Categor\u00eda 4<\/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\/es_es\/herramientas-imprescindibles-para-el-gestor-moderno\/\" target=\"_self\" >Herramientas imprescindibles para el gestor moderno<\/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\">Este p\u00e1rrafo sirve como una introducci\u00f3n a tu publicaci\u00f3n de blog. Comienza discutiendo el tema&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\/es_es\/author\/admin\/\" target=\"_self\"  class=\"wp-block-avatar__link\"><img alt='Avatar de admin' 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\/es_es\/author\/admin\/\" target=\"_self\" class=\"wp-block-post-author-name__link\">admin<\/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-01-26T19:40:46+00:00\">Ene 26, 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>Introducci\u00f3n Antes de construir cualquier visual en Power BI, hay que resolver una pregunta fundamental: \u00bfc\u00f3mo estructuro mis datos para que el modelo sea flexible, eficiente y f\u00e1cil de mantener? En esta serie trabajaremos con un programa de migraci\u00f3n cloud: cientos de servicios que deben moverse desde un datacenter on-premise hacia instancias EC2 en AWS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[12,13],"class_list":["post-104","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-excel","tag-power-query"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/posts\/104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/comments?post=104"}],"version-history":[{"count":5,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/posts\/104\/revisions"}],"predecessor-version":[{"id":112,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/posts\/104\/revisions\/112"}],"wp:attachment":[{"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/media?parent=104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/categories?post=104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bricopm.com\/es_es\/wp-json\/wp\/v2\/tags?post=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}