smo
Hola
Estoy tratando de pasar de qliksense a power bi. Estoy buscando una alternativa al pick (wildmatch (4010,40 ??, 50 ??, 30 *), 1,2,3) en qliksese.
Con esta fórmula puedo usar el mapeo de comodines, por ejemplo, el resultado de la siguiente fórmula será pick (wildmatch (4010,40 ??, 50 ??, 30 *), 1,2,3) = 1. Como el 4010 está en el primer grupo, se selecciona el primer elemento de la segunda matriz. .
¿Hay algo en power bi que funcione así?
En Vba pude hacer esto con un me gusta inverso.
Para cada miembro de la matriz
si 4010 como miembro entonces
Resultado
demás
terminara si
Te agradeceré si pudieras ayudarme
Saludos
v-lili6-msft
hola @smo
Puede usar la función SEARCH para seleccionar y la función IF o SWITCH anidada para wildmatch para crear una fórmula como su lógica.
por ejemplo:
New Column 2 = SEARCH( SWITCH( TRUE(), SEARCH("40",[Column],1,0)>0,1, SEARCH("50",[Column],1,0)>0,2, SEARCH("30",[Column],1,0)>0,3) , "123",1,0)
Resultado:
y aquí hay un archivo pbix de muestra, inténtelo.
Saludos,
Lin
smo
En respuesta a v-lili6-msft
Hola Thansk por la respuesta, me las arreglo para usar la siguiente fórmula DAX para que todo funcione
PB_Account_F9991 =
Coincidencias VAR =
Topn (1,
CALCULATABLE (
GENERAR(
‘SUN_YTD’,
FILTRAR(
ACCOUNT_F9991,
BUSCAR(
[ACCOUNT_F9991_EXTERNAL],
SUN_YTD[KeyAccount],
1,
0
)
> 0)
))
)
REGRESO
CONCATENATEX (
Partidos,
[ACCOUNT_F9991_INTERNAL], «,»)
Pero me gustaría trasladar esto a M. Como la función lleva mucho tiempo en Dax y necesito consultar otro campo calculado en este
¿Hay alguna forma de mover esto a Power Query?
¿Hay alguna forma de utilizar la consulta de resultados, incluidas las columnas calculadas de otra importación de Power Bi, para poder modificarla con la consulta de Power?
Saludos
Sofía
v-lili6-msft
En respuesta a smo
hola @smo
Es difícil hacerlo en Power query, es posible que intentemos optimizar la fórmula, ¿podría compartir algunos datos de muestra y su resultado esperado para que tengamos una prueba?
Saludos,
Lin
smo
En respuesta a v-lili6-msft
Hola
Estoy tratando de hacer esto con R en este momento.
Tengo una tabla con 2 columnas. Con una gran lista de opciones, pondré 4 ejemplos pero es más largo
WildCardColumna | Cartografía |
* _I * _ ??? _ 007870000000100 | 4111 |
* _ ??? _ 007870000000100 | 4112 |
* _I? * _ ??? _ 006330000000005 | 5111 |
* _I? * _ ??? _ 0063300000 ????? | 5116 |
Mi otra tabla con los datos
Entidad | Cuenta | Contraparte | Monto |
B22 | 007870000000100 | IR22 | 2000 |
B22 | 007870000000100 | T222 | 4000 |
B22 | 006330000000005 | R222 | 4500 |
B22 | 006330000000007 | IR22 | 5000 |
Lo quiero como resultado
Entidad | Cuenta | Contraparte | Monto | Resultado |
B22 | 007870000000100 | IR22 | 2000 | 4111 |
B22 | 007870000000100 | T222 | 4000 | 4112 |
B22 | 006330000000005 | R222 | 4500 | 5111 |
B22 | 006330000000007 | IR22 | 5000 | 5116 |
Estoy pensando en usar R
Para convertir el comodín en expresiones regulares, estoy usando la siguiente fórmula
outputRegEx <-within (conjunto de datos, {RegEx_WildCardColumn = glob2rx (conjunto de datos $ WildCardColumn)})
Puedo agregar una columna con el patrón de la siguiente manera
biblioteca («stringr»)
patrón <- "^. * _ ??? _ 0062102040 ..... $"
cleanRegEx <- str_extract (conjunto de datos $ KeyAccount, patrón)
outputRegEx <-within (conjunto de datos, {RegEx = cleanRegEx})
Mi idea es tal vez recorrer la tabla wild car obteniendo la expresión regular y filtrando la tabla de datos formando un nuevo marco de datos con la nueva columna
¿Podrías guiarme en esto?
Saludos
smo
En respuesta a smo
Hola
No sé si es la mejor solución desde el punto de vista del rendimiento, pero resuelvo el problema usando el código R a continuación
Primero en la tabla de mapeo aplico la siguiente función R para transformar los comodines en exprecions regulares
# ‘conjunto de datos’ contiene los datos de entrada para este script
outputRegEx <-within (conjunto de datos, {RegEx_ACCOUNT_F9991_EXTERNAL = glob2rx (conjunto de datos $ ACCOUNT_F9991_EXTERNAL)})
Luego, en la tabla con los datos, uso el siguiente código donde filtro por la tabla de mapeo tomando las expreciones regulares y filtrando la tabla de datos una vez que filtro agrego el código en la segunda columna. Reduzco el marco de datos para no obtener un mapeo duplicado. Y agrego el marco de datos que ahora se ha encontrado.
Espero que esto ayude a otras personas con el mismo problema.
# ‘conjunto de datos’ contiene los datos de entrada para este script
biblioteca («stringr»)
conjunto de datos <- conjunto de datos
conjunto de datos2 <- conjunto de datos2
subData <- data.frame (
ENTIDAD = carácter (),
KeyAccount = carácter (),
BCP_ACCOUNT = carácter ())
para (i en 1: nrow (dataset2)) {
patternLook <-dataset2[i,1]
patternResult <-dataset2[i,2]
isValid <- function (x) {grepl (patternLook, as.character (x), ignore.case = TRUE)}
subData <- rbind (subData, subconjunto (dentro de (conjunto de datos, {BCP_ACCOUNT = toString (patternResult)}), isValid (conjunto de datos $ KeyAccount) == "TRUE"))
conjunto de datos <- conjunto de datos[ !(dataset$KeyAccount%in% subset(dataset,isValid(dataset$KeyAccount)=="TRUE")$KeyAccount), ]
}
subData <- rbind (subData, dentro de (conjunto de datos, {BCP_ACCOUNT = "NA"}))
Es importante agregar el marco de datos de la segunda columna junto al otro marco de datos, solo agregue una columna y agregue el segundo marco de datos [dataset=#»Added Custom», dataset2=ACCOUNT_F9991].
Asegúrese de que esté en el mismo script R de ejecución
Amitchandak
Referir
https://dax.tips/2017/05/23/power-bi-and-regular-expressions/