Configurar la actualización incremental

Para configurar la actualización incremental, debe definir una nueva política de actualización para la tabla. Esto se hace fácilmente configurando las propiedades de la política de actualización una vez que EnableRefreshPolicy se haya establecido en True:
Important
La configuración de la actualización incremental con Tabular Editor 3 solo se admite para Datasets alojados en el servicio Power BI Datasets. Para Analysis Services, se requiere particionado personalizado.
Configurar una nueva política de actualización
- Conéctese al modelo: Conéctese al punto de conexión XMLA de Power BI de su Workspace y abra el Dataset en el que desea configurar la actualización incremental.
- Crea los parámetros
RangeStartyRangeEnd: La actualización incremental requiere que se creen los parámetrosRangeStartyRangeEnd(más información). Agregue dos nuevas expresiones compartidas en Tabular Editor:
- Configure los parámetros
RangeStartyRangeEnd: Asígneles los nombresRangeStartyRangeEnd, respectivamente; establezca su propiedadKinden "M" y defina su expresión como se indica a continuación (el valor real de fecha y hora que especifique no importa, ya que el servicio de Power BI lo establecerá al iniciar la actualización de datos):
#datetime(2021, 6, 9, 0, 0, 0)
meta
[
IsParameterQuery=true,
Type="DateTime",
IsParameterQueryRequired=true
]
Copie el código M de la partición: Vaya a la tabla para la que desea configurar la actualización incremental. Despliegue la tabla y seleccione la partición que contiene su expresión M de Power Query. Copia el código en el Bloc de notas; lo necesitarás en el paso 6.
Habilite la política de actualización de la tabla: En la ventana Propiedades, establezca la propiedad
EnableRefreshPolicyde la tabla enTrue:
Configura la actualización de la tabla: A continuación, selecciona la tabla en la que quieres configurar la actualización incremental. En la ventana del Editor de expresiones, selecciona 'Source Expression' en la lista desplegable, inserta tu expresión de Power Query M del paso 4 y modifícala para que incluya un paso de filtrado en la columna de fecha para la que habilitarás la actualización incremental.
A continuación se muestra un ejemplo de un paso de filtro válido:
// El paso de filtro debe poder plegarse de nuevo al Data source
// Ningún paso anterior debe romper el plegado de consultas
#"Incremental Refresh Filter Step" =
Table.SelectRows(
Navigation,
each
[OrderDate] >= #"RangeStart" and
[OrderDate] < #"RangeEnd"
)
Las columnas de tipo fecha, cadena o entero también se pueden filtrar manteniendo el plegado de consultas, usando funciones que convierten RangeStart o RangeEnd al tipo de datos adecuado. Para obtener más información, consulta aquí
Configura la política de actualización: Configura las propiedades restantes según la política de actualización incremental que necesites. Recuerda especificar una expresión M para la propiedad
SourceExpression(esta es la expresión que se añadirá a las particiones creadas por la política de actualización incremental y debe usar los parámetrosRangeStartyRangeEndpara filtrar los datos en el origen). El operador = solo debe aplicarse a RangeStart o a RangeEnd, pero no a ambos, ya que podrían duplicarse los datos.- Source Expression: La expresión M que se añadirá a las particiones creadas por la política de actualización.
- IncrementalWindowGranularity: La granularidad de la ventana incremental (de actualización).
- IncrementalWindowPeriods: Número de períodos (con la granularidad indicada más arriba) durante los cuales se deben actualizar los datos.
- IncrementalWindowPeriodsOffset: Establécelo en
-1para configurar 'Only Refresh Complete Periods' - RollingWindowGranularity: La granularidad de la ventana deslizante (de archivo).
- RollingWindowPeriods: Número de períodos (con la granularidad indicada más arriba) durante los cuales se deben archivar los datos.
- Mode: Si es una política de actualización
Importestándar oHybrid, en la que la última partición es DirectQuery. - PollingExpression: Una expresión M válida configurada para detectar cambios en los datos. Para más información sobre Polling Expression u otras propiedades de la política de actualización, consulta aquí.
Aplicar cambios al modelo: Guarda el modelo (Ctrl+S).
Aplicar política de actualización: Haz clic con el botón derecho en la tabla y elige "Aplicar política de actualización".
¡Listo! En este punto, deberías ver que el servicio de Power BI ha generado automáticamente las particiones de tu tabla, según la política que especificaste. Solo queda actualizar todas las particiones.
- Actualizar todas las particiones: Mantén pulsada Mayús y haz clic para seleccionar todas las particiones. Haz clic con el botón derecho y selecciona Actualizar > Actualización completa (partición). Puedes hacer clic con el botón derecho en la tabla y seleccionar 'Preview data' para ver el resultado.
Por último, puedes configurar la actualización programada en Power BI Service. Power BI se encargará automáticamente de crear las particiones de tu tabla. Siempre puedes conectarte al modelo remoto para ver y validar las particiones, por ejemplo, usando el Analizador VertiPaq.
Actualización incremental con claves de fecha de tipo entero
Si tu columna de fecha es de tipo entero, usa lo siguiente en lugar del paso 4 del filtro anterior:
- Crea la función personalizada: Crea una expresión compartida llamada
ConvertDatetimeToInt:
// A custom M function which will return a DateTime value as a YYYYMMDD integer
(DateValue as datetime) =>
Date.Year(DateValue) * 10000 + Date.Month(DateValue) * 100 + Date.Day(DateValue)
- Crea el paso de filtro: Usa la función personalizada para convertir
RangeStartyRangeEnden línea a un entero. Por lo demás, el paso de filtro es idéntico al que usarías si la columna Date fuera de tipo DateTime:
let
// Conectar a tu Data source
Source =
Sql.Database(#"SqlEndpoint", #"Database"),
// Cargar los datos de la tabla
Data =
Source{ [Schema="Factview", Item="Orders"] }[Data],
// Realizar las transformaciones que deban plegarse de nuevo en el Data source
#"Remove Unnecessary Columns" =
Table.RemoveColumns (
Data,
{
"DWCreatedDate",
"Net Invoice Cost"
}
),
// Agregar el paso de filtro de actualización incremental
// El paso de filtro debe poder plegarse de nuevo en el Data source
// Ningún paso anterior a este debería romper el plegado de consultas
#"Actualización incremental" =
Table.SelectRows(
#"Remove Unnecessary Columns",
each [OrderDateKey] >= ConvertDatetimeToInt(#"RangeStart")
and [OrderDateKey] < ConvertDatetimeToInt(#"RangeEnd")
)
in
#"Actualización incremental"
- Continúa con normalidad con los siguientes pasos: Después, puedes continuar con la configuración y la aplicación de la política de actualización con "Aplicar política de actualización" y, por último, actualizar todas las particiones. Previsualiza los datos de la tabla una vez finalicen las operaciones de actualización para ver el resultado.
Actualización incremental con claves de fecha de tipo cadena
Si tu columna de fecha es de tipo cadena, deberías configurar el paso de filtro para analizar la columna Date sin romper el plegado de consultas. Esto variará en función del origen y de cómo esté formateada la fecha. A continuación se muestra un ejemplo hipotético de una fecha de pedido con el formato 'YYYY-MM-DD':
let
// Conectar a tu Data source
Source =
Sql.Database(#"SqlEndpoint", #"Database"),
// Cargar los datos de la tabla
Data =
Source{ [Schema="Factview", Item="Orders"] }[Data],
// Realizar las transformaciones que deban plegarse de nuevo en el Data source
#"Remove Unnecessary Columns" =
Table.RemoveColumns (
Data,
{
"DWCreatedDate",
"Net Invoice Cost"
}
),
// Agregar el paso de filtro de actualización incremental
// El paso de filtro debe poder plegarse de nuevo en el Data source
// Ningún paso anterior a este debería romper el plegado de consultas
#"Actualización incremental" =
Table.SelectRows(
#"Remove Unnecessary Columns",
each
// Convierte "2022-01-09" a DateTime, por ejemplo
DateTime.From(
Date.FromText(
[OrderDate],
[Format="yyyy-MM-dd"]
)
) >= #"RangeStart"
and
DateTime.From(
Date.FromText(
[OrderDate],
[Format="yyyy-MM-dd"]
)
) < #"RangeEnd"
)
in
#"Actualización incremental"
Consulta también la documentación de la función Date.FromText en Power Query aquí. Si no es posible convertir la columna Date sobre la marcha manteniendo el plegado de consultas, también puedes configurar la actualización incremental con una consulta nativa, como se describe en la sección siguiente.
Actualización incremental con consultas nativas
Si has configurado una consulta nativa, quizá siga siendo posible configurar y usar la actualización incremental, según tu Data source. Para probarlo por tu cuenta, debes seguir estos pasos en lugar del paso 4 anterior:
Redacta y guarda la consulta nativa: Escribe tu consulta nativa en SQL Server Management Studio o Azure Data Studio. Incluye una cláusula
WHEREde ejemplo que filtre con >= un parámetro DateTime y con < otro parámetro DateTime.
incremental-refresh-native-query-formatted.pngSustituye la cadena de consulta nativa en la expresión de origen: Copia la consulta y sustituye la actual, que estará llena de caracteres como (lf) (salto de línea), (cr) (retorno de carro) y (n) (nueva línea). Esto hace que la consulta sea realmente legible y editable sin tener que recurrir a la interfaz de usuario de Consulta nativa de Power BI Desktop.
Sustituye el texto anterior en el parámetro Query por el siguiente, por ejemplo:
- Añadir
RangeStartyRangeEnd: Concatena "RangeStart" y "RangeEnd" dentro de la cláusulaWHERE, sustituyendo los campos de marcador de posición y convirtiendo los parámetros al tipo de fecha conDate.Fromy al tipo de texto medianteDate.ToText, con la opciónFormatestablecida en"yyyy-MM-dd. No olvides incluir comillas simples'a ambos lados de la concatenación. A continuación tienes un ejemplo de cómo quedaría la consulta final:
// Ejemplo de una consulta nativa completa que se pliega y funciona con actualización incremental
let
Source = Sql.Database("yoursql.database.windows.net", "YourDatabaseName",
[Query="
SELECT
[OrderDateKey]
,[DueDateKey]
,SUM([OrderQuantity]) AS 'TotalOrderQuantity'
,SUM([SalesAmount] ) AS 'TotalSalesAmount'
,[CustomerKey]
,[ProductKey]
FROM [DW_fact].[Internet Sales]
WHERE
CONVERT(DATE, CONVERT(VARCHAR(8), [OrderDateKey]))
>= CONVERT(DATE, '" & Date.ToText(Date.From(#"RangeStart"), [Format="yyyy-MM-dd"]) & "')
AND
CONVERT(DATE, CONVERT(VARCHAR(8), [OrderDateKey]))
< CONVERT(DATE, '" & Date.ToText(Date.From(#"RangeEnd"), [Format="yyyy-MM-dd"]) & "')
GROUP BY
[OrderDateKey]
,[DueDateKey]
,[CustomerKey]
,[ProductKey]
"])
in
Source
Validar la nueva expresión M: Puedes intentar guardar los cambios en la expresión M de la tabla antes de habilitar la política de actualización, para comprobar si obtienes los resultados esperados al establecer
RangeStartyRangeEnden valores concretos. Si es así, puedes continuar con normalidad; Power BI podrá encargarse de la creación de particiones como se espera si configuraste los pasos en Power Query.Puede que no sea necesario, pero en función de las transformaciones de la consulta nativa, también puedes probar a añadir el parámetro
[EnableFolding = True]tal y como se describe en este artículo de Chris Webb.Continúa con normalidad con los siguientes pasos: Después, puedes seguir con la configuración y aplicación de la política de actualización con 'Aplicar política de actualización' y, por último, actualizar todas las particiones. Previsualiza los datos de la tabla cuando finalicen las operaciones de actualización para ver el resultado.