Eu tenho uma tabela do Excel 365 de entradas de log. Os logs são agrupados por uma marca inicial e uma marca final.
Column C: =IF( LEFT([@LOGS],6)="<Event","start", IF(LEFT([@LOGS],7)="</Event","end", ""))
Dados não tratados:
TAG_START_END LOGS
start <Event time="Sat Apr 15 1:13:17.750" type="Debug" thread="2fec: Main CIM worker thread" elapsed="0"
Database: C:\2023 Files\GDBs_4\New Mobile Geodatabase.geodatabase
SQL: SELECT main.ACTIVE_TRANSPORTATION.OBJECTID,main.active_transportation_nt_flag_vw.flag FRO
end </Event>
start <Event time="Sat Apr 15 1:13:17.749" type="Debug" thread="2fec: Main CIM worker thread" elapsed="1"
end </Event>
start <Event time="Sat Apr 15 1:13:17.749" type="Debug" thread="2fec: Main CIM worker thread" elapsed="2"
Database: C:\2023 Files\GDBs_4\New Mobile Geodatabase.geodatabase
SQL: SELECT main.ACTIVE_TRANSPORTATION.OBJECTID,main.active_transportation_nt_flag_vw.flag FRO
Number of features returned: 100
end </Event>
start <Event time="Sat Apr 15 1:13:17.749" type="Debug" thread="2fec: Main CIM worker thread" elapsed="0"
end </Event>
start <Event time="Sat Apr 15 1:13:17.747" type="Debug" thread="2fec: Main CIM worker thread" elapsed="0"
Database: C:\2023 Files\GDBs_4\New Mobile Geodatabase.geodatabase
SQL: SELECT main.ACTIVE_TRANSPORTATION.OBJECTID,main.active_transportation_nt_flag_vw.flag FRO
end </Event>
start <Event time="Sat Apr 15 1:13:17.747" type="Debug" thread="2fec: Main CIM worker thread" elapsed="2"
Database: C:\2023 Files\GDBs_4\New Mobile Geodatabase.geodatabase
SQL: SELECT main.ACTIVE_TRANSPORTATION.OBJECTID,main.active_transportation_nt_flag_vw.flag FRO
Number of features returned: 100
end </Event>
start <Event time="Sat Apr 15 1:13:17.746" type="Debug" thread="2fec: Main CIM worker thread" elapsed="1"
end </Event>
start <Event time="Sat Apr 15 1:13:17.746" type="Debug" thread="2fec: Main CIM worker thread" elapsed="0"
end </Event>
start <Event time="Sat Apr 15 1:13:17.744" type="Debug" thread="2fec: Main CIM worker thread" elapsed="0"
Database: C:\2023 Files\GDBs_4\New Mobile Geodatabase.geodatabase
SQL: SELECT main.ACTIVE_TRANSPORTATION.OBJECTID,main.active_transportation_nt_flag_vw.flag FRO
end </Event>
start <Event time="Sat Apr 15 1:13:17.743" type="Debug" thread="2fec: Main CIM worker thread" elapsed="1"
end </Event>
Para cada grupo de tags, desejo preencher a coluna GROUP_ID.
Na captura de tela acima, digitei manualmente os valores nesse campo. Agora, quero encontrar uma maneira de preencher o campo usando uma fórmula ou Power Query.
Como posso preencher a coluna GROUP_ID?
Motivo: quero eventualmente encontrar uma maneira de dinamizar as informações de LOGS em colunas: https://isstatic.askoverflow.dev/EfTUV.png . Acho que uma coluna GROUP_ID ajudaria com isso.
Relacionado:
Copie os logs do Diagnostic Monitor como tabela do Excel, não como tags verticais
Editar:
É assim que pode ser feito usando SQL:
Oracle SQL - Atribuir GROUP_ID a linhas com base nas tags de início/fim
sum(case when log_tags like '<Event%' then 1 else 0 end) over (order by id)
Algo semelhante pode ser feito no Excel?
Com o PowerQuery, você pode definir
AddGroup
etapasAddSeq
que se referenciam a si mesmas se o resultado estiver bem definido. Essas definições recursivas precisam de um@
no nome de cada etapa ao fazer referência a elas.Aqui IndexAdded insere uma coluna de índice necessária para referenciar a tabela uma célula acima (
{[Index]-1}
)Aqui, usei a coluna C (início/fim), mas
Text.StartsWith
poderia ser usada para calcular a condição inicial no PowerQuery.O script pode ser aprimorado para reordenar as colunas ou suprimir a coluna de índice.
Esta consulta é fácil de escrever (se soubermos sobre construção recursiva de uma tabela), mas não muito eficiente.
Aqui está uma nova versão otimizada (3s para 2.000 linhas). Leva diretamente uma
LOGS
coluna, verifique se começa com<Event
, se sim, inicie uma nova sequência de grupo.