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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Criterio de ordenación

Estoy teniendo un problema de clasificación complicado.

Aquí hay algunas muestras de tablas que tengo:

Ordenación de selección de inteligencia de tiempo:

| de selección ordenar

------------------

Semana | 0

Mes | 1

Cuarto de | 2

Año | 3

Selección de inteligencia de tiempo:

| de selección valor

---------------------

Semana | 01/04/2020

Semana | 01/11/2020

.....

Semana | 05/16/2020

Mes | 2020 Enero

Mes | 2020 febrero

....

Mes | 2020 mayo

Cuarto de | 1T 2020

....

Cuarto de | 2T 2020

Año | 2020

Mes | Abr 2020

(Mi tabla real se remonta a 2016).

Las dos tablas anteriores están relacionadas por las columnas 'Selección'.

Mi tabla de fechas tiene columnas correspondientes a las columnas "Selección", por lo que "Semana", "Mes", "Trimestre" y "Año" con los valores equivalentes a los de la columna "Valor" de la tabla anterior. Tengo esa misma columna "Valor" conectada a las columnas "Semana", "Mes", "Trimestre" y "Año" en mi tabla de fechas con solo una de ellas activa, obviamente. Debo mencionar que estas columnas en mi tabla de fechas son de tipo texto y también lo es la columna 'Valor' en la tabla 'Selección de inteligencia de tiempo' anterior.

Mis tablas de datos reales tienen una columna 'Week Ending Date' que está relacionada con una columna 'Week Ending' en mi tabla de fechas que es de un tipo de fecha real.

Mi intención lograda es tener una segmentación con los valores de "Semana", "Mes", "Trimestre" y "Año" en ella. Cuando el usuario selecciona uno de esos valores, todos mis objetos visuales cambian dinámicamente para agregarse por el período de fecha correspondiente. Sé que puedo profundizar en mis objetos visuales mediante una jerarquía de fechas. Sin embargo, mi cliente no quiere eso. Querían una rebanadora de selección de período. Así que, por favor, no responda con: "Solo use una jerarquía de fechas en profundidad en sus imágenes".

Lo tengo funcionando correctamente. Por lo tanto, cuando el usuario elige "Mes" en la segmentación de selección de período, la tabla de selección de inteligencia de tiempo se filtra por ['Selección'] = "Mes" y solo los valores del mes (2020 enero, 2020 febrero, 2020 marzo, 2020 abril, etc.) aparecen en mis imágenes como los encabezados de eje o columna (para las imágenes particulares que estoy usando). Los datos se agregan correctamente por mes, en este caso y también por el período apropiado en los otros casos. Mi problema es que las fechas no están ordenadas.

Las fechas que se muestran en mis imágenes son las de la columna 'Selección de inteligencia de tiempo' [Valor]. Esta es una columna de texto con varios formatos como se muestra arriba. Agregué una columna de ordenación a esta tabla, pero cuando intento seleccionarla como la columna 'Ordenar por' para la columna 'Valor', recibo un error que dice "No se puede ordenar por una columna que ya está ordenada, directa o indirectamente" y mis valores de fecha obviamente se muestran en el orden incorrecto.

¿Cómo puedo ordenarlos correctamente?

Gracias de antemano.

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

Puesto que nadie presentó una solución mejor, he encontrado una.

Para reiterar el problema, quiero ordenar una columna que tiene varias agrupaciones, por lo que quiero un criterio de ordenación para cada agrupación. La única manera que he encontrado para que esto funcione correctamente es incrustar espacios de ancho cero en mis datos. Los espacios vienen alfabéticamente antes de la letra 'a'. Dos espacios vienen alfabéticamente antes de un espacio, y así sucesivamente y así sucesivamente. Entonces, para cada agrupación, calculé cuántos valores había en el grupo y puse esa cantidad de espacios delante del elemento que quiero primero, un espacio menos delante del siguiente elemento, etc. Y lo hice para cada agrupación. Power BI ordena automáticamente los valores alfabéticamente, por lo que esto solucionó mi problema.

Para agregar los espacios de ancho cero delante de mis elementos, utilicé la función UNICHAR. El código Unichar 8203 es un espacio de ancho cero. Para obtener el número de espacios que necesitaba delante de mis valores, utilicé la función REPT.

REPT(UNICHAR(8203), NUM_OF_SPACES) & [MiValorColumn]

Concatenado esto delante de mis valores para cada grupo de valores.

Ahora tengo una segmentación de datos que cambia dinámicamente el eje x durante un año, trimestre, mes y semana y medidas que actúan fuera de esta segmentación para calcular cada valor de inteligencia de tiempo necesario.

Esto tomó un montón de búsqueda para averiguarlo.

View solution in original post

Syndicate_Admin
Administrator
Administrator

Puesto que nadie presentó una solución mejor, he encontrado una.

Para reiterar el problema, quiero ordenar una columna que tiene varias agrupaciones, por lo que quiero un criterio de ordenación para cada agrupación. La única manera que he encontrado para que esto funcione correctamente es incrustar espacios de ancho cero en mis datos. Los espacios vienen alfabéticamente antes de la letra 'a'. Dos espacios vienen alfabéticamente antes de un espacio, y así sucesivamente y así sucesivamente. Entonces, para cada agrupación, calculé cuántos valores había en el grupo y puse esa cantidad de espacios delante del elemento que quiero primero, un espacio menos delante del siguiente elemento, etc. Y lo hice para cada agrupación. Power BI ordena automáticamente los valores alfabéticamente, por lo que esto solucionó mi problema.

Para agregar los espacios de ancho cero delante de mis elementos, utilicé la función UNICHAR. El código Unichar 8203 es un espacio de ancho cero. Para obtener el número de espacios que necesitaba delante de mis valores, utilicé la función REPT.

REPT(UNICHAR(8203), NUM_OF_SPACES) & [MiValorColumn]

Concatenado esto delante de mis valores para cada grupo de valores.

Ahora tengo una segmentación de datos que cambia dinámicamente el eje x durante un año, trimestre, mes y semana y medidas que actúan fuera de esta segmentación para calcular cada valor de inteligencia de tiempo necesario.

Esto tomó un montón de búsqueda para averiguarlo.

View solution in original post

10 REPLIES 10
Syndicate_Admin
Administrator
Administrator

Puesto que nadie presentó una solución mejor, he encontrado una.

Para reiterar el problema, quiero ordenar una columna que tiene varias agrupaciones, por lo que quiero un criterio de ordenación para cada agrupación. La única manera que he encontrado para que esto funcione correctamente es incrustar espacios de ancho cero en mis datos. Los espacios vienen alfabéticamente antes de la letra 'a'. Dos espacios vienen alfabéticamente antes de un espacio, y así sucesivamente y así sucesivamente. Entonces, para cada agrupación, calculé cuántos valores había en el grupo y puse esa cantidad de espacios delante del elemento que quiero primero, un espacio menos delante del siguiente elemento, etc. Y lo hice para cada agrupación. Power BI ordena automáticamente los valores alfabéticamente, por lo que esto solucionó mi problema.

Para agregar los espacios de ancho cero delante de mis elementos, utilicé la función UNICHAR. El código Unichar 8203 es un espacio de ancho cero. Para obtener el número de espacios que necesitaba delante de mis valores, utilicé la función REPT.

REPT(UNICHAR(8203), NUM_OF_SPACES) & [MiValorColumn]

Concatenado esto delante de mis valores para cada grupo de valores.

Ahora tengo una segmentación de datos que cambia dinámicamente el eje x durante un año, trimestre, mes y semana y medidas que actúan fuera de esta segmentación para calcular cada valor de inteligencia de tiempo necesario.

Esto tomó un montón de búsqueda para averiguarlo.

Syndicate_Admin
Administrator
Administrator

@SignorSoprano , No me queda muy claro

Si piensa cambiar de eje mediante la segmentación de datos, la opción es Marcar

https://radacad.com/bookmarks-and-buttons-making-power-bi-charts-even-more-interactive

Si desea cambiar la medida, entonces

https://community.powerbi.com/t5/Desktop/Slicer-MTD-QTD-YTD-to-filter-dates-using-the-slicer/td-p/50...

Si su problema con el criterio de ordenación tiene columna de ordenación

https://docs.microsoft.com/en-us/power-bi/desktop-sort-by-column

Syndicate_Admin
Administrator
Administrator

@SignorSoprano - Esto parece un tema muy matizado y creo que tendrá que ser recreado con el fin de ser resuelto. ¿De alguna manera puede acelerar ese proceso compartiendo el PBIX o algunos datos de muestra adicionales para recrear?

Syndicate_Admin
Administrator
Administrator

Puesto que nadie presentó una solución mejor, he encontrado una.

Para reiterar el problema, quiero ordenar una columna que tiene varias agrupaciones, por lo que quiero un criterio de ordenación para cada agrupación. La única manera que he encontrado para que esto funcione correctamente es incrustar espacios de ancho cero en mis datos. Los espacios vienen alfabéticamente antes de la letra 'a'. Dos espacios vienen alfabéticamente antes de un espacio, y así sucesivamente y así sucesivamente. Entonces, para cada agrupación, calculé cuántos valores había en el grupo y puse esa cantidad de espacios delante del elemento que quiero primero, un espacio menos delante del siguiente elemento, etc. Y lo hice para cada agrupación. Power BI ordena automáticamente los valores alfabéticamente, por lo que esto solucionó mi problema.

Para agregar los espacios de ancho cero delante de mis elementos, utilicé la función UNICHAR. El código Unichar 8203 es un espacio de ancho cero. Para obtener el número de espacios que necesitaba delante de mis valores, utilicé la función REPT.

REPT(UNICHAR(8203), NUM_OF_SPACES) & [MiValorColumn]

Concatenado esto delante de mis valores para cada grupo de valores.

Ahora tengo una segmentación de datos que cambia dinámicamente el eje x durante un año, trimestre, mes y semana y medidas que actúan fuera de esta segmentación para calcular cada valor de inteligencia de tiempo necesario.

Esto tomó un montón de búsqueda para averiguarlo.

Syndicate_Admin
Administrator
Administrator

@SignorSoprano , No me queda muy claro

Si piensa cambiar de eje mediante la segmentación de datos, la opción es Marcar

https://radacad.com/bookmarks-and-buttons-making-power-bi-charts-even-more-interactive

Si desea cambiar la medida, entonces

https://community.powerbi.com/t5/Desktop/Slicer-MTD-QTD-YTD-to-filter-dates-using-the-slicer/td-p/50...

Si su problema con el criterio de ordenación tiene columna de ordenación

https://docs.microsoft.com/en-us/power-bi/desktop-sort-by-column

@amitchandak No quiero usar marcadores. Quiero usar esta segmentación de datos para cambiar dinámicamente el eje x de mi objeto visual. Y tengo esa parte funcionando, correctamente. Solo quiero ordenar los valores del eje x correctamente. Esto es lo que no puedo entender. He hecho una columna de ordenación y no funciona. Las columnas relacionadas también están ordenadas, por lo que pensé que esta columna también se ordenaría automáticamente, ya que existe una relación. Pero no es así.

@amitchandak No quiero usar marcadores. Quiero usar esta segmentación de datos para cambiar dinámicamente el eje x de mi objeto visual. Y tengo esa parte funcionando, correctamente. Solo quiero ordenar los valores del eje x correctamente. Esto es lo que no puedo entender. He hecho una columna de ordenación y no funciona. Las columnas relacionadas también están ordenadas, por lo que pensé que esta columna también se ordenaría automáticamente, ya que existe una relación. Pero no es así.

Syndicate_Admin
Administrator
Administrator

@SignorSoprano - Esto parece un tema muy matizado y creo que tendrá que ser recreado con el fin de ser resuelto. ¿De alguna manera puede acelerar ese proceso compartiendo el PBIX o algunos datos de muestra adicionales para recrear?

No puedo compartir el archivo pbix porque tiene información confidencial. Pero aquí hay datos más completos:

'Ordenación de selección de tiempo'

ordenarselección
0semana
1mes
2cuarto
3año

'Selección de tiempo'

selecciónvalor

semana

01/04/2020
semana01/11/2020
semana01/18/2020
semana01/25/2020
semana02/01/2020
semana02/08/2020
semana02/15/2020
semana02/22/2020
semana02/29/2020
semana03/07/2020
semana03/14/2020
semana03/21/2020
semana03/28/2020
semana04/04/2020
semana04/11/2020
semana04/18/2020
semana04/25/2020
semana05/02/2020
semana05/09/2020
semana05/16/2020
semana05/23/2020
mes2020 Enero
mes2020 febrero
mesMarzo 2020
mesAbr 2020
mes2020 mayo
cuarto1T 2020
cuarto2T 2020
año2020

Ambas columnas son de tipo Texto

'Fechas'

fechaFin de semanasemanamescuartoaño
01/01/202001/04/202001/04/20202020 Enero1T 20202020
01/02/202001/04/202001/04/20202020 Enero1T 20202020
01/03/202001/04/202001/04/20202020 Enero2020.Q12020
01/04/202001/04/202001/04/20202020 Enero1T 20202020
01/05/202001/11/202001/11/20202020 Enero1T 20202020
..................
05/16/202005/16/202005/16/20202020 mayo2T 20202020
05/17/202005/23/202005/23/20202020 mayo2T 20202020
05/18/202005/23/202005/23/20202020 mayo2T 20202020
05/19/202005/23/202005/23/20202020 mayo2T 20202020

[Fin de semana] es de tipo Fecha. [Semana] es de tipo Texto, al igual que [Mes], [Trimestre] y [Año]

'Horas'

Número de proyectofasetareaId. de recursoFin de semanatipohoras
101234210101111234505/16/2020B23
101321440301111234505/16/2020B10
111111110101111234505/16/2020O7
.....................

'Time Selection Sort'[Selección] está en el campo de valor de una rebanadora chiclet. La columna [Ordenar] hace que se muestre en la segmentación de datos de la siguiente manera:

| Semana | Mes | Cuarto de | Año |

'Time Selection Sort'[Selection] tiene una relación con 'Time Selection'[Selection]

'Selección de tiempo'[Valor] tiene una relación con 'Fechas'[Semana], 'Fechas'[Mes], 'Fechas'[Trimestre] y 'Fechas'[Año]. Solo la relación con 'Dates'[Week] está activa. Los restantes están inactivos.

'Horas'[Fin de semana] tiene una relación con 'Fechas'[Fin de semana].

Tengo medidas que miran la selección de tiempo actual y resumen las horas de la siguiente manera:

Horas facturables de DTI =
VAR selectedValue = SELECTEDVALUE('Selección de tiempo'[Selección], "Semana")
devolución
SWITCH(
TRUE()
, selectedValue = "Semana"
, CALCULAR(
SUM('Horas'[Horas])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de tiempo'[Valor], 'Tabla de fechas'[Semana])
)
, selectedValue = "Mes"
, CALCULAR(
SUM('Horas'[Horas])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Mes])
)
, selectedValue = "Trimestre"
, CALCULAR(
SUM('Previsión de utilización de recursos'[Total de horas de ausencia])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Trimestre])
)
, selectedValue = "Año"
, CALCULAR(
SUM('Previsión de utilización de recursos'[Total de horas de ausencia])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Año])
)
)
Un objeto visual que tengo es un gráfico de barras con 'Selección de tiempo'[Valor] como eje x y 'Horas facturables DTI' para el campo de valor. Cuando el usuario hace clic en "Semana" en la segmentación de datos, la tabla "Selección de tiempo" se filtra por "Semana" y muestra correctamente todas las fechas de finalización de la semana en el eje x. Mi medida también muestra correctamente los valores en las barras. Sin embargo, las fechas de finalización de la semana no están ordenadas correctamente.

No puedo compartir el archivo pbix porque tiene información confidencial. Pero aquí hay datos más completos:

'Ordenación de selección de tiempo'

ordenarselección
0semana
1mes
2cuarto
3año

'Selección de tiempo'

selecciónvalor

semana

01/04/2020
semana01/11/2020
semana01/18/2020
semana01/25/2020
semana02/01/2020
semana02/08/2020
semana02/15/2020
semana02/22/2020
semana02/29/2020
semana03/07/2020
semana03/14/2020
semana03/21/2020
semana03/28/2020
semana04/04/2020
semana04/11/2020
semana04/18/2020
semana04/25/2020
semana05/02/2020
semana05/09/2020
semana05/16/2020
semana05/23/2020
mes2020 Enero
mes2020 febrero
mesMarzo 2020
mesAbr 2020
mes2020 mayo
cuarto1T 2020
cuarto2T 2020
año2020

Ambas columnas son de tipo Texto

'Fechas'

fechaFin de semanasemanamescuartoaño
01/01/202001/04/202001/04/20202020 Enero1T 20202020
01/02/202001/04/202001/04/20202020 Enero1T 20202020
01/03/202001/04/202001/04/20202020 Enero2020.Q12020
01/04/202001/04/202001/04/20202020 Enero1T 20202020
01/05/202001/11/202001/11/20202020 Enero1T 20202020
..................
05/16/202005/16/202005/16/20202020 mayo2T 20202020
05/17/202005/23/202005/23/20202020 mayo2T 20202020
05/18/202005/23/202005/23/20202020 mayo2T 20202020
05/19/202005/23/202005/23/20202020 mayo2T 20202020

[Fin de semana] es de tipo Fecha. [Semana] es de tipo Texto, al igual que [Mes], [Trimestre] y [Año]

'Horas'

Número de proyectofasetareaId. de recursoFin de semanatipohoras
101234210101111234505/16/2020B23
101321440301111234505/16/2020B10
111111110101111234505/16/2020O7
.....................

'Time Selection Sort'[Selección] está en el campo de valor de una rebanadora chiclet. La columna [Ordenar] hace que se muestre en la segmentación de datos de la siguiente manera:

| Semana | Mes | Cuarto de | Año |

'Time Selection Sort'[Selection] tiene una relación con 'Time Selection'[Selection]

'Selección de tiempo'[Valor] tiene una relación con 'Fechas'[Semana], 'Fechas'[Mes], 'Fechas'[Trimestre] y 'Fechas'[Año]. Solo la relación con 'Dates'[Week] está activa. Los restantes están inactivos.

'Horas'[Fin de semana] tiene una relación con 'Fechas'[Fin de semana].

Tengo medidas que miran la selección de tiempo actual y resumen las horas de la siguiente manera:

Horas facturables de DTI =
VAR selectedValue = SELECTEDVALUE('Selección de tiempo'[Selección], "Semana")
devolución
SWITCH(
TRUE()
, selectedValue = "Semana"
, CALCULAR(
SUM('Horas'[Horas])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de tiempo'[Valor], 'Tabla de fechas'[Semana])
)
, selectedValue = "Mes"
, CALCULAR(
SUM('Horas'[Horas])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Mes])
)
, selectedValue = "Trimestre"
, CALCULAR(
SUM('Previsión de utilización de recursos'[Total de horas de ausencia])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Trimestre])
)
, selectedValue = "Año"
, CALCULAR(
SUM('Previsión de utilización de recursos'[Total de horas de ausencia])
, FILTER('Horas', [Tipo] = "B")
, USERELATIONSHIP('Selección de inteligencia de tiempo'[Valor], 'Tabla de fechas'[Año])
)
)
Un objeto visual que tengo es un gráfico de barras con 'Selección de tiempo'[Valor] como eje x y 'Horas facturables DTI' para el campo de valor. Cuando el usuario hace clic en "Semana" en la segmentación de datos, la tabla "Selección de tiempo" se filtra por "Semana" y muestra correctamente todas las fechas de finalización de la semana en el eje x. Mi medida también muestra correctamente los valores en las barras. Sin embargo, las fechas de finalización de la semana no están ordenadas correctamente.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

Check out the May 2024 Power BI update to learn about new features.

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.

Top Solution Authors