Una familia de software de hoja de cálculo de Microsoft con herramientas para analizar, trazar y comunicar datos.
Nota: Esta respuesta es una traducción automática. Puede contener errores gramaticales o expresiones que suenen poco naturales.
Hola @christian larrue
Según la información que ha proporcionado, entiendo que dispone de una consulta de Power Query que alimenta una tabla dinámica a partir de un archivo CSV de ventas mensuales. El problema surge cuando el sistema cambia automáticamente el nombre de una columna cada mes (por ejemplo, de Sales_July a Sales_August); al actualizar los datos, Power Query genera el siguiente error: Expression.Error: The column 'Sales_July' of the table wasn't found (No se encontró la columna 'Sales_July' en la tabla).
Tras analizar la situación y reproducir el comportamiento, parece que la causa radica en que Power Query fija el nombre de la columna (lo codifica de forma estática) en pasos como "Tipo cambiado" o "Columnas renombradas". Cuando el encabezado cambia al mes siguiente, dichos pasos siguen buscando el nombre antiguo, lo que provoca el fallo de la actualización.
La solución consiste en añadir un paso que detecte dinámicamente la columna cuyo nombre comienza por "Sales_" y la renombre con un nombre fijo, como "Current_Month_Sales". Es fundamental que este paso se ejecute lo antes posible dentro de la consulta; concretamente, antes de que cualquier paso de "Tipo cambiado" o similar haga referencia a la columna por su nombre literal.
Esto se debe a que Power Query suele generar automáticamente pasos como: Table.TransformColumnTypes(Source, {{"Sales_July", type number}})
Si al mes siguiente la columna pasa a llamarse "Sales_August", ese paso seguirá buscando "Sales_July" y provocará el error inmediatamente.
Aquí tienes el código M para ese paso:
let
Source = Csv.Document(File.Contents("YourFilePath.csv"), [Delimiter=",", Columns=..., Encoding=65001]),
PromotedHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
// --- Dynamic column detection starts here ---
ColumnNames = Table.ColumnNames(PromotedHeaders),
SalesColumnName = List.Select(ColumnNames, each Text.StartsWith(_, "Sales_")){0},
RenamedColumns = Table.RenameColumns(PromotedHeaders, {{SalesColumnName, "Current_Month_Sales"}}),
// --- From this point on, every later step references "Current_Month_Sales" and never breaks ---
ChangedType = Table.TransformColumnTypes(RenamedColumns, {{"Current_Month_Sales", type number}})
in
ChangedType
Puede consultar los pasos a continuación para realizar los cambios:
Paso 1: Abrir el Editor de Power Query
Seleccione Datos > Consultas y conexiones
Haga doble clic en la consulta que presenta el error.
Seleccione Inicio > Editor avanzado
Paso 2: Inserte un paso de cambio de nombre dinámico inmediatamente después de "Promover encabezados".
Busque una línea similar a esta:
PromotedHeaders =
Table.PromoteHeaders(Source,[PromoteAllScalars=true]),
Inmediatamente después, añada:
ColumnNames =
Table.ColumnNames(PromotedHeaders),
SalesColumnName =
List.Select(
ColumnNames,
each Text.StartsWith(_, "Sales_")
){0},
RenamedColumns =
Table.RenameColumns(
PromotedHeaders,
{{SalesColumnName, "Current_Month_Sales"}}
),
Paso 3: Editar todos los pasos siguientes
Cualquier paso que se esté utilizando actualmente Sales_July todo debe cambiarse a Current_Month_Sales
Si el error persiste, vaya a la sección Pasos aplicados (en el lado derecho de la ventana de Power Query), haga clic con el botón derecho en el paso "Encabezados promocionados" y seleccione "Insertar paso después".
Esta acción crea un nuevo paso inmediatamente después de "Encabezados promocionados" y antes del paso "Tipo cambiado" que está causando el error.
En la barra de fórmulas, reemplace la fórmula predeterminada con la siguiente.
= let
ColumnNames = Table.ColumnNames(#"Promoted Headers"),
SalesColumnName = List.Select(ColumnNames, each Text.StartsWith(_, "Sales_")){0}
in
Table.RenameColumns(#"Promoted Headers", {{SalesColumnName, "Current_Month_Sales"}})
A continuación, pulse la tecla Intro o el icono de la marca de verificación para confirmar.
Continúe modificando la referencia en el paso "Tipo cambiado"; haga clic en el paso "Tipo cambiado" existente. En la fórmula de este paso, reemplace {"Sales_July", type number}> {"Current_Month_Sales", type number}
Después de realizar los dos cambios anteriores, haga clic en Inicio > Cerrar y cargar.
Por favor, avíseme si hay alguna novedad.