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.
Actualizado con archivo de ejemplo: archivo de muestra
¡Hola, espero que alguien pueda ayudar!
Tengo los datos a continuación y el uso de la medida a continuación para mostrarme el ID de la más reciente "Solicitud" si había una "Respuesta" por número de cuenta. Nota: podría haber varios IDs por 1 número de cuenta, solo depende de si hubo una respuesta o no.
MeasureTM CALCULATE(MAX('Activity'[ID]),Filter('Activity', 'Activity'[Activity] ?"Request" && CALCULATE(MAX('Activity'[ID])<CALCULATE(MAX('Activity'[ID]),'Activity'[Activity]-"Response",ALLEXCEPT('Activity',' Activity'[Account]))))
Cuenta | Actividad | Fecha de actividad | Usuario | Id |
1 | Petición | 01/01/2021 | Tom | 1 |
1 | Petición | 01/02/2021 | Jim | 2 |
1 | Petición | 01/03/2021 | John | 3 |
1 | Respuesta | 01/04/2021 | Stephanie | 4 |
2 | Petición | 01/05/2021 | será | 5 |
2 | Respuesta | 01/06/2021 | Joe | 6 |
3 | Petición | 01/07/2021 | Anna | 7 |
3 | Petición | 01/08/2021 | Ámbar | 8 |
3 | Respuesta | 01/09/2021 | Katie | 9 |
4 | Petición | 01/10/2021 | Jack | 10 |
4 | Respuesta | 01/11/2021 | Bob | 11 |
4 | Petición | 01/12/2021 | John | 11 |
4 | Respuesta | 01/13/2021 | Tom | 12 |
5 | Petición | 01/14/2021 | Liam | 13 |
Así que las líneas resaltadas en amarillo es lo que mi meausre me está consiguiendo. Sin embargo, quiero ir un paso más allá y contar esa medida. Así que en este caso, sería 4. ¿Algún consejo?
Gracias de antemano!
Solved! Go to Solution.
Hey @PowerBI123456 ,
aquí encontrará un nuevo enfoque :-), tenga en cuenta que este enfoque hace referencia a las columnas de las tablas de dimensiones. Para ello también es necesario cambiar los objetos visuales. Significado: utilice columnas de las tablas de dimensiones en su lugar.
Esta medida tampoco es tan genérica, ya que devuelve el requestID máximo, por lo que devolverá los resultados esperados cada vez que se utilice el colum acoount.
Si utiliza la medida en un objeto visual de tarjeta, volverá a ejecutar 12 en lugar de 4. Si necesita el 4 recomiendo usar un SUMX o COUNTX en combinación con VALUES('...'[account]
MaxReq Star =
var t =
ADDCOLUMNS(
VALUES( 'DIM: Accounts'[Account] )
, "maxrequestid"
, var MaxResponseID =
CALCULATE(
MAX( 'FACT: Activity'[ID] )
, ALL('DIM: Date' )
, ALL( 'DIM: Users' )
, ALL( 'FACT: Activity'[ID] )
, 'DIM: Activity'[Activity] = "Response"
)
var MaxRequestID =
CALCULATE(
MAX( 'FACT: Activity'[ID] )
, ALL( 'DIM: Date' )
, ALL( 'DIM: Users' )
, 'DIM: Activity'[Activity] = "Request"
--, 'FACT: Activity'[ID] = MaxResponseID - 1
, 'FACT: Activity'[ID] < MaxResponseID
)
return
MaxRequestID
)
return
CALCULATE(
MAX( 'FACT: Activity'[ID] )
, TREATAS( t , 'DIM: Accounts'[Account] , 'FACT: Activity'[ID] )
)
Aquí hay una captura de pantalla que muestra el uso de columna del visual del mapa de árbol:
Tenga en cuenta que el desafío general al que nos enfrentamos se basa en el hecho de que el almacén de datos (nuestro querido tabular SSAS dentro de Power BI) no conoce un tipo de datos de secuencia. A veces, aquí, esto hace las cosas difíciles, las otras veces es un plus.
Sin embargo, si esto no funciona, es posible que desee leer este artículo, aquí presento un enfoque diferente para abordar el desafío de valor anterior: El valor anterior - Mincing Data - Obtener información de datos (minceddata.info)
saludos
Tom
Estos son los pasos que puede seguir:
1. Ingrese la consulta de energía a través de los datos de transformación y seleccione agregar columna --- columna de índice --- de 1 para generar el índice
2. Cree una columna calculada.
Flag =
var _1=
CALCULATE(MAX('Table'[Index]),FILTER(ALL('Table'),[Activity]="Request"&&[Account]=EARLIER('Table'[Account])))
var _2=
CALCULATE(MAX('Table'[Activity]),FILTER('Table',[Account]=EARLIER('Table'[Account])&&[Index]=EARLIER('Table'[Index])+1))
return
IF(
_1=[Index]&&_2="Response",1,0)
3. Cree la medida.
count = SUMX(ALL('Table'),[Flag])
4. Resultado:
Puede descargar el archivo PBIX desde aquí.
Saludos
Liu Yang
Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Aquí hay una manera de hacerlo que devuelve 4 de la tabla de ejemplo.
Cuentas con respuesta y solicitud de prev ( Prev Request)
COUNTROWS (
FILTRO (
RESUMIR (
FILTRO (
Actividad
Actividad[Actividad] - "Respuesta"
),
Actividad[Cuenta],
"cMax", MAX ( Actividad[Fecha de actividad] )
),
VAR vcMax á [cMax]
devolución
NO (
ISBLANK (
CALCULAR (
COUNTROWS ( Actividad ),
Actividad [Fecha de actividad] < vcMax,
Actividad[Actividad] - "Solicitud"
)
)
)
)
)
palmadita
@TomMartens He subido el PBI en el siguiente enlace. La tabla de la izquierda es el aspecto de los datos y la tabla de la derecha es lo que la medida me muestra. Quiero hacer un recuento de eso por lo que sería 4 en este ejemplo.
Hola @PowerBI123456 ,
la forma más sencilla de contar si una medida devuelve un valor, independientemente del resultado, es utilizar la función de iterador de tabla COUNTX ().
La siguiente medida recorre en iteración las cuentas y cuenta las "Cuentas" que devuelven un valor. Como VALUES() vuelve a una tabla (muchas filas, pero sólo una columna) con valores distintos, no está sucediendo ningún "doble conteo".
Measure =
COUNTX(
VALUES(
'Activity'[Account]
)
, [Max Request ID]
)
Una pequeña captura de pantalla basada en el pbix que proporcionó:
Con suerte, esto es lo que estás buscando,
saludos
Tom
@TomMartens ¡Muchas gracias!
Así que otra cosa que estoy tratando de hacer es un mapa de árbol que muestra el recuento por el usuario que hizo la última solicitud, pero este recuento es incluyendo todos los usuarios que hicieron una solicitud en la cuenta. ¿Sabes cómo mostrar solo a los 4 usuarios? Archivo actualizado: Archivo de ejemplo
¡Muchas gracias por su ayuda!
Hey @PowerBI123456 , explicar lo que se debe contar en función de los datos de muestra en el pbix y el resultado esperado.
saludos
Tom
@TomMartens Hola - Estoy tratando de mostrar a los usuarios que ponen en la última solicitud. Basándose en los datos, sería:
Quiero usar un mapa de árbol para mostrar que cada una de esas 4 personas tenía 1 solicitud. El problema es que mi mapa de árbol actual es contar todos los que hicieron una solicitud para cada cuenta, por lo que muestra más de lo que quiero. Espero que tenga sentido.
Hey @PowerBI123456 ,
esta medida
MaxReq =
var t =
ADDCOLUMNS(
FILTER(
'Activity'
, CALCULATE(
CONTAINSROW(
VALUES( 'Activity'[Activity] )
, "Response"
)
, ALLEXCEPT( 'Activity' , Activity[Account] )
)
)
, "MaxRequestID"
, var account = [Account]
var maxID =
CALCULATE(
MAX( Activity[ID] )
, ALL( 'Activity' )
, 'Activity'[Account] = account
, 'Activity'[Activity] = "Request"
)
return
maxID
)
return
SUMX(
t
, IF(
'Activity'[ID] = [MaxRequestID] && 'Activity'[Activity] = "Request"
, 1 --[MaxRequestID]
, BLANK()
)
)
permite crear esta página de informe
Desde el punto de vista de visualización de datos, favoreo mucho más la barra apilada que el mapa árbol.
Si "justo" desea mostrar al usuario que está a cargo de la última solicitud, usaría una simple tabla Cuenta | | usuario la medida [MaxReQ]
No estoy seguro de si realmente entiendo las cosas de la fecha de su medida, tal vez usted tiene que comprobar mi medida con un conjunto de datos más grande.
Con suerte, esto es lo que estás buscando.
saludos
Tom
¡¡¡Muchas gracias!!! Esto funciona, pero lo único que está obteniendo el ID máximo de la solicitud general por cuenta, pero necesito el ID máximo de la solicitud justo antes de la respuesta. Actualicé el archivo de ejemplo para mostrar lo que quiero decir y disculpas por no agregarlo antes. Podría haber otra solicitud después de una respuesta que esta medida captaría. Necesito la solicitud justo antes de la respuesta. Agregué otra solicitud para la cuenta 4 después de la respuesta de Jack. Esta medida está captando esa petición cuando debería ser John. Espero que tenga sentido.
Archivo actualizado: Archivo de ejemplo
Hey @PowerBI123456 , para reformular este requisito un poco diffrently ...
Usted está buscando el MAX Request-ID que es más pequeño que el IDENTIFICADOR de respuesta más grande para la misma cuenta, correcto?
saludos
Tom
Hey @PowerBI123456 ,
no hay problema, a veces se necesita algún tiempo para encontrar una comprensión mutua. Uso "reformulación" no porque mi explicación sea mejor, es ayuda a reducir el requisito.
Sin embargo, aquí tienes:
MaxReq =
var t =
ADDCOLUMNS(
ADDCOLUMNS(
FILTER(
'Activity'
, CALCULATE(
CONTAINSROW(
VALUES( 'Activity'[Activity] )
, "Response"
)
, ALLEXCEPT( 'Activity' , Activity[Account] )
)
)
, "MaxResponseID"
, var account = [Account]
var maxID =
CALCULATE(
MAX( Activity[ID] )
, ALL( 'Activity' )
, 'Activity'[Account] = account
, 'Activity'[Activity] = "Response"
)
return
maxID
)
, "MaxRequestID"
, var account = [Account]
var maxResponseID = [MaxResponseID]
var maxID =
CALCULATE(
MAX( Activity[ID] )
, ALL( 'Activity' )
, 'Activity'[Account] = account
, 'Activity'[Activity] = "Request"
, 'Activity'[ID] < maxResponseID
)
return
maxID
)
return
SUMX(
t
, IF(
'Activity'[ID] = [MaxRequestID] && 'Activity'[Activity] = "Request"
, 1 --[MaxRequestID]
, BLANK()
)
)
Agregué un MaxResponseID en la tabla virtual, que luego se usará para encontrar el MaxRequestID que es más pequeño que el MaxResponseID.
Con suerte, esto es lo que estás buscando.
saludos
Tom
@TomMartens Desafortunadamente se cronometró diciendo que no tengo suficiente memoria. Probablemente sea porque estoy lidiando con 20 millones de filas.
Hey @PowerBI123456 ,
Siento oír eso.
La medida "final", no parece tan diferente pero hay una sutileza, está en determinig el MaxRequestID, ya que ahora tiene que encontrar los identificadores adecuados primero (menos que el MaxResponseID) antes de que se pueda determinar el MaxRequestID.
Esto conduce a la materialización de "consultas" ya que un simple escaneo booleano ya no es suficiente.
Además de que sólo tiene una solución de mesa "temida", esto es responsable de esta parte de la medida
...
FILTER(
'Activity'
, CALCULATE(
CONTAINSROW(
VALUES( 'Activity'[Activity] )
, "Response"
)
, ALLEXCEPT( 'Activity' , Activity[Account] )
)
)
...
lo anterior determina mejor las Cuentas que no tienen responsabilidades. Este y algunos otros componentes se pueden simplificar mediante un esquema de estrella adecuado.
Recomiendo leer este artículo (Diseñar un modelo de datos en Power BI - Aprender | Microsoft Docs).
Por supuesto, la medida se puede optimizar, pero esto puede llegar a ser muy lento y una comprensión exhaustiva de sus datos y su modelo de datos es necesario.
Sin tener acceso al pbix, es decir, sus datos, esto será imposible. Tenga en cuenta que personalmente no voy a trabajar con archivos pbix que se comparten conmigo a través de enlaces privados, o mensajes privados.
Me temo que esto excederá el tiempo que la mayoría de nosotros somos capaces /dispuestos a pasar, al menos el mío.
saludos
Tom
@TomMartens ¡Gracias, y lo entiendo totalmente! Gracias por enviar también ese artículo. Voy a intentar esto una vez más ya que creo que mi modelo está en un esquema estelar. Desafortunadamente, no puedo subir el modelo real desde su confidencial. Pero he actualizado el archivo de ejemplo para incluir las tablas de dimensiones que tengo en mi modelo. Esto es obviamente mucho más simple ya que mis tablas de dimensiones tienen más columnas y mi tabla de hechos tiene millones de filas, pero todavía debería funcionar. Esperemos que estas tablas de dimensiones puedan ayudar a mejorar la medida que creó si no le importa mirar una vez más. ¡Realmente aprecio toda tu ayuda en esto!
Hey @PowerBI123456 ,
esto parece un esquema estelar perfecto 🙂
Tal vez quieras subir otro pbix y corregir el error tipográfico en la tabla de actividades
Reponse --> Response
Nunca es una buena idea simplificar su solicitud proporcionando datos de ejemplo que no reflejan su modelo de datos.
Pasé algunas horas para llegar a la medida "final", en vano.
Tonto yo, que no pregunté si este es realmente su modelo de datos, pero me intrigaron las complejidades de su pregunta y me dejarse llevar 🙂
Sin embargo, cada vez que nos encontremos en la vida real me debes una cerveza 😉
saludos
Tom
@TomMartens Gracias, y archivo actualizado. ¿Eso significa que intentarás ayudarme una vez más 🙂
Disculpas y lección aprendida, me aseguraré de subir todo mi modelo. Definitivamente le debe más de 1 cerveza!
Sí, lo haré, pero, desafortunadamente, lo veré el próximo fin de semana, ya que mi mente se distraía por algunos desafíos relacionados con el trabajo.
saludos
Tom
Hey @PowerBI123456 ,
una pregunta a la naturaleza de la identificación en su tabla de hechos.
¿Es este ID un índice que crea una secuencia que crece en 1 sin huecos en la tabla de hechos
Si es así, ¿es esto cierto: dentro de un grupo de eventos (definido por una cuenta) el índice de una respuesta menos 1 siempre apunta a un evento de solicitud de tipo?
¿O puede ser posible que el predecesor inmediato de una respuesta sea otra respuesta.?
saludos
Tom
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 | |
2 | |
2 | |
2 | |
1 |