Problema con el cambio de orden de clasificación después de la carga 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 de ID de fila, que aumenta 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 correcto. 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 mirar las filas de la tabla. Sin embargo, en esta vista, el orden de clasificación está completamente arruinado.
La fila superior de la ventana (cuál 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 ordenar explícitamente el 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?
Por favor, avíseme si hay alguna forma de conservar el orden de clasificación correctamente después de cargar la tabla.

¡Muchas gracias!

Hola @iplaygod

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

Consulte aquí para obtener una buena descripción.

En su ejemplo, podría ser Run Length Encoding lo que da como resultado un reordenamiento de las filas de su tabla. Con la codificación Run Length, 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 inicial y longitud de ejecución.

Por esta razón, nunca puede confiar en un orden de clasificación particular de 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 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 si realmente cambia el orden de clasificación de la tabla en memoria.

Saludos,

Owen

Hola @iplaygod

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

Consulte aquí para obtener una buena descripción.

En su ejemplo, podría ser Run Length Encoding lo que da como resultado un reordenamiento de las filas de su tabla. Con la codificación Run Length, una columna con una gran cantidad de valores repetidos se ordena para que los valores iguales se agrupen. Esto significa que las filas que contienen un valor común pueden ser referenciadas internamente por posición inicial y longitud de ejecución.

Por esta razón, nunca puede confiar en un orden de clasificación particular de 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 si realmente cambia el orden de clasificación de la tabla en memoria.

Saludos,

Owen

Robertsolczak

En respuesta a OwenAuger

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

Sugiere que DAX es de alguna utilidad 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 OwenAuger

@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 conservar 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 raciones de compresión. Esto luego «arruina» el tipo.

Ojalá hubiera alguna forma de solucionarlo, 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 con el fin de 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 iteraré sobre un conjunto de filas, y quiero estar SEGURO de que las filas sobre las que iteraré tengan un número de identificación de fila creciente. Puedo volver a publicar eso en un hilo diferente si tengo que hacerlo, pero en realidad es la razón por la que hice la pregunta original …

?

Gracias por la ayuda

En respuesta a iplaygod

@iplaygod

Eres bienvenido 🙂

Ha dado en el clavo: para hacer cumplir 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 clasificables.

Una vez que tenga dicha columna, puede usar DAX para iterar o filtrar esas filas de manera adecuada, pero los detalles dependerán exactamente de lo que esté tratando de 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 *