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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Countifs y buscar con la izquierda en Power BI

Tengo dos tablas que son Datos e Informe.

En la tabla Datos e informe contienen las siguientes columnas son Elemento y código de área.

En la tabla de datos, el elemento y el código de área contienen prefijo y sufijo o prefijo o sufijo.

En la tabla de informes, la columna de elemento contiene (prefijo y sufijo) y las columnas de código de área solo contienen prefijo.

Si la columna de elemento tiene prefijo y sufijo, entonces es el inicio "090 BR_-"

Estoy tratando de hacer coincidir el código de elemento y área basado en el prefijo solo de la tabla de datos en la tabla de informe (sin columna auxiliar).

Estoy buscando dos resultados diferentes, uno es el código de área que se basa en el elemento y el código de área entre dos tablas y otro es SÍ o No resultado que se basa en el elemento y el código de área entre dos tablas.

En Excel estoy aplicando la siguiente fórmula =IF(COUNTIFS(DATA!$C$2:$C$2000,"*"&LEFT($A 2,SEARCH("-",$A 2&"-")-1)&"*",DATA!$G$2:$G$2000,"*"&LEFT($B 2,SEARCH("-",$B 2&"-")-1)&"*"),LEFT($B 2,SEARCH("-",$B 2&"-")-1),IF(COUNTIFS(DATA!$C$2:$C$2000,"*"&LEFT($A 2,SEARCH("-",$A 2&"-")-1)&"*" ,DATA!$G$2:$G$2000,""),"","NO"))

¿Puede indicar cómo puedo obtener el mismo resultado en Power BI mediante la opción Nueva columna calculada?

Adjunto el archivo PBI para su referencia https://www.dropbox.com/s/mhgqcy2nk13icbp/R.pbix?dl=0.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

No estoy seguro de que haya entendido correctamente su requisito sobre cómo está emparejando entre estas dos mesas. Pero basándome en lo que he entendido, he escrito el código DAX para las dos columnas calculadas que se indican a continuación..

Pruébalo en tu PBIX y avísame si necesitas algún cambio. Teniendo en cuenta que ha escrito una fórmula complicada en Excel, estoy seguro de que podrá modificarla según sus requisitos.

Desired Result 1 = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR CheckInData = 
    COUNTROWS(
        FILTER(
            DATA,
            DATA[AREA CODE]=CurArea &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
    )
VAR Result = IF(ISBLANK(CheckInData),"NO",CurArea)
RETURN
Result

Desired Result YesNo = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR CheckInData = 
    COUNTROWS(
        FILTER(
            DATA,
            DATA[AREA CODE]=CurArea &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
    )
VAR Result = IF(ISBLANK(CheckInData),"No","Yes")
RETURN
Result

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

No estoy seguro de que haya entendido correctamente su requisito sobre cómo está emparejando entre estas dos mesas. Pero basándome en lo que he entendido, he escrito el código DAX para las dos columnas calculadas que se indican a continuación..

Pruébalo en tu PBIX y avísame si necesitas algún cambio. Teniendo en cuenta que ha escrito una fórmula complicada en Excel, estoy seguro de que podrá modificarla según sus requisitos.

Desired Result 1 = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR CheckInData = 
    COUNTROWS(
        FILTER(
            DATA,
            DATA[AREA CODE]=CurArea &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
    )
VAR Result = IF(ISBLANK(CheckInData),"NO",CurArea)
RETURN
Result

Desired Result YesNo = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR CheckInData = 
    COUNTROWS(
        FILTER(
            DATA,
            DATA[AREA CODE]=CurArea &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
    )
VAR Result = IF(ISBLANK(CheckInData),"No","Yes")
RETURN
Result

Gracias por su respuesta y lo siento por las molestias para entender mi consulta.

La solución funciona bien, pero hay un pequeño error, en la tabla de datos el código de área está en blanco según el elemento, entonces lo mismo debe devolverse en la tabla de informes.

El DAX de ambos devuelve No, pero el resultado real es en blanco en la tabla de informes. Trato de modificar su DAX, pero estoy retrocediendo error puede modificar de acuerdo con mi resultado deseado.

En la tabla "Datos", el bacalao de área está en blanco.

sreenathv_0-1618227389518.png

Pero en la tabla de informes, el código de área es AB005 que no coincide con blank() por lo que los resultados se muestran como "No".

¿Qué es lo que necesitas? ¿Desea tratar blanks() en el campo de área de la tabla De datos como casos de coincidencia?

En ese caso, modifique la condición de FILTER de la siguiente manera...

Desired Result = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR CheckInData = 
    COUNTROWS(
        FILTER(
            DATA,
            (DATA[AREA CODE]=CurArea || DATA[AREA CODE]="") &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
    )
VAR Result = IF(ISBLANK(CheckInData),"NO",CurArea)
RETURN
Result

O puede probar estos códigos también

Desired Result = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR FilteredTable =  
        FILTER(
            DATA,
            (DATA[AREA CODE]=CurArea || DATA[AREA CODE]="") &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
VAR CheckInData = 
    COUNTROWS(FilteredTable)
VAR CheckBlank =
    CONCATENATEX(FilteredTable,[AREA CODE])=""
VAR Result = IF(ISBLANK(CheckInData),"NO",IF(CheckBlank,BLANK(),CurArea))
RETURN
Result
Desired Result = 
VAR CurItem = LEFT(REPORT[ITEM],SEARCH("-",REPORT[ITEM],1,LEN(REPORT[ITEM])+1)-1)
VAR CurArea = LEFT(REPORT[AREA CODE],SEARCH("-",REPORT[AREA CODE],1,LEN(REPORT[AREA CODE])+1)-1)
VAR FilteredTable =  
        FILTER(
            DATA,
            (DATA[AREA CODE]=CurArea || DATA[AREA CODE]="") &&
            NOT(ISBLANK(SEARCH(CurItem,DATA[PART NUMBERS],1,BLANK())))
        )
VAR CheckInData = 
    COUNTROWS(FilteredTable)
VAR CheckBlank =
    CONCATENATEX(FilteredTable,[AREA CODE])=""
VAR Result = IF(ISBLANK(CheckInData),"NO",IF(CheckBlank,BLANK(),CurArea))
RETURN
Result

...

Hola, Gracias por su respuesta y consejo.

Sí, tiene razón, no coincide de acuerdo con mi condición y lógica, por lo tanto, los resultados son No.

El elemento está disponible en ambas tablas, pero no hay código en la tabla de informes, por lo que se trata de un problema diferente. Si es posible, por favor cambie la lógica y muéstreme como un espacio en blanco si el código de área está en blanco, por lo que ayudará a abordar el problema de los demás en el mismo informe.

Gracias.

Sí, he dado los códigos DAX revisados en mi último post. Por favor, refiérase a ellos.

hola

Muchas gracias por su respuesta y modificación del DAX de acuerdo con mis requisitos. Esto es perfecto.

Gracias.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors