Problema con el orden de clasificación cambiando después de cargar en el modelo

Un usuario Pregunto ✅

iplaygod

Tengo un problema relacionado con el orden de clasificación. Me esta volviendo loco. No puedo entenderlo.

Tengo una base de datos de acceso en formato de archivo. Una tabla contiene aproximadamente 2 millones de filas de datos. Cada fila tiene un campo ID de fila, que se incrementa automáticamente desde 1 en adelante.

Elijo la base de datos como fuente y cargo la tabla.
Y en la ventana «editar consulta», el orden de clasificación parece estar bien. Es decir, la primera fila en la parte superior de la ventana de vista previa tiene un ID de fila de 1.

Luego hago clic en Cerrar y aplicar, las filas se cargan en el modelo y luego llego a la vista de datos donde también puedo ver las filas de la tabla. Sin embargo, en esta vista, el orden de clasificación está completamente jodido.
La fila superior de la ventana (lo que debería ser la primera fila) tiene un ID de fila de 353080. (?!?!?)

Entonces, ¿qué está pasando? ¿Por qué el tipo está jodido?
Lo ÚNICO que hice fue cargar la tabla en el modelo. Nada más y nada menos. Sin embargo, la clasificación parece haber cambiado después de la carga… ?!

También intenté volver al modo «Editar consultas» y ordené explícitamente la ID de fila. Pero cuando cierro y aplico, el resultado sigue siendo el mismo en la vista de datos.

¿Es esto un error? ¿O me estoy perdiendo algo?
Avíseme si hay alguna forma de preservar el orden de clasificación correctamente después de cargar la tabla.

¡Muchas gracias!

Owen Auger

Hola @iplaygod

El motor Vertipaq aplica una serie de algoritmos de compresión para reducir la huella de memoria de un modelo de datos de Power BI.

Ver aquí para una buena descripción.

En su ejemplo, podría ser la codificación de longitud de ejecución lo que resulta en un reordenamiento de las filas de su tabla. Con la codificación de longitud de ejecución, una columna con una gran cantidad de valores repetidos se ordena para que los valores iguales se agrupen. Esto significa que se puede hacer referencia internamente a las filas que contienen un valor común por posición de inicio y longitud de ejecución.

Por este motivo, nunca puede confiar en un orden de clasificación particular de las filas en un modelo de Power BI.

En general, casi no hay forma en DAX de escribir una expresión útil que dependa del orden de las filas de una tabla (las excepciones pueden ser la función SAMPLE y la función TOPNSKIP no documentada). Siempre determinaría el «orden» a partir de los valores contenidos en una o más columnas.

En la vista de datos, puede ordenar por una columna en particular haciendo clic con el botón derecho en el encabezado de una columna, lo que podría satisfacer sus necesidades. No estoy seguro de si esto es cosmético o realmente cambia el orden de clasificación de la tabla en memoria.

Saludos,

Owen

Owen Auger

Hola @iplaygod

El motor Vertipaq aplica una serie de algoritmos de compresión para reducir la huella de memoria de un modelo de datos de Power BI.

Ver aquí para una buena descripción.

En su ejemplo, podría ser la codificación de longitud de ejecución lo que resulta en un reordenamiento de las filas de su tabla. Con la codificación de longitud de ejecución, una columna con una gran cantidad de valores repetidos se ordena para que los valores iguales se agrupen. Esto significa que se puede hacer referencia internamente a las filas que contienen un valor común por posición de inicio y longitud de ejecución.

Por este motivo, nunca puede confiar en un orden de clasificación particular de las filas en un modelo de Power BI.

En general, casi no hay forma en DAX de escribir una expresión útil que dependa del orden de las filas de una tabla (las excepciones pueden ser la función SAMPLE y la función TOPNSKIP no documentada). Siempre determinaría el «orden» a partir de los valores contenidos en una o más columnas.

En la vista de datos, puede ordenar por una columna en particular haciendo clic con el botón derecho en el encabezado de una columna, lo que podría satisfacer sus necesidades. No estoy seguro de si esto es cosmético o realmente cambia el orden de clasificación de la tabla en memoria.

Saludos,

Owen

Anónimo

En respuesta a Owen Auger

Debería haber sospechado que esa es la forma en que Power Pivot optimiza sus datos, pero es una pena que no pueda sobrepasarlo fácilmente (con conciencia, puede aumentar significativamente el tamaño del modelo de datos)…

Usted sugiere que DAX es útil cuando queremos construir medidas que se basan en el orden… ¿Significa que si quiero tener tales métricas necesito usar una hoja de cálculo de Excel?

iplaygod

En respuesta a Owen Auger

@OwenAuger

Muchas gracias por esa información.

Ahora entiendo por qué el orden de clasificación es diferente después de cargarlo.

Esto se debe a que el motor determina el orden de clasificación para optimizar el almacenamiento de memoria en el modelo, no para preservar ninguna clasificación «original» de la tabla en sí.

Puedo ver en la tabla en la vista de datos que los valores repetidos se ordenan uno al lado del otro, probablemente como usted dice, para proporcionar mejores proporciones de compresión. Esto entonces «arruina» el tipo.

Ojalá hubiera alguna forma de evitarlo, ya que establece algunas limitaciones sobre lo que puedo hacer con el código/fórmulas…

¿Tiene algún buen consejo para «falsificar» el orden de clasificación para preservar una funcionalidad similar COMO SI tuviera la tabla ordenada por, digamos, ID de fila?

Digamos que quiero escribir una fórmula en la que itero sobre un conjunto de filas, y quiero estar SEGURO de que las filas sobre las que itero tienen un número de ID de fila creciente. Puedo volver a publicar eso en un hilo diferente si es necesario, pero en realidad es la razón por la que hice la pregunta original …

?

Gracias por la ayuda

Owen Auger

En respuesta a iplaygod

@iplaygod

Eres bienvenido 🙂

Ha dado en el clavo: para imponer algún tipo de orden, necesita una columna que contenga valores que definan el orden, como una columna de índice, una columna de fecha o alguna otra columna de valores ordenables.

Una vez que tenga una columna de este tipo, puede usar DAX para iterar o filtrar esas filas de manera adecuada, pero los detalles dependerán exactamente de lo que intente hacer. Si puede publicar los detalles aquí o en un nuevo hilo, entonces yo o alguien más podemos ayudar más. 🙂

Atentamente,

Owen

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *