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

Filtrar una columna de matriz por otra columna o por TopN

Estoy presentando datos en una matriz que se ve así:

ReadTheIron_0-1640700809889.png

Me gustaría mostrar todas las filas donde Fecha reportada es después de Remediación. Idealmente, me gustaría mostrar todas las filas donde la fecha notificada es después de la corrección y la primera fecha informada antes de la corrección. En su defecto, me gustaría mostrar las filas con las tres últimas fechas reportadas. He estado jugando con TopN, pero no he llegado a ninguna parte. ¿Alguien puede señalarme en la dirección correcta? Muchas gracias.

1 ACCEPTED SOLUTION

HI @ReadTheIron,

Puede usar la siguiente fórmula de medida para verificar las últimas 3 fechas del informe que están después de 'Fecha de corrección' y agrupadas en función del 'nombre común' actual, luego puede usarla en la matriz 'filtro de nivel visual' para filtrar registros:

Flag = 
VAR _currAssetDate =
    CALCULATE (
        MAX ( AssetTable[Remediation] ),
        ALLSELECTED ( FailureTable ),
        VALUES ( AssetTable[Common Name] )
    )
VAR currReportDate =
    MAX ( FailureTable[Date Reported] )
VAR _list =
    CALCULATETABLE (
        VALUES ( FailureTable[Date Reported] ),
        FILTER ( ALL ( FailureTable ), [Date Reported] >= _currAssetDate ),
        VALUES ( FailureTable[Common Name] )
    )
VAR ranked =
    FILTER (
        ADDCOLUMNS ( _list, "Rank", RANKX ( _list, [Date Reported],, DESC ) ),
        [Rank] <= 3
    )
RETURN
    IF ( currReportDate IN SELECTCOLUMNS ( ranked, "Date", [Date Reported] ), currReportDate )

2.png
Saludos

Xiaoxin Sheng

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

@amitchandak, @HashamNiaz , gracias por la ayuda! Desafortunadamente, me encuentro con el mismo problema cuando intento cualquiera de las soluciones: no puedo escribir una medida o una expresión DAX que haga referencia a dos tablas. Fecha de notificación proviene de una tabla (llámese FailureTable), todos los demás campos de otra (llámese AssetTable). Las dos tablas están relacionadas de muchos a uno en Nombre Común.

Entonces, si intento crear una medida, puedo llegar hasta =countrows(filter(FailureTable,FailureTable[Date Reported], pero luego no puedo ingresar AssetTable[Remediation].

Si intento agregar una columna calculada a AssetTable, no puedo escribir FailureTable.

Hay @ReadTheIron,

De hecho, las expresiones DAX se pueden calcular o invocar en varias tablas.

Power BI DAX Cómo resumir datos de varias tablas - Plainly Blog - Modelado de datos, análisis avanza...

¿Puede compartir algunos datos ficticios que mantengan la estructura de datos sin procesar y los resultados esperados para pegar aquí con el formato de tabla? Debería ayudarnos a aclarar su escenario y probar la fórmula de codificación.

Cómo obtener respuestas a su pregunta rápidamente

Saludos

Xiaoxin Sheng

Aquí hay algunos datos ficticios que deberían dar la matriz en la pregunta original:

AssetTable

Nombre comúnRemediaciónFecha del último errorFecha de error más reciente después de la corrección
BMT-J2-291A6/27/20217/24/20217/24/2021
IRT-L1-2035/22/20218/31/20218/31/2021
BMT-Q1-4717/17/20217/14/2021

Y FailureTable

Nombre comúnFecha de errorCódigo de causa
IRT-L1-2038/31/2021No se ha encontrado ninguna causa
BMT-J2-291A7/24/2021No se encontró ningún código de causa aplicable
BMT-Q1-4717/14/2021No se ha encontrado ninguna causa
BMT-Q1-4717/5/2021No se ha encontrado ninguna causa
IRT-L1-2036/21/2021Escombros
BMT-J2-291A6/2/2021No se ha encontrado ninguna causa
BMT-Q1-4713/27/2021Usado
BMT-J2-291A3/25/2021Anclado
BMT-J2-291A3/18/2021Anclado
IRT-L1-2033/18/2021Fuera de ajuste
IRT-L1-2032/24/2021No se ha encontrado ninguna causa
BMT-J2-291A2/8/2021No se ha encontrado ninguna causa
BMT-J2-291A2/1/2021Tiempo
BMT-Q1-47112/17/2020Fuera de ajuste
BMT-J2-291A12/16/2020No se ha encontrado ninguna causa
IRT-L1-20310/7/2019No se ha encontrado ninguna causa
IRT-L1-20310/5/2019Edad
BMT-J2-291A1/3/2019Edad

Fecha del último error es una columna calculada que dibuja datos de FailureTable.

La matriz se filtra en función de si la fecha de error más reciente después de la corrección no está en blanco.

No estoy seguro de lo que estoy haciendo mal al tratar de crear una columna calculada que haga referencia a ambas tablas, ¡cualquier ayuda apreciada!

HI @ReadTheIron,

Puede usar la siguiente fórmula de medida para verificar las últimas 3 fechas del informe que están después de 'Fecha de corrección' y agrupadas en función del 'nombre común' actual, luego puede usarla en la matriz 'filtro de nivel visual' para filtrar registros:

Flag = 
VAR _currAssetDate =
    CALCULATE (
        MAX ( AssetTable[Remediation] ),
        ALLSELECTED ( FailureTable ),
        VALUES ( AssetTable[Common Name] )
    )
VAR currReportDate =
    MAX ( FailureTable[Date Reported] )
VAR _list =
    CALCULATETABLE (
        VALUES ( FailureTable[Date Reported] ),
        FILTER ( ALL ( FailureTable ), [Date Reported] >= _currAssetDate ),
        VALUES ( FailureTable[Common Name] )
    )
VAR ranked =
    FILTER (
        ADDCOLUMNS ( _list, "Rank", RANKX ( _list, [Date Reported],, DESC ) ),
        [Rank] <= 3
    )
RETURN
    IF ( currReportDate IN SELECTCOLUMNS ( ranked, "Date", [Date Reported] ), currReportDate )

2.png
Saludos

Xiaoxin Sheng

¡Eso funciona maravillosamente! Lo estudiaré para descubrir cómo funciona: gracias por compartir su experiencia; realmente me está ayudando a aprender.

Syndicate_Admin
Administrator
Administrator

Hola @ReadTheIron !

Para resolver este problema, primero debe crear una columna que calcule que [Fecha notificada] es mayor que [Corrección] o no. Puede crear una columna calculada para ese propósito utilizando a continuación DAX;

IsDateReport = IF(Table[DateReported] > Table[Remediation], 1, 0)

Después de esto, deberá crear una medida de clasificación, que se basará en la selección de su columna como (Nombre común, Corrección), esto creará clasificación, ahora puede usar esta medida para filtrar solo los 3 primeros rangos.

Saludos

Hasham

Syndicate_Admin
Administrator
Administrator

@ReadTheIron, una de las formas en que se puede añadir medidas como

countrows(filter(Table, [Date Reported] > [Remediation]))

Todas las medidas deben seguir el filtro anterior

O cree una columna y úsela como un filtro de nivel visual y filtre esta columna = 1

if([Fecha notificada] > [Remediación] ,1,0)

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.