Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

DAX para agregar números de fila basados en un valor distinto de una columna y ordenados por valor de otra columna

Hola a todos

Preparé un ejemplo de datos para mi caso para explicarlo con la mayor precisión posible.

En mi caso están disponibles los siguientes datos:

- DataTime es una columna con la fecha y hora de la medición sin conexión después del fin de la vida útil. Durante una medición se miden varias características de medición, pero todas ellas siempre se asignan a la misma fecha/hora. Los productos no se miden en orden de producción en el fin de la vida.

- SerialNumber es una columna con un número de serie único de cada producto. Es una combinación de la fecha (primeros 6 dígitos) y el pedido en EOL (últimos seis dígitos) durante este día, por lo que en función de este número se puede reconocer qué producto se ha producido antes y/o después. Un producto se puede medir una o varias veces (asignado a muchos valores de DataTime)

- Entidad es una columna con el nombre de la entidad medida durante la medición.

Como observación, puedo agregar que inicialmente en los datos sin procesar de los equipos de medición, la columna DataTime es única, pero después de anular la dinamización de todas las columnas de características se duplica en muchas filas.

La tabla de ejemplo de entrada está disponible en el siguiente enlace: https://drive.google.com/file/d/1oyfUhBwf_hNNmqqEDe0tHTSg72LCWLRM/view?usp=drive_link

karolp_0-1698164431647.png

En este momento, necesito agregar un número de fila MeasurementID como columna a la tabla en las siguientes condiciones:

- el mismo número de fila debe asignarse al mismo valor de DataTime

- El número de fila debe ordenarse por número de serie ascendente

- en caso de que se vuelva a medir SerialNumber, asignado a otro valor de DataTime, el número de fila debe ordenarse por DataTime ascendente.

A continuación se muestra el resultado de ejemplo esperado:

karolp_1-1698164886000.png

Los datos de ejemplo con la salida esperada con la columna MeasurementID agregada de acuerdo con las condiciones descritas están disponibles en el siguiente vínculo: https://drive.google.com/file/d/1WgyPQV-U6Iwuj6mDEQisgPzIj1mukPN-/view?usp=drive_link

Necesito el MeasurementID como base para múltiples visualizaciones en muchas páginas, por lo que creo que el método más apropiado para calcularlo en Power BI es una columna calculada o en Power Query. La medida no es suficiente, porque hasta donde yo sé, la posibilidad de filtro estará limitada/deshabilitada para muchas visualizaciones a la vez.

Desafortunadamente, no sé cómo escribir un elogio DAX correcto para devolver el MeasurementID como espero. Así que le pido amablemente que me ayude a encontrar una solución para mi problema.

Si esto es útil a continuación, envío el elogio SQL que devuelve el MeasurementID de acuerdo con las condiciones mencionadas anteriormente (la salida de datos de muestra se calcula en función del código a continuación). Pero, por desgracia, no sé cuál será el equivalente en el DAX.

WITH
cte1 AS (
		SELECT DISTINCT DataTime, 
				SerialNumber
		FROM ALL_Table_unpivot),
cte2 AS (
		SELECT DataTime,
			SerialNumber,
			ROW_NUMBER() OVER(ORDER BY SerialNumber ASC, DataTime ASC) AS MeasurementID
		FROM cte1)
SELECT atu.DataTime,
	atu.SerialNumber,
	atu.Feature,
	cte2.MeasurementID
FROM ALL_Table_unpivot AS atu
LEFT JOIN cte2 ON atu.DataTime = cte2.DataTime
ORDER BY SerialNumber;

Si también considera que una solución diferente, no a través de DAX, es mejor aplicable como solución a este problema, me gustaría escuchar su propuesta también.

Agradezco a todos por su ayuda en este tema.

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@karolp

Me alegro de que funcione.

Syndicate_Admin
Administrator
Administrator

Hola @gmsamborn

¡Gracias por la solución!

Lo comprobé y, por supuesto, funciona perfectamente como lo describiste con mis datos de muestra.

También comprobé si cambio el archivo de origen (agrego nuevas filas con los resultados de la medición) y lo actualizo para volver a calcularlo y todavía se ve bien.

¡Gracias de nuevo!

Syndicate_Admin
Administrator
Administrator

@karolp

Lo hice en Power Query con los siguientes pasos:

- copiar 'ALL_Table_unpivot' a 'ALL_Table_unpivot-index'

- en 'ALL_Table_unpivot-index', elimine las columnas además de [DataTime] y [SerialNumber]

- Eliminar duplicados

- Ordenar por las 2 columnas

- ordenar por [SerialNumber]

- mientras [SerialNumber] está seleccionado, seleccione [DataTime] mientras presiona CTRL

- mientras sigue presionando CTRL, ordene [DataTime]

- Agregar un índice (a partir de 1)

- Empezando por 'All_Table_unpivot', fusiona 'All_Table_unpivot-index'

- expanda la tabla ALL-Table_unpivot-index y extraiga [MeasurementID]

Espero que esto tenga sentido.

(Agregué una fila adicional para SerialNumber '20231003000134' con una fecha diferente para fines de prueba).

karolp-2.pbix

Helpful resources

Announcements
PBIApril_Carousel

Power BI Monthly Update - April 2025

Check out the April 2025 Power BI update to learn about new features.

Notebook Gallery Carousel1

NEW! Community Notebooks Gallery

Explore and share Fabric Notebooks to boost Power BI insights in the new community notebooks gallery.

April2025 Carousel

Fabric Community Update - April 2025

Find out what's new and trending in the Fabric community.

Top Kudoed Authors