RANKX comienza en 2 en lugar de 1

Un usuario Pregunto ✅

heasham

Hola,

Deseo clasificar a los jugadores por su tiempo de sprint de 30 m, que cambia dinámicamente cuando se aplican segmentaciones de página, por ejemplo, Grupo de edad (que es lo que parece hacer actualmente). Sin embargo, los resultados de mi medida RANKX comienzan en 2, en lugar de 1.

Nombre de la tabla: ‘Sprint’ (tiene una columna de índice que comienza en 1)

_30m Time = CALCULATE (
MIN ( Sprint[30m Time]),
FILTER ( ALLSELECTED ( Sprint ),
Sprint[PlayerID] = SELECTEDVALUE ( Sprint[PlayerID] )
)
)
_30mRank = IF(Sprint[_30m Time]>0.00,
RANKX( ALLSELECTED(Sprint),Sprint[_30m Time],,ASC,Dense),
BLANK()
)

dax rankx consulta.PNG

Espero que alguien pueda ayudarme?

Muchas gracias !

Anónimo

// Player must be a dimension connected to Sprints
// through 1:*. Columns in Sprints must be hidden.
// Slicing can only be done through dimensions
// NEVER DIRECTLY ON A FACT TABLE.

// Stick to the rules of dimensional design and
// you'll be producing correct and easy models
// with simple and quick DAX. If you don'... well,
// you'll be in trouble in no time.

// Never filter a table when you can filter a column.
// Please remember this golden rule of DAX programming.

// Measures should NEVER be referenced with their
// table's name. Columns should ALWAYS be referenced
// using their table's name.

[30m Time] =
var __onePlayerVisible = hasonevalue( Player[PlayerID] )
var __30mTime = min( Sprints[30m Time] )
return
	if( __onePlayerVisible, __30mTime )
	
	
[30m Rank] =
var __time = [30m Time]
var __allVisiblePlayersWithNonZeroTime =
	filter(
		allselected( Player ),
		[30m Time] > 0
	)
var __shouldCalculate = __time > 0
var __result =
	rankx(
		__allVisiblePlayersWithNonZeroTime,
		[30m Time], , ASC, DENSE
	)
return
	if( __shouldCalculate, __result )

Esto es más o menos lo que necesitas.

Mejor

D

heasham

En respuesta a Anónimo

Esto es realmente útil. ¡Gracias por tomarse el tiempo para explicarlo todo en detalle! Todavía estoy aprendiendo a asegurarme de que mi modelo de datos sea a prueba de balas, por lo que esto me ha ayudado a enmarcarlo de manera lógica.

Muchas gracias

Anónimo

Pues tu medida

_30mRank = IF(Sprint[_30m Time]>0.00,
RANKX( TODOS LOS SELECCIONADOS(Sprint),Sprint[_30m Time],,ASC,Denso),
BLANCO()
)

dice claramente cuándo se debe mostrar el espacio en blanco, pero estás clasificando contra todos los jugadores visibles…

Mejor
D

heasham

En respuesta a Anónimo

Disculpa, no te sigo. ¿Qué me sugieres?

picante

_30mRank = IF (Table1[Column2] > 0,
    RANKX( FILTER(Table1, Table1[Column2] > 0.0), Table1[Column2],, ASC, Dense),
    BLANK())

Intercambia tu columna, nombres de tablas

heasham

En respuesta a picante

¡Gracias por su rápida respuesta!

Aunque cuando sigo tu medida, solo obtengo una clasificación de 1 para cada jugador.

Deja un comentario

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