Contidos
Como substituĆr de forma rĆ”pida e masiva o texto segundo a lista de referencias con fĆ³rmulas: xa o solucionamos. Agora imos tentar facelo en Power Query.
Como adoita pasar realizar esta tarefa Ć© moito mĆ”is fĆ”cil que explicar por que funciona, pero imos tentar facer as dĆŗas cousas š
Polo tanto, temos dĆŗas tĆ”boas dinĆ”micas "intelixentes" creadas a partir de rangos ordinarios cun atallo de teclado Ctrl+T ou equipo Inicio - Formato como unha tĆ”boa (Inicio ā Formato como tĆ”boa):
Chamei Ć” primeira mesa Data, a segunda mesa - guĆausando campo Nome da tĆ”boa (Nome da tĆ”boa) aba Construtor (DeseƱo).
Tarefa: substituĆr os enderezos da tĆ”boa Data todas as ocorrencias dunha columna Atopar Manual Ć”s sĆŗas correspondentes contrapartes correctas da columna Suplente. O resto do texto das celas debe permanecer intacto.
Paso 1. Cargue o directorio en Power Query e convƩrteo nunha lista
Despois de establecer a cela activa en calquera lugar da tĆ”boa de referencia, fai clic na pestana Data (Data)ou na pestana Consulta de enerxĆa (se tes unha versiĆ³n antiga de Excel e instalaches Power Query como complemento nunha pestana separada) no botĆ³n Da tĆ”boa/rango (De mesa/rango).
A tƔboa de referencia cargarase no editor de consultas de Power Query:
Para non interferir, un paso engadido automaticamente tipo modificado (Tipo modificado) no panel dereito, os pasos aplicados pĆ³dense eliminar con seguridade, deixando sĆ³ o paso fonte (Fonte):
Agora, para realizar mĆ”is transformaciĆ³ns e substituciĆ³ns, necesitamos converter esta tĆ”boa nunha lista (lista).
DigresiĆ³n lĆrica
- TƔboa Ʃ unha matriz bidimensional formada por varias filas e columnas.
- Gravar (Rexistrar) ā Array-string unidimensional, que consta de varios campos-elementos con nomes, por exemplo [Nome = "Masha", Sexo = "f", Idade = 25]
- lista ā unha matriz-columna unidimensional, formada por varios elementos, por exemplo {1, 2, 3, 10, 42} or { "Faith Hope Love" }
Para resolver o noso problema, interesarƩmonos principalmente no tipo lista.
O truco aquĆ Ć© que os elementos da lista en Power Query poden ser non sĆ³ nĆŗmeros ou texto banais, senĆ³n tamĆ©n outras listas ou rexistros. Ć nunha lista (lista) tan complicada, formada por rexistros (rexistros) que necesitamos converter o noso directorio. Na notaciĆ³n sintĆ”ctica de Power Query (entradas entre corchetes, listas entre corchetes) isto serĆa asĆ:
{
[ Buscar = āSt. Petersburg", SubstituĆr = "St. Petersburgoā] ,
[ Buscar = āSt. Petersburg", SubstituĆr = "St. Petersburgoā] ,
[ Buscar = "Pedro", SubstituĆr = "St. Petersburgoā] ,
etc.
}
Tal transformaciĆ³n realĆzase mediante unha funciĆ³n especial da linguaxe M integrada en Power Query: TĆ”boa.ToRecords. Para aplicalo directamente na barra de fĆ³rmulas, engade esta funciĆ³n ao cĆ³digo de paso alĆ fonte.
Foi:
Despois:
Despois de engadir a funciĆ³n Table.ToRecords, a aparencia da nosa tĆ”boa cambiarĆ”: converterase nunha lista de rexistros. O contido dos rexistros individuais pĆ³dese ver na parte inferior do panel de visualizaciĆ³n facendo clic no fondo da cela xunto a calquera palabra rexistro (pero non nunha soa palabra!)
Ademais do anterior, ten sentido engadir un trazo mĆ”is: para almacenar na memoria cachĆ© (bĆŗfer) a nosa lista creada. Isto obrigarĆ” a Power Query a cargar a nosa lista de busca unha vez na memoria e non a volver calcular cando mĆ”is tarde accedamos a ela para substituĆla. Para iso, envolve a nosa fĆ³rmula noutra funciĆ³n: Lista.Buffer:
Este almacenamento en cachƩ darƔ un aumento moi notable da velocidade (en varias veces!) cunha gran cantidade de datos iniciais que se borrarƔn.
Deste xeito complĆ©tase a elaboraciĆ³n do manual.
Queda por premer Inicio ā Pechar e cargar ā Pechar e cargar enā¦ (Inicio ā Pechar e cargar ā Pechar e cargar en..), seleccione unha opciĆ³n SĆ³ ten que crear unha conexiĆ³n (SĆ³ crear conexiĆ³n) e volver a Excel.
Paso 2. Cargando a tƔboa de datos
AquĆ todo Ć© trillado. Como antes co libro de consulta, subimos a calquera lugar da tĆ”boa, prememos na pestana Data botĆ³n De TĆ”boa/Range e a nosa mesa Data entra en Power Query. Paso engadido automaticamente tipo modificado (Tipo modificado) tamĆ©n pode eliminar:
Non son necesarias acciĆ³ns preparatorias especiais para facer con el, e pasamos ao mĆ”is importante.
Paso 3. Realiza substituciĆ³ns mediante a funciĆ³n List.Acumular
Engademos unha columna calculada Ć” nosa tĆ”boa de datos usando o comando Engadir unha columna - Columna personalizada (Engadir columna ā Columna personalizada): e introduza o nome da columna engadida na xanela que se abre (por exemplo, enderezo corrixido) e a nosa funciĆ³n mĆ”xica Listar.Acumular:
Queda por premer OK ā e obtemos unha columna coas substituciĆ³ns realizadas:
TeƱa en conta que:
- Dado que Power Query distingue entre maiĆŗsculas e minĆŗsculas, non houbo substituciĆ³n na penĆŗltima liƱa, porque no directorio temos "SPb", non "SPb".
- Se hai varias subcadeas para substituĆr Ć” vez nos datos de orixe (por exemplo, na sĆ©tima liƱa cĆ³mpre substituĆr tanto "S-Pb" como "Prospectus"), isto non xera ningĆŗn problema (a diferenza de substituĆr con fĆ³rmulas de mĆ©todo anterior).
- Se non hai nada que substituĆr no texto fonte (9ĀŖ liƱa), non se produce ningĆŗn erro (a diferenza, de novo, coa substituciĆ³n por fĆ³rmulas).
A velocidade de tal solicitude Ć© moi, moi decente. Por exemplo, para unha tĆ”boa de datos iniciais cun tamaƱo de 5000 filas, esta consulta actualizouse en menos dun segundo (sen almacenar no bĆŗfer, por certo, uns 3 segundos!)
Como funciona a funciĆ³n List.Acumular
En principio, este poderĆa ser o final (para que eu escriba, e que ti leas) este artigo. Se queres non sĆ³ poder, senĆ³n tamĆ©n comprender como funciona "baixo o capĆ³", entĆ³n terĆ”s que mergullar un pouco mĆ”is na madriguera do coello e xestionar a funciĆ³n List.Acumulate, que fixo toda a substituciĆ³n masiva. traballa para nĆ³s.
A sintaxe desta funciĆ³n Ć©:
=Lista.Acumular(lista, semente, acumulador)
onde
- lista Ć© a lista sobre cuxos elementos estamos iterando.
- semente - estado inicial
- acumulador ā unha funciĆ³n que realiza algunha operaciĆ³n (matemĆ”tica, de texto, etc.) sobre o seguinte elemento da lista e acumula o resultado do procesamento nunha variable especial.
En xeral, a sintaxe para escribir funciĆ³ns en Power Query ten o seguinte aspecto:
(argumento1, argumento2, ā¦ argumentoN) => algunhas acciĆ³ns con argumentos
Por exemplo, a funciĆ³n de suma pode representarse como:
(a, b) => a + b
Para List.Acumulate , esta funciĆ³n acumuladora ten dous argumentos obrigatorios (pĆ³dense chamar calquera cousa, pero os nomes habituais son foron Šø actual, como na axuda oficial para esta funciĆ³n, onde:
- foron ā unha variable onde se acumula o resultado (o seu valor inicial Ć© o mencionado anteriormente semente)
- actual ā o seguinte valor iterado da lista lista
Por exemplo, vexamos os pasos da lĆ³xica da seguinte construciĆ³n:
=Lista.Acumular({3, 2, 5}, 10, (estado, actual) => estado + actual)
- Valor variable foron Ć© igual ao argumento inicial sementeIe estado = 10
- Tomamos o primeiro elemento da lista (corrente = 3) e engƔdeo Ɣ variable foron (dez). Obtemos estado = 13.
- Tomamos o segundo elemento da lista (corrente = 2) e mƔis el ao valor acumulado actual na variable foron (dez). Obtemos estado = 15.
- Tomamos o terceiro elemento da lista (corrente = 5) e mƔis el ao valor acumulado actual na variable foron (dez). Obtemos estado = 20.
Este Ć© o Ćŗltimo acumulado foron o valor Ć© a nosa Lista.Acumula funciĆ³n e resultados como resultado:
Se fantaseas un pouco, entĆ³n usando a funciĆ³n Lista.Acumular, podes simular, por exemplo, a funciĆ³n de Excel CONCATENAR (en Power Query, o seu anĆ”logo chĆ”mase Texto.Combinar) utilizando a expresiĆ³n:
Ou mesmo buscar o valor mĆ”ximo (imitaciĆ³n da funciĆ³n MAX de Excel, que en Power Query se chama Lista.MĆ”x):
Non obstante, a principal caracterĆstica de List.Accumulate Ć© a capacidade de procesar non sĆ³ texto simple ou listas numĆ©ricas como argumentos, senĆ³n tamĆ©n obxectos mĆ”is complexos, por exemplo, listas-de-listas ou listas-de-rexistros (Ā”ola, Directorio!)
Vexamos de novo a construciĆ³n que realizou a substituciĆ³n no noso problema:
Lista.Acumular(guĆa, [Enderezo], (estado,actual) => Texto.SubstituĆr(estado, actual[Buscar], actual[SubstituĆr]) )
Que estĆ” pasando realmente aquĆ?
- Como valor inicial (semente) collemos o primeiro texto torpe da columna [Enderezo] a nosa mesa: 199034, San Petersburgo, str. Beringa, d. 1
- EntĆ³n List.Acumulate itera sobre os elementos da lista un por un - Manual. Cada elemento desta lista Ć© un rexistro composto por un par de campos "Que atopar - Que substituĆr" ou, noutras palabras, a seguinte liƱa do directorio.
- A funciĆ³n acumulador pon nunha variable foron valor inicial (primeiro enderezo 199034, San Petersburgo, str. Beringa, d. 1) e realiza nela unha funciĆ³n de acumulador: a operaciĆ³n de substituciĆ³n mediante a funciĆ³n M estĆ”ndar Texto. SubstituĆr (anĆ”logo Ć” funciĆ³n SUBSTITUTE de Excel). A sĆŗa sintaxe Ć©:
Text.Replace (texto orixinal, o que estamos a buscar, o que estamos a substituĆr)
e aquĆ temos:
- foron Ć© o noso enderezo sucio, que se atopa en foron (chegando alĆ dende semente)
- actual[Buscar] - valor de campo Atopar a partir da seguinte entrada iterada da lista guĆa, que reside na variable actual
- actual[substituĆr] - valor de campo Suplente a partir da seguinte entrada iterada da lista guĆadeitado actual
AsĆ, para cada enderezo, execĆŗtase cada vez un ciclo completo de enumeraciĆ³n de todas as liƱas do directorio, substituĆndo o texto do campo [Buscar] polo valor do campo [SubstituĆr].
Espero que teƱades a idea š
- SubstitĆŗe o texto en masa nunha lista mediante fĆ³rmulas
- ExpresiĆ³ns regulares (RegExp) en Power Query