Dax – Reemplazo de palabra clave/categoría.

Un usuario Pregunto ✅

coronatrabajador

Ok, aquí está mi problema, he estado usando Access con Excel hasta este momento para crear mis informes y estoy haciendo la transición a PowerBI y tengo muy poca comprensión de las medidas y DAX.

el SQL que estoy usando es el siguiente:

ACTUALIZAR MainTable, CategoryTable

SET MainCat = Categoría
WHERE TRBL_DESC Me gusta «*» +CategoryTable.Keyword + «*»;

MainTable: la tabla que se usa en PowerBI donde tengo una columna TRBL_DESC «descripción del problema» y he creado una columna en blanco «MainCat» para completar desde el SQL anterior.

CategoryTable – tiene 2 columnas «Palabra clave» y «Categoría»

Lo que hace el SQL es extraer ambas tablas, luego mirar para ver si el campo TRBL_DESC en MainTable contiene alguna de las palabras clave dentro de su cadena de los campos de palabras clave de CategoryTable y luego reemplaza el campo MainCat en MainTable con el campo Categoría en CategoryTable.

Me gustaría hacer todo esto en PowerBi, y no quiero tener una cadena larga porque a veces mis palabras clave están en los 1000 y necesito poder reordenarlas fácilmente.

En resumen, necesito el equivalente de Dax para el SQL.

Gracias.

robbieinoz

En respuesta a coronatrabajador

Hola @CrownWorker –

Creo que está recibiendo el error en el segundo conjunto porque necesita asegurarse de que su lista de palabras clave tenga un conjunto único de valores. es decir, no puede tener la misma palabra clave en su tabla de palabras clave más de una vez.

La fórmula que le di arriba devuelve la categoría en orden alfabético. Entonces, si hay varias coincidencias, el elemento que aparece primero en orden alfabético es el que aparece en la fórmula de categoría.

Parece que desea anular esta clasificación alfabética y devolver la categoría según su propia clasificación, donde define el orden de las categorías para devolver en el caso de múltiples coincidencias. Así es cómo:

Paso 1: agregue una columna a su tabla de palabras clave y clasifique su tabla de palabras clave de la siguiente manera:

rankTable.png

Ahora cambie su fórmula coincidente a algo parecido a lo siguiente:

rankedCategory = 

LOOKUPVALUE(
    'Keyword Table'[Narrative Contains],'Keyword Table'[Rank],
     CALCULATE(
        FIRSTNONBLANK('Keyword Table'[Rank],1),
        filter(
VALUES('Keyword Table'[Narrative Contains]), SEARCH('Keyword Table'[Narrative Contains],'Transaction list'[Narrative],1,0)<>0 ) ) )

Que ahora debería crear lo siguiente:

rankTableresults.png

Esto debería permitirle asignar una clasificación para dictar qué categorías deben devolverse en el caso de múltiples coincidencias.

Hola @CrownWorker,

Importe estas dos tablas primero. Luego agregue una columna calculada con esta fórmula.

MainCat =
LOOKUPVALUE (
    CategoryTable[Category],
    CategoryTable[Keyword], MainTable[Trbl_Desc]
)

Nota: los registros (filas) en «CategoryTable» deben ser únicos.Dax - KeywordCategory replace..jpg

¡Atentamente!

Valle

coronatrabajador

En respuesta a v-jiascu-msft

Gracias por el intento, el único problema con su solución es que necesita una coincidencia exacta y estoy buscando una coincidencia parcial/similar

robbieinoz

En respuesta a coronatrabajador

Hola @CrownWorker

Tuve un problema similar y lo acabo de resolver. Esto es lo que hice:

Tenía una tabla de transacciones con varias narrativas. Quería buscar cada descripción narrativa para ver si contiene una palabra clave de una lista de palabras clave. Si lo hiciera, devolvería la categoría correspondiente emparejada con la palabra clave. Así como esto:

Lista de transacciones:

lista de transacciones.png

Lista de palabras clave:

tabla de búsqueda original.png

Lo primero que hice fue configurar una columna para determinar si hay una coincidencia y, de ser así, qué palabra clave identificó la coincidencia. Creé una columna calculada con esta fórmula:

MatchFound = 
FIRSTNONBLANK(
FILTER(
values('Keyword Table'[Narrative Contains]),
search('Keyword Table'[Narrative Contains],'Transaction list'[Narrative],1,0))
,1)

Lo que agrega esta columna a la tabla, que identifica la palabra clave que se encontró en la cadena narrativa.

partido 1.png

Luego usé una fórmula de valor de búsqueda para devolver la categoría correspondiente de esta manera:

category = 
LOOKUPVALUE(
'Keyword Table'[Category],'Keyword Table'[Narrative Contains],'Transaction list'[MatchFound]
)

Lo que agrega esta columna de categoría. ¡Voila!

tabla final de partidos 2.png

¡Espero que ayude!

coronatrabajador

En respuesta a robbieinoz

Matchfound.jpg

La primera parte funcionó, me gustaría entender cómo ha ordenado mi lista de palabras clave para poder ordenarlas correctamente para capturar la información de la mejor manera posible para representar el servicio.

La segunda parte no funciona correctamente aunque da el error indicado en el gráfico a continuación.

Mesas.jpgCatError.jpg

robbieinoz

En respuesta a coronatrabajador

Hola @CrownWorker –

Creo que está recibiendo el error en el segundo conjunto porque necesita asegurarse de que su lista de palabras clave tenga un conjunto único de valores. es decir, no puede tener la misma palabra clave en su tabla de palabras clave más de una vez.

La fórmula que le di arriba devuelve la categoría en orden alfabético. Entonces, si hay varias coincidencias, el elemento que aparece primero en orden alfabético es el que aparece en la fórmula de categoría.

Parece que desea anular esta clasificación alfabética y devolver la categoría según su propia clasificación, donde define el orden de las categorías para devolver en el caso de múltiples coincidencias. Así es cómo:

Paso 1: agregue una columna a su tabla de palabras clave y clasifique su tabla de palabras clave de la siguiente manera:

rankTable.png

Ahora cambie su fórmula coincidente a algo parecido a lo siguiente:

rankedCategory = 

LOOKUPVALUE(
    'Keyword Table'[Narrative Contains],'Keyword Table'[Rank],
     CALCULATE(
        FIRSTNONBLANK('Keyword Table'[Rank],1),
        filter(
VALUES('Keyword Table'[Narrative Contains]), SEARCH('Keyword Table'[Narrative Contains],'Transaction list'[Narrative],1,0)<>0 ) ) )

Que ahora debería crear lo siguiente:

rankTableresults.png

Esto debería permitirle asignar una clasificación para dictar qué categorías deben devolverse en el caso de múltiples coincidencias.

coronatrabajador

En respuesta a robbieinoz

Hola Robbieinoz,

Eres fabuloso. Eso resolvió todos los problemas que tenía. Ojalá hubiera una manera de mostrar mi aprecio mejor que unas pocas líneas de texto en una pantalla. Intentaré enviarte algo de buena voluntad y karma.

Gracias de nuevo.

robbieinoz

En respuesta a coronatrabajador

No te preocupes feliz de ayudar 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *