Don't miss your chance to take the Fabric Data Engineer (DP-700) exam on us!
Learn moreWe've captured the moments from FabCon & SQLCon that everyone is talking about, and we are bringing them to the community, live and on-demand. Starts on April 14th. Register now
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?
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
)
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 |
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
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
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
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
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
@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
res
Si el DAX cumple con sus expectativas, marque esta publicación como una solución
Gracias
Yo
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
If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.
A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.
Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.