Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago
Solved

Buscarv - PowerBI - Rango de texto o lista

¡Hola!

Estoy tratando de obtener la matrícula de varios vehículos, en función de cómo terminan sus matrículas.

Tabla de búsqueda original:

AñoEneFebEstropearAprMayoJunJulHaceSepOctNovDic
2022
2021amo mi vidaLMXLNNLPDLPWLRPLSFLSPLTDLTPLVDLVV
2020LFHLFYLGGLGHLGPLHGLJDLJRLKFLKVLLJLMC
2019KTJKVBKVXKWTKXRKYNKZKKZYLBNLCGLCYLDR
2018KHGKHYKJVKKRKLNKMMKNKKPDKPSKRJKRZKSS
2017JWNJXFJYBJYTJZPKBM (en inglés)KCHKCTKDHKFCKFW (en inglés)KGN

(No copié todo el asunto, porque no es necesario, eso se remonta al año 2000, porque no es necesario)

Al despivotar la tabla para trabajar con ella, obtenemos algo como esto (simplificado para el año 2021):

tbLookupPlateYear

AñoMes3LetletesMesNúmero
2021DicLVV12
2021NovLVD11
2021OctLTP10
2021SepLTD09
2021HaceLSP08
2021JulLSF07
2021JunLRP06
2021MayoLPW05
2021AbrLPD04
2021EstropearLNN03
2021FebLMX02
2021Eneamo mi vida01

Ahora, obtengamos la fecha de la placa:

Ejemplo de placa A: E 1234 LSF

la fecha sería agosto de 2021

Placa de ejemplo B: E 4321 LMM

La fecha sería entre febrero y marzo de 2021, por lo que indicamos la más baja, febrero de 2021

¿Cómo podemos hacer esto en PowerBI? En Excel usarías vlookup, sin coincidencia exacta, y funcionaría bien. No en PowerBI, que solo genera coincidencias exactas.

¿Alguna idea?

  • Hay @jaimemagana ,

    Puede convertir el texto a UniCode y luego compararlos.
    1. Primero agregue una nueva columna a la tabla.

    NumberCode = 
    UNICODE ( 'Table'[3Letters] ) * 10000
        + UNICODE ( MID ( 'Table'[3Letters], 2, 1 ) ) * 100
        + UNICODE ( RIGHT ( 'Table'[3Letters] ) )

    2. Luego cree la columna en la tabla de placas.

    Lookup = 
    VAR Fir = UNICODE ( [3Letters] )
    VAR Sec = UNICODE ( MID ( [3Letters], 2, 1 ) )
    VAR Thir = UNICODE ( RIGHT ( [3Letters] ) )
    VAR PlateUnicode = Fir * 10000 + Sec * 100 + Thir
    VAR Tab =
        FILTER (
            'Table',
            'Table'[NumberCode]
                = MAXX ( FILTER ( 'Table', [NumberCode] <= PlateUnicode ), [NumberCode] )
        )
    RETURN
        MAXX ( Tab, [Attribute] ) & " " & MAXX ( tab, [Year] )

    Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
    Saludos
    Winniz
    Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

2 Replies

  • Hay @jaimemagana ,

    Puede convertir el texto a UniCode y luego compararlos.
    1. Primero agregue una nueva columna a la tabla.

    NumberCode = 
    UNICODE ( 'Table'[3Letters] ) * 10000
        + UNICODE ( MID ( 'Table'[3Letters], 2, 1 ) ) * 100
        + UNICODE ( RIGHT ( 'Table'[3Letters] ) )

    2. Luego cree la columna en la tabla de placas.

    Lookup = 
    VAR Fir = UNICODE ( [3Letters] )
    VAR Sec = UNICODE ( MID ( [3Letters], 2, 1 ) )
    VAR Thir = UNICODE ( RIGHT ( [3Letters] ) )
    VAR PlateUnicode = Fir * 10000 + Sec * 100 + Thir
    VAR Tab =
        FILTER (
            'Table',
            'Table'[NumberCode]
                = MAXX ( FILTER ( 'Table', [NumberCode] <= PlateUnicode ), [NumberCode] )
        )
    RETURN
        MAXX ( Tab, [Attribute] ) & " " & MAXX ( tab, [Year] )

    Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
    Saludos
    Winniz
    Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.