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.
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
Solved! Go to Solution.
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
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
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
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
¡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?
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
A ver si esto funciona para la tercera medida. En primer lugar, el modelo:
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:
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
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
No @AlB ,
Lo siento, pensé que lo había explicado en la salida esperada.
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?
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í.
Sí, estoy usando también CONCATENATEX con ISFILTERED.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |