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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

Manipulación de texto mediante DAX

Hola

Estos son mis datos de muestra:

Trabajo Descripción Artículo Semana
1200662 aa 1 1
1200662 Bb 1 1
1200662 aa 2 1
1200662 Bb 2 1
1200662 aa 3 2
1200662 Bb 3 2
1200662 aa 4 2
1200662 Bb 4 2
1200662 aa 5 3
1200662 Bb 5 3
1200662 aa 6 3
1200662 Bb 6 3
1200662 aa 7 3
1200662 Bb 7 3

Tengo 3 filtros:

JOB (selección única), ITEM (selección múltiple), WEEK (selección múltiple)

estos son los resultados esperados:

Primer escenario

Filtrado por trabajo (selección única)

Salida

Trabajo Descripción Semana
1200662/1-2 aa 1
1200662/1-2 Bb 1
1200662/2-3 aa 2
1200662/2-3 Bb 2
1200662/5-7 aa 3
1200662/5-7 Bb 3

Segundo escenario

Filtrado por semana (selección múltiple)

Salida: (seleccionada: 2 y 3)

Trabajo Descripción Semana
1200662/2-3 aa 2
1200662/2-3 Bb 2
1200662/5-7 aa 3
1200662/5-7 Bb 3

Tercer escenario

Filtrado por elemento (selección múltiple)

Salida: (seleccionada: 1, 2, 3, 5 y 7 )

Trabajo Descripción Semana
1200662/1-2 aa 1
1200662/1-2 Bb 1
1200662/3 aa 2
1200662/3 Bb 2
1200662/5, 7 aa 3
1200662/5, 7 Bb 3

Me las arreglé para obtener el primer escenario y el segundo escenario.

Pero estoy atascado en el tercer escenario.

Debería usar la medida también, ¿verdad?

¿Qué me estoy perdiendo?

Cualquier ayuda es apreciada.

Gracias

2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

@mussaenda

Con su modelo actual. Debe ser capaz de tratar con cualquier combinación de bloques contiguos y no contiguos de elementos:

MeasureV2 =
VAR itemsT_ = CALCULATETABLE ( DISTINCT ( Table1[item] ), ALL ( Table1[description] ) )
VAR rankedT_ = ADDCOLUMNS ( itemsT_, "@index", RANKX ( itemsT_, [item],, ASC ) )
VAR aux_ = CONCATENATEX ( rankedT_, [item], "|", [@index], ASC )
VAR minIndex_ = 1
VAR maxIndex_ = COUNTROWS ( rankedT_ )
VAR res_ =
    CONCATENATEX (
        rankedT_,
        VAR last_ = PATHITEM ( aux_, [@index] - 1, INTEGER )
        VAR isBlockStart_ = last_ < ( [item] - 1 ) || [@index] = minIndex_
        VAR next_ = PATHITEM ( aux_, [@index] + 1, INTEGER )
        VAR isBlockEnd_ = ( next_ > ( [item] + 1 ) ) || [@index] = maxIndex_
        RETURN
            IF (
                isBlockStart_ && NOT isBlockEnd_,
                [item] & "-",
                IF ( isBlockEnd_, [item] & "," )
            ),
        ,
        [@index], ASC
    )
RETURN
    SELECTEDVALUE ( Table1[job] ) & "/"
        & IF ( RIGHT ( res_, 1 ) = ",", LEFT ( res_, LEN ( res_ ) - 1 ), res_ )

Estoy seguro de que se puede codificar más elegantemente, pero todavía no he tenido tiempo de pulirlo

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

View solution in original post

Syndicate_Admin
Administrator
Administrator

@mussaenda

La medida:

1. Obtiene la lista de elementos

2. Los clasifica para ordenarlos en orden ascendente

3. Construye una cadena en la que podemos usar PATHITEM, ya que simplifica el acceso a la tabla clasificada

4. Para cada fila de la tabla clasificada (tabla ordenada), comprueba la fila anterior y la siguiente para ver si es el principio y/o el final de un bloque.

5. Construye la cadena final, eliminando el ", " no deseado al final (esto se puede hacer antes también)

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

View solution in original post

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

@mussaenda

La medida:

1. Obtiene la lista de elementos

2. Los clasifica para ordenarlos en orden ascendente

3. Construye una cadena en la que podemos usar PATHITEM, ya que simplifica el acceso a la tabla clasificada

4. Para cada fila de la tabla clasificada (tabla ordenada), comprueba la fila anterior y la siguiente para ver si es el principio y/o el final de un bloque.

5. Construye la cadena final, eliminando el ", " no deseado al final (esto se puede hacer antes también)

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Syndicate_Admin
Administrator
Administrator

@mussaenda

Con su modelo actual. Debe ser capaz de tratar con cualquier combinación de bloques contiguos y no contiguos de elementos:

MeasureV2 =
VAR itemsT_ = CALCULATETABLE ( DISTINCT ( Table1[item] ), ALL ( Table1[description] ) )
VAR rankedT_ = ADDCOLUMNS ( itemsT_, "@index", RANKX ( itemsT_, [item],, ASC ) )
VAR aux_ = CONCATENATEX ( rankedT_, [item], "|", [@index], ASC )
VAR minIndex_ = 1
VAR maxIndex_ = COUNTROWS ( rankedT_ )
VAR res_ =
    CONCATENATEX (
        rankedT_,
        VAR last_ = PATHITEM ( aux_, [@index] - 1, INTEGER )
        VAR isBlockStart_ = last_ < ( [item] - 1 ) || [@index] = minIndex_
        VAR next_ = PATHITEM ( aux_, [@index] + 1, INTEGER )
        VAR isBlockEnd_ = ( next_ > ( [item] + 1 ) ) || [@index] = maxIndex_
        RETURN
            IF (
                isBlockStart_ && NOT isBlockEnd_,
                [item] & "-",
                IF ( isBlockEnd_, [item] & "," )
            ),
        ,
        [@index], ASC
    )
RETURN
    SELECTEDVALUE ( Table1[job] ) & "/"
        & IF ( RIGHT ( res_, 1 ) = ",", LEFT ( res_, LEN ( res_ ) - 1 ), res_ )

Estoy seguro de que se puede codificar más elegantemente, pero todavía no he tenido tiempo de pulirlo

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

@AlB

¡Eres excelente!

Quiero entender la lógica que hiciste.

Wow. Sólo guau.

¿Cómo puedo agradecerte lo suficiente?

¡Gracias de nuevo!


@mussaenda escribió:

¿Cómo puedo agradecerte lo suficiente?


@mussaenda

Tal vez kudoing / marcando la respuesta como solución 😉?

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Syndicate_Admin
Administrator
Administrator

@mussaenda

A ver si esto funciona para la tercera medida. En primer lugar, el modelo:

model.PNG

A continuación, la medida:

Job/ Item = 
VAR SelJob = SELECTEDVALUE('Dim Job'[job]) & "/ "
VAR _Item = CONCATENATEX(VALUES('DataTable'[item]), 'DataTable'[item], "-")
RETURN
SelJob & _Item

y la tabla resultante:

result.PNG

No @PaulDBrown ,

¡Muchas gracias por la solución!

Sólo una pregunta,

¿Hay alguna manera de que para la semana 3, es 1200662/5, 7 en lugar de 5-7?

Porque el elemento 6 no está seleccionado.

Gracias

Syndicate_Admin
Administrator
Administrator

No @mussaenda

Por favor, explique la lógica detrás del resultado esperado en lugar de dejarlo a la conjetura del lector. De lo contrario, todos estamos perdiendo un tiempo precioso.

Prueba esto. Probablemente tendrás que ajustarlo un poco, pero debería acercarte:

Measure =
VAR items_ =
    CALCULATETABLE (
        DISTINCT ( 'Sheet1 (Job/Item)'[item] ),
        ALL ( 'Sheet1 (Job/Item)'[description] )
    )
RETURN
    SELECTEDVALUE ( 'Sheet1 (Job/Item)'[job] ) & "/"
        & CONCATENATEX ( items_, [item], "-", [item], ASC )

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

No @AlB ,

Lo siento, pensé que lo había explicado en la salida esperada.

Untitled1.png

Suponiendo que los valores seleccionados del filtro de elementos son 1, 2, 3, 5 y 7.

1. La semana 1 tiene sólo 2 elementos y ambos fueron seleccionados, es por eso que la salida es el trabajo 1200662/1-2.

2. La semana 2 tiene 2 elementos también, pero solo se selecciona uno (artículo 3), es por eso que la salida es el trabajo 1200662/3.

3. La semana 3 tiene 3 elementos, pero NO todos fueron seleccionados, es por eso que la salida es el trabajo 1200662/5, 7.

Sólo se están duplicando debido a la descripción. que está totalmente bien.

Si acepta 1,2 para el primer escenario en lugar de 1-2, todos los escenarios se pueden cubrir con una sola instrucción concatenatex.

Yo quería.

Pero el problema aquí es,

a veces durante una semana, son 25 artículos.

No es aceptable mostrar 1, 2, 3, 4, 5, ... 25

Por eso requerían 1-25.

¿Hay otra forma de hacerlo?

Syndicate_Admin
Administrator
Administrator

mostrar su trabajo. ¿Está utilizando CONCATENATEX?

Selected JOB / ITEM = 

VAR SELECTEDJOB = 
SELECTEDVALUE('Sheet1 (Job/Item)'[Job]) 

VAR SELECTEDITEM =
    CALCULATE ( 
        CONCATENATEX (
            VALUES ('Sheet1 (Job/Item)'[Item]) ,
            'Sheet1 (Job/Item)'[Item],
            ", ", 
            ISFILTERED('Sheet1 (Job/Item)'[Item]), ASC
        )
    )
RETURN 

IF(
	ISFILTERED('Sheet1 (Job/Item)'[Item]),
	SELECTEDJOB & "/" & SELECTEDITEM,
IF(
	FIRSTNONBLANK('Sheet1 (Job/Item)'[MIN Item],0) = FIRSTNONBLANK('Sheet1 (Job/Item)'[MAX Item],0),
	SELECTEDJOB & "/" &FIRSTNONBLANK('Sheet1 (Job/Item)'[MIN Item],0),

IF(
	FIRSTNONBLANK('Sheet1 (Job/Item)'[MIN Item],0) <> FIRSTNONBLANK('Sheet1 (Job/Item)'[MAX Item],0),
SELECTEDJOB & "/" & FIRSTNONBLANK('Sheet1 (Job/Item)'[MIN Item],0) & "-" & FIRSTNONBLANK('Sheet1 (Job/Item)'[MAX Item],0))))

Hay @lbendlin

Arriba es cómo manejé los 2 escenarios.

Pero cuando empiezo a filtrar el elemento, se muestran así.

Untitled.png

Sí, estoy usando también CONCATENATEX con ISFILTERED.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

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