Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bom dia, comunidade
Estou com um desafio e não sei como avançar:
Estou trabalhando com um arquivo .xml e ele é dividido em várias tabelas.
Eu quero relacionar os itens das tabelas, mas eles possuem nomes diferentes, logo não consigo usar a função "as".
A tabela que eu quero é assim
Tag | Plant_Area | Description | Alarm Priority | Alarm Type | Limit Value | Enabled | |
---|---|---|---|---|---|---|---|
TI-1112-5 | DIPIG/CALCINACAO_F1104 | TEMP. SAIDA DO D-1112 | CRITICAL | High High Alarm | 100 | F | |
TI-1112-5 |
| TEMP. SAIDA DO D-1112 | HIGH | High Alarm | 95 | F | |
module tag="" | plant_area="" | description | priority_name | atyp | cv | enab |
Tag, Plant_area e Description estão na mesma tabela, já o resto nao. Gostaria de poder relacioná-los e colocar a como está acima
Retirei uma parte do arquivo, pois o original tem uns 200 MB
Anexei como .txt
Não sei se vocês entenderão o que estou pretendendo porque o buraco é muito mais embaixo, mas eu quero seguir o passo a passo porque estou aprendendo a desenvolver no QlikSense.
Como posso fazer essa relação?
Boa tarde João,
Existe algum campo chave entre os arquivos? Como o TI-1112-5 sabe os detalhes do segundo arquivo?
Boa tarde, Ricardo,
Primeira pergunta:
Não sei se existe um campo chave/comum. Eu procurei e não achei uma forma de relacionar. Apesar de todas elas estarem dentro de "fhx/module", as "filhas" geradas não possuem relações com as suas tabelas-mãe.
Segunda pergunta:
Eu coloquei manualmente os dados na tabela, mas originalmente eles pertencem a uma tabela chamada "Fhx/module". o problema (citado anteriormente) é que, há muitas tabelas filhas geradas e elas não possuem correlação nenhuma com suas tabelas acima.
No caso, module seria o TI-1112-5 e tudo gerado abaixo dele seriam os dados dele.
Teoricamente, deveriam ser automaticamente relacionados, mas, infelizmente, não são.
Ok,
Existe a possibilidade de conectar diretamente na base de dados e lê-los ao invés de utilizar o XML?
Caso não, creio que deverás criar algum mecanismo de encadear as tabelas.
A lógica de estruturação dos dados é que deve ser bem avaliada, criando regras pré-definidas de entendimento para tabulação e utilização posterior. Essa atividade muitas vezes representar 70% do tempo de desenvolvimento de um projeto.
O arquivo .xml já é uma forma de fugir de um .txt não organizado e é o máximo que conseguimos, infelizmente.
Seria bom se eu pudesse tentar métodos já definidos porque sou novo com a ferramenta ainda.
Você tem algum exemplo de um mecanismo como esse para que eu possa me basear, por favor?
Bom dia, Ricardo, tudo bom?
Consegui achar uma forma de relacionar os dados.
Ao reconhecer que a Tabela FHX/Module contém a Tabela FHX/Module/Attribute_instance, eu fiz da seguinte forma:
Eu chamei a tabela fhx/module e fiz o encaminhamento de cada elemento da tabela FHX/Module/Attribute_instance no Data Load Editor. Segue abaixo o código:
----------------------------
Table400:
LOAD
"tag",
plant_area,
category,
user,
"time",
description,
period,
controller,
primary_control_display,
instrument_area_display,
detail_display,
"attribute_instance/name",
"attribute_instance/explicit_override",
"attribute_instance/value_changed",
"attribute_instance/nvm",
"attribute_instance/history_data_point/field",
"attribute_instance/history_data_point/data_characteristic",
"attribute_instance/history_data_point/enabled",
"attribute_instance/history_data_point/sample_period_seconds",
"attribute_instance/history_data_point/compression_enabled",
"attribute_instance/history_data_point/record_at_least_every_minutes",
"attribute_instance/history_data_point/deviation_limit_for_compression",
"attribute_instance/history_data_point/data_representation",
"attribute_instance/history_data_point/exposed",
"attribute_instance/history_data_point/enterprise_collection",
"attribute_instance/value/set",
"attribute_instance/value/string_value",
"attribute_instance/value/changeable",
"attribute_instance/value/enum_set",
"attribute_instance/value/cv",
"attribute_instance/value/priority_name",
"attribute_instance/value/enab",
"attribute_instance/value/inv",
"attribute_instance/value/atyp",
"attribute_instance/value/almattr",
"attribute_instance/value/limattr",
"attribute_instance/value/param1",
"attribute_instance/value/param2",
"attribute_instance/value/supptimeout",
"attribute_instance/value/mask",
"attribute_instance/value/isdefaultmask",
"attribute_instance/value/alarm_functional_classification",
"attribute_instance/value/alarm_description",
"attribute_instance/value/eu100",
"attribute_instance/value/eu0",
"attribute_instance/value/units",
"attribute_instance/value/decpt",
"attribute_instance/value/oos_p",
"attribute_instance/value/iman_p",
"attribute_instance/value/lov_p",
"attribute_instance/value/man_p",
"attribute_instance/value/auto_p",
"attribute_instance/value/cas_p",
"attribute_instance/value/rcas_p",
"attribute_instance/value/rout_p",
"attribute_instance/value/oos_a",
"attribute_instance/value/iman_a",
"attribute_instance/value/lov_a",
"attribute_instance/value/man_a",
"attribute_instance/value/auto_a",
"attribute_instance/value/cas_a",
"attribute_instance/value/rcas_a",
"attribute_instance/value/rout_a",
"attribute_instance/value/target",
"attribute_instance/value/normal",
"attribute_instance/value/ref",
"attribute_instance/value/class",
"attribute_instance/value/option8",
"attribute_instance/value/option15",
"attribute_instance/value/svalue",
"attribute_instance/value/enable",
"attribute_instance/value/type",
"attribute_instance/value/expression",
"attribute_instance/value/option14",
"attribute_instance/value/passenb",
"attribute_instance/value/passin",
"attribute_instance/value/passout",
"attribute_instance/value/act1enb",
"attribute_instance/value/act1in",
"attribute_instance/value/act1out",
"attribute_instance/value/act2enb",
"attribute_instance/value/act2in",
"attribute_instance/value/act2out",
"attribute_instance/value/option0",
"attribute_instance/value/option11",
"attribute_instance/value/option13",
"attribute_instance/value/option5",
"attribute_instance/value/option3",
"attribute_instance/value/option6",
"attribute_instance/value/option10",
"attribute_instance/value/option7",
"attribute_instance/value/option9",
"attribute_instance/value/option2",
"attribute_instance/value/size",
"attribute_instance/value/option12",
"attribute_instance/value/alarm_help/alarm_consequence_of_inaction",
"attribute_instance/value/alarm_help/alarm_time_to_respond",
"attribute_instance/value/alarm_help/help_text_1",
"attribute_instance/value/alarm_help/help_text_2",
"attribute_instance/value/alarm_help/help_text_3",
"fattribute_instance/value/sstatus/sq",
"attribute_instance/value/sstatus/gpss",
"attribute_instance/value/sstatus/ls",
"attribute_instance/value/sstatus/gcss",
"attribute_instance/value/st/sq",
"fattribute_instance/value/st/bss",
"attribute_instance/value/st/ls",
"attribute_instance/value/st/gpss",
"attribute_instance/value/st/gcss",
"attribute_instance/value/st/uss",
%Key_module_E0FE8EE00B0F4F34,
%Key_attribute_instance_68A522EC8D556DD9
FROM [lib://Desktop/GKT_Millennium.xml]
(XmlSimple, table is [fhx/module]);
Store Table400 into lib://Desktop/module.qvd(qvd);
Drop Table Table400;
-------------------------------------------------------------------------------------------
As tabelas, assim, ficariam automaticamente relacionadas, porém há vários parâmetros "attribute_instance/name" para um mesmo tag, mas ele não repete o tag até que todos os relacionados a ele sejam impressos, ele pega a primeira correspondência e pula para o próximo.
Na imagem acima, podes ver que "MCOMMAND" é o valor referente ao primeiro atributo "name" da planilha "Attribute_Instance, onde ela abre e fecha várias vezes.
O resultado é esse:
Existe alguma forma de eu fazer um loop para repetir o tag enquanto há tabelas "attribute_instance" no mesmo tag?
Cada linha da tabela representa uma tabela module lida e cada coluna representa um parâmetro.
espero que isso o ajude a entender melhor o que está acontecendo.
Obrigado