Forum Discussion
Concatenex con Rango
Hola
Tengo una tabla de etapas con los campos: Proyecto, Etapa y Fecha.
| Proyecto | Etapa | Fecha |
| Proyecto 1 | S1 | 25-dic-24 |
| Proyecto 1 | S2 | 27-dic-24 |
| Proyecto 1 | S3 | 27-dic-24 |
| Proyecto 1 | S4 | 28-dic-24 |
| Proyecto 1 | S5 | 29-dic-24 |
| Proyecto 1 | S6 | 06-ene-25 |
| Proyecto 1 | S7 | 09-ene-26 |
| Proyecto 2 | S1 | 10-ene-26 |
| Proyecto 2 | S2 | 16-ene-26 |
| Proyecto 2 | S3 | 17-ene-26 |
| Proyecto 2 | S4 | 18-ene-27 |
| Proyecto 2 | S5 | 21-ene-27 |
| Proyecto 3 | S1 | 27-ene-25 |
| Proyecto 3 | S2 | 25-ene-25 |
| Proyecto 3 | S3 | 31-ene-26 |
| Proyecto 3 | S4 | 04-feb-26 |
| Proyecto 3 | S5 | 05-feb-27 |
| Proyecto 3 | S6 | 29-mar-27 |
| Proyecto 3 | S7 | 13-feb-27 |
Me gustaría obtener la tabla donde , Etapa cae en qué año para que escriba la medida como en función del orden de la fecha:
| Proyecto | 2024 | 2025 | 2026 | 2027 |
| Proyecto 1 | S1, S2, S3, S4, S5 | S6 | S7 | |
| Proyecto 2 | S1, S2, S3 | S4,S5 | ||
| Proyecto 3 | S2,S1 | S3,S4 | S5, S7, S5 |
| Proyecto | 2024 | 2025 | 2026 | 2027 |
| Proyecto 1 | 1 S1,2 S2,3 S3,4 S4,5 S5 | 1 S6 | 1 S7 | |
| Proyecto 2 | 1 S1,2 S2,3 S3 | 1 S4,2 S5 | ||
| Proyecto 3 | 1 S2, 2 S1 | 1 S3,2 S4 | 1 S5,2 S7,2 S5 |
¿Cómo puedo combinar Rank dentro de Concatenax o tienes alguna idea de DAX?
9 Replies
- Syndicate_AdminAdministrator
Hola @Jyaul1122 , he logrado su salida esperada como se muestra a continuación, he adjuntado el archivo PBIX junto con esta publicación
¿He respondido a tu pregunta? En caso afirmativo, marque esta publicación como una solución.
Gracias
Yo
- Syndicate_AdminAdministrator
Hola @Jyaul1122 , he logrado su salida esperada como se muestra a continuación, he adjuntado el archivo PBIX junto con esta publicación
¿He respondido a tu pregunta? En caso afirmativo, marque esta publicación como una solución.
Gracias
Yo
- Syndicate_AdminAdministrator
Gracias por su respuesta, estamos muy cerca de la solución.
¿Podría ordenar por rango, por ejemplo, en el Proyecto 3, el rango 1 aparecerá primero con la etapa, luego el segundo rango con la etapa y así sucesivamente
- Syndicate_AdminAdministrator
@Jyaul1122 , se puede hacer simplemente introduciendo un campo orderby (Table[Rank]) a la función CONCATENATEX. Reemplace la expresión de medida actual por el dax siguiente.
Concat = var res = CONCATENATEX('Table', 'Table'[Rank] & " " & 'Table'[Stage],",",'Table'[Rank]) RETURN resSi el DAX cumple con sus expectativas, marque esta publicación como una solución
Gracias
Yo
- Syndicate_AdminAdministrator
Hola @Jyaul1122 ,
Puede generar el resultado necesario escribiendo una medida como la siguiente después de crear una tabla de calendario (DateTable) y creando una relación entre la tabla de hechos y la tabla de dimensiones del calendario.
Stage Measure = VAR CurrentYear = SELECTEDVALUE('DateTable'[Year]) -- Gets the selected year from the DateTable VAR Projects = DISTINCT('Stage table'[Project]) -- Get distinct projects for iteration RETURN CONCATENATEX( ADDCOLUMNS( FILTER( 'Stage table', YEAR('Stage table'[Date]) = CurrentYear ), "Rank_Stage", FORMAT( RANKX( FILTER( 'Stage table', 'Stage table'[Project] = EARLIER('Stage table'[Project]) && YEAR('Stage table'[Date]) = CurrentYear ), 'Stage table'[Date], , ASC ), "0" ) & " " & 'Stage table'[Stage] ), [Rank_Stage], ", ", 'Stage table'[Project], ASC )La salida resultante será la que se muestra a continuación, que está en línea con la salida requerida.
He adjuntado un archivo pbix de ejemplo para su referencia.
Saludos
- Syndicate_AdminAdministrator
Agregue una columna calculada en la tabla de etapas para extraer el año de la fecha:
Year = YEAR('Stage table'[Date])Crear una medida de clasificación
RankStage =
RANKX(
FILTER(
'Stage table',
'Stage table'[Project] = MAX('Stage table'[Project]) &&
YEAR('Stage table'[Date]) = YEAR(MAX('Stage table'[Date]))
),
'Stage table'[Date],
, ASC,
DENSE
)Cree la medida combinada:
CombinedStageRank =
CONCATENATEX(
FILTER(
'Stage table',
'Stage table'[Project] = MAX('Stage table'[Project]) &&
YEAR('Stage table'[Date]) = MAX('Stage table'[Year])
),
RANKX(
FILTER(
'Stage table',
'Stage table'[Project] = MAX('Stage table'[Project]) &&
YEAR('Stage table'[Date]) = YEAR(MAX('Stage table'[Date]))
),
'Stage table'[Date],
, ASC,
DENSE
) & " " & 'Stage table'[Stage],
", ",
'Stage table'[Date],
ASC
)Cree un objeto visual de matriz:
Utilice el campo Proyecto para las filas.
Utilice el campo Año para las columnas.
Use la medida CombinedStageRank para los valores.💌 Si esto ayudó, ¡una marca de Kudos 👍 o Solution sería genial! 🎉
Bien
Kedar
Conéctate en LinkedIn - Syndicate_AdminAdministrator
Gracias por su tiempo.
Las respuestas están cerca de la solución, ¿qué pasa si las dos o más etapas tienen las mismas fechas? Por ejemplo, el Proyecto 4: Etapa 3 y Etapa 5 tienen la misma fecha. Según su lógica, estoy obteniendo el rango 1 para ambos, pero me gustaría obtener:
Proyecto 4 1 S1, 2 S2 1 S3, 2 S5 Datos:
Proyecto Etapa Fecha Proyecto 1 S1 25-dic-24 Proyecto 1 S2 27-dic-24 Proyecto 1 S3 27-dic-24 Proyecto 1 S4 28-dic-24 Proyecto 1 S5 29-dic-24 Proyecto 1 S6 06-ene-25 Proyecto 1 S7 09-ene-26 Proyecto 2 S1 10-ene-26 Proyecto 2 S2 16-ene-26 Proyecto 2 S3 17-ene-26 Proyecto 2 S4 18-ene-27 Proyecto 2 S5 21-ene-27 Proyecto 3 S1 27-ene-25 Proyecto 3 S2 25-ene-25 Proyecto 3 S3 31-ene-26 Proyecto 3 S4 04-feb-26 Proyecto 3 S5 05-feb-27 Proyecto 3 S6 29-mar-27 Proyecto 3 S7 13-feb-27 Proyecto 4 S1 14-mayo-26 Proyecto 4 S2 15-mayo-26 Proyecto 4 S3 16-mayo-27 Proyecto 4 S5 16-mayo-27 - Syndicate_AdminAdministrator
Hola @Jyaul1122 ,
Para abordar el caso en el que varias etapas de un proyecto tienen la misma fecha y garantizar clasificaciones únicas (por ejemplo, asignar un pedido secundario dentro de la misma fecha), necesitamos mejorar la lógica de clasificación. Esto se puede lograr considerando la columna Etapa como un criterio de ordenación secundario en la función RANKX.
Esta es la medida revisada:
Stage Measure = VAR CurrentYear = SELECTEDVALUE('DateTable'[Year]) -- Selected year context RETURN CONCATENATEX( ADDCOLUMNS( FILTER( 'Stage table', YEAR('Stage table'[Date]) = CurrentYear ), "Rank_Stage", FORMAT( RANKX( FILTER( 'Stage table', 'Stage table'[Project] = EARLIER('Stage table'[Project]) && YEAR('Stage table'[Date]) = CurrentYear ), 'Stage table'[Date] & 'Stage table'[Stage], , ASC ), "0" ) & " " & 'Stage table'[Stage] ), [Rank_Stage], ", ", 'Stage table'[Project], ASC )El resultado es el que se muestra a continuación:
La salida respeta los criterios de ordenación de fecha y etapa.
He adjuntado un archivo pbix de ejemplo para su referencia.
Saludos
- Syndicate_AdminAdministrator
Lo resolví editando las medidas anteriores.
Primero creé una columna Ordenación en Power query desde fecha, columna y etapa
Date.Year([Fecha])*100000000
+Date.Month([Fecha])*1000000
+Date.Day([Fecha])*10000
+Texto.Fin([Etapa],1)y editar la medida:
Stage Measure = VAR CurrentYear = SELECTEDVALUE('DateTable'[Year]) -- Gets the selected year from the DateTable VAR Projects = DISTINCT('Stage table'[Project]) -- Get distinct projects for iteration RETURN CONCATENATEX( ADDCOLUMNS( FILTER( 'Stage table', YEAR('Stage table'[Date]) = CurrentYear ), "Rank_Stage", FORMAT( RANKX( FILTER( 'Stage table', 'Stage table'[Project] = EARLIER('Stage table'[Project]) && YEAR('Stage table'[Date]) = CurrentYear ), 'Stage table'[Sorting], , ASC ), "0" ) & " " & 'Stage table'[Stage] ), [Rank_Stage], ", ", 'Stage table'[Date], ASC )