Table of Contents

Modelos semánticos de Direct Lake

Los modelos semánticos SQL de Direct Lake se conectan directamente a los Data sources almacenados en OneLake en Fabric mediante el punto de conexión SQL.

Important

A partir de Tabular Editor 3.22.0, Tabular Editor 3 es compatible con Direct Lake en OneLake, lo cual se recomienda en la mayoría de los escenarios. Consulta nuestro artículo de guía de Direct Lake para obtener más información.

Tabular Editor 3 puede crear y conectarse a este tipo de modelo. Para ver un tutorial, consulta este artículo de nuestro blog: Modelos semánticos de Direct Lake: cómo usarlos con Tabular Editor. Tabular Editor 3 puede crear modelos semánticos de Direct Lake tanto con el punto de conexión SQL de Lakehouse como con el de Datawarehouse.

Tabular Editor 2 puede conectarse a modelos semánticos de Direct Lake, pero no incluye ninguna funcionalidad integrada para crear nuevas tablas ni modelos semánticos de Direct Lake. Esto debe hacerse manualmente o con un C# Script.

Note

Limitaciones de Direct Lake Hay varias limitaciones en cuanto a los cambios que se pueden realizar en un modelo de Direct Lake. Consulta Direct Lake Considerations and Limitations para obtener la lista completa. Consulta también este artículo de SQLBI para obtener una visión general a la hora de elegir entre Direct Lake e Import mode.

Crear un modelo de Direct Lake en SQL en Tabular Editor 3

La creación de un modelo de Direct Lake en SQL en Tabular Editor 3 (3.15.0 o superior) debe especificarse al crear el modelo en el cuadro de diálogo Nuevo modelo, mediante la casilla Direct Lake.

Direct Lake New Model

Usar la casilla garantiza que se establezcan las propiedades y anotaciones específicas de Direct Lake, y también limita la importación de tablas a orígenes compatibles con Direct Lake.

Note

En este momento, los modelos de Direct Lake en SQL usan una intercalación diferente a la de los modelos semánticos de importación habituales de Power BI. Esto puede provocar resultados diferentes al consultar el modelo o al hacer referencia a nombres de objetos en código DAX. Para más información, consulta esta entrada del blog de Kurt Buhler: Modelos con distinción entre mayúsculas y minúsculas en Power BI: consecuencias y consideraciones.

Important

A partir de Tabular Editor 3.22.0, se ha eliminado la casilla Direct Lake del cuadro de diálogo Nuevo modelo. Debes establecer manualmente la intercalación de tu modelo para que coincida con la de tu Fabric Warehouse si usas Direct Lake en SQL.

Enmarcado de nuevos modelos e importaciones de tablas

Tabular Editor 3 (3.15.0 o superior) enmarca (refresca) automáticamente el modelo en el primer despliegue. Esto garantiza que el modo Direct Lake esté activado; de lo contrario, el modelo volvería automáticamente a DirectQuery.

Además, al importar nuevas tablas, Tabular Editor 3 (3.15.0 o superior) enmarca (refresca) el modelo la próxima vez que se guarde. Esta preferencia se encuentra en Herramientas > Preferencias > Implementación de modelo > Actualización de datos.

Identificación de un modelo Direct Lake

La barra de título superior de Tabular Editor muestra qué tipo de modelo está abierto en esa instancia de Tabular Editor. Además, el Explorador TOM muestra el tipo y el modo de cada tabla (Import, DirectQuery, Dual o Direct Lake). Si un modelo contiene una combinación de modos de tabla, la barra de título mostrará "Híbrido". Actualmente, no es posible que un modelo Direct Lake on SQL contenga tablas en modo Import, DirectQuery o Dual.

Convertir un modelo Direct Lake a Import Mode

El siguiente C# Script convierte un modelo existente al modo Import mode. Esto puede ser útil si los requisitos de latencia de datos de tu modelo no requieren Direct Lake, o si quieres evitar las limitaciones de un modelo Direct Lake pero ya has empezado a crear uno en Fabric.

Es posible ejecutar el script cuando Tabular Editor está conectado a un modelo semántico a través del punto de conexión XMLA. Sin embargo, guardar los cambios directamente en el Workspace de Power BI/Fabric no está admitido por Microsoft. Para evitarlo, el enfoque recomendado es usar la opción "Modelo > Implementar...". Esto permite implementar el modelo recién convertido como una nueva entidad en un Workspace.

Note

Después de implementar el modelo recién convertido en modo de importación, tendrás que especificar las credenciales para acceder al Lakehouse y actualizar los datos en el modelo.

Script de C# para convertir un modelo Direct Lake a Import Mode

// **********************************************************************************
// Convert Direct Lake-mode model to Import-mode
// ---------------------------------------------
//
// When this script is executed on a semantic model, it will:
//
//   - Loop through all tables. Any table that contains exactly 1 partition, which
//     is in Direct Lake mode, will have its partition replaced by an equivalent
//     Import-mode partition.
//   - Set the collation of the model to null (default)
// 
// Remarks:
// 
//   - The Import-mode partitions will use the SQL endpoint of the Lakehouse.
//   - The script assumes that the Shared Expression which specifies the SQL endpoint
//     is called "DatabaseQuery".
//   - Because TE2 does not expose the "SchemaName" property on EntityPartition
//     objects, we have to use reflection to access the underlying TOM objects.
//
// Compatibility:
// TE2.x, TE3.x
// **********************************************************************************

using System.Reflection;

const string mImportTemplate = 
@"let
    Source = DatabaseQuery,
    Data = Source{{[Schema=""{0}"",Item=""{1}""]}}[Data]
in
    Data";

foreach(var table in Model.Tables)
{
    // Direct Lake-mode tables only have 1 partition...
    if(table.Partitions.Count != 1) continue;
    
    // ...which should be in "DirectLake" mode:
    var partition = table.Partitions[0];
    if(partition.Mode != ModeType.DirectLake) continue;

    // Tabular Editor unfortunately doesn't expose the SchemaName property of EntityPartitionSources,
    // so we'll have to use reflection to access the underlying TOM object.
    var pMetadataObjct = typeof(Partition).GetProperty("MetadataObject", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
    var tomPartition = pMetadataObjct.GetValue(partition) as Microsoft.AnalysisServices.Tabular.Partition;
    var tomPartitionSource = tomPartition.Source as Microsoft.AnalysisServices.Tabular.EntityPartitionSource;
    
    // Table does not have an EntityPartitionSource, meaning it is not a Direct Lake table
    // (shouldn't happen, since we already checked for DirectLake mode above...)
    if(tomPartitionSource == null) continue;
    
    var schemaName = tomPartitionSource.SchemaName;
    var tableName = tomPartitionSource.EntityName;

    // Rename the original (Direct Lake) partition (as we can't have two partitions with the same name):
    var partitionName = partition.Name;
    partition.Name += "_old";
    
    // Add the new (Import) partition:
    table.AddMPartition(partitionName, string.Format(mImportTemplate, schemaName, tableName));
    
    // Delete the old (Direct Lake) partition):
    partition.Delete();
}

// Update model collation:
Model.Collation = null;
Model.DefaultMode = ModeType.Import;
Model.RemoveAnnotation("TabularEditor_DirectLake");