Het schema van de rapportagedatabase begrijpen

Bijgewerkt

BETA: De rapportagedatabase bevindt zich momenteel in bèta en kan nog veranderen. Deze is alleen beschikbaar via opt-in. Om deel te nemen aan de bèta of vragen te stellen, neem contact op met support@azumuta.com.

Waar uw gegevens zich bevinden

De beheerde rapportagedatabase slaat de rapporteerbare gegevens van uw workspace op in een schema met de naam company_<normalized-workspace-id>. De naam gebruikt kleine letters en vervangt andere tekens, behalve cijfers, door underscores. Een aangepaste database kan een andere schemanaam gebruiken. Gebruik uw geconfigureerde schemanaam in de voorbeelden hieronder.

De hoofdtabellen

Het inschakelen van de rapportagedatabase synchroniseert alle onderstaande tabellen. U kunt geen individuele tabellen selecteren.

Table What it holds
workinstruction, workinstruction_version, workinstruction_tag Werkinstructies, hun versies en de toegewezen tags. Versies bevatten niet-goedgekeurde versies. Gebruik is_approved en is_effective om goedkeurings- en ingangsdatumstatus te controleren.
instruction_step De individuele stappen binnen een werkinstructieversie.
instruction_visit, instruction_total_visit, instruction_partial_check Elke keer dat een operator een stap doorloopt, totalen per stap en ingediende gedeeltelijke controles.
recording, recording_status, recording_variant, recording_step Opnames met een werkinstructieversie en hun statusgeschiedenis, geselecteerde variantinformatie en stap-voor-stap opnamegegevens. Deze kunnen geplande audits bevatten die nog niet zijn gestart.
issue, board, issue_column Issues, hun borden en de kolommen van die borden. Dit omvat Continuous Improvement-, goedkeurings-, Andon- en trainingsrouteborden. Gebruik issue.board_type om een bordtype te selecteren.
issue_task, issue_comment, issue_attachment, issue_signature, issue_checklist De items die aan een issue zijn gekoppeld.
issue_transition De geschiedenis van een issue dat tussen boordkolommen beweegt.
product_order, product_order_workinstruction, product_order_workinstruction_spot Productorders en de werkinstructies die ermee zijn gekoppeld.
article, article_category Productartikelen en hun categorieën, niet kennisbankartikelen.
tree_node De Explore-boomstructuur die modules, mappen en inhoud organiseert.
user, user_group, user_group_member Personen en groepen in uw workspace.
competency_training, competency_level Elk trainingsgegeven achter een skill-matrixcel: het niveau, hoe het is toegekend (training, training zonder trainer, productorder-review of handmatig ingesteld), de beoordeelde trainer, de duur, de getrainde versie en een aangepaste geldigheidsperiode. competency_level bevat het label dat uw workspace voor elk niveau toont.
qualification Kwalificaties met hun type.
qualification_competency_setting De skill-matrixinstellingen van elke kwalificatie: of een niveau een bijlage of een aangepaste geldigheidsperiode vereist, en de geldigheids- en waarschuwingsperioden.
recording_trainee De geplande trainees van elke training, met het niveau dat ieder kreeg.
workinstruction_competency_setting De Learning & Development-instellingen van elke werkinstructie: het minimale niveau om een productorder te starten, de niveaus voor fast forward en voor het weglaten van dubbele controles, en de geldigheidsperiode.
tree_node_competency_coverage Voor elke skill-matrixrij en elk niveau hoeveel personen dat niveau moeten bereiken. Een map zonder eigen waarde neemt de laagste waarde van de beschikbare kinderen over, zoals in de skill-matrix.
skill_matrix_cell Elke skill-matrixcel zoals de matrix die toont: het niveau en de status van elke persoon op elke werkinstructie of kwalificatie, en de score van elke map. Alleen gevuld wanneer uw workspace opgeslagen skill-matrixcellen gebruikt.

Auditopnames in de rapportagedatabase

De tabel recording bevat alleen opnames met een numerieke werkinstructieversie. Een opname zonder versie wordt uitgesloten, zelfs wanneer de status Finished (FINISHED) is.

De opname hoeft niet In progress (IN_PROGRESS) of Finished te zijn om opgenomen te worden. Een offline download kan een werkinstructieversie koppelen terwijl de status Planned (IN_QUEUE) blijft. Na een succesvolle synchronisatie met de rapportagedatabase kan die opname met status IN_QUEUE verschijnen.

Automatische downloads zijn afhankelijk van de geselecteerde inhoud en datumbereik van het apparaat. Deze kunnen plaatsvinden voordat een operator een audit opent. Zie Device Settings: Offline.

Het sluiten van een niet-gestarte audit als N/A (NOT_APPLICABLE) koppelt op zichzelf geen werkinstructieversie. Als de opname geen versie heeft, blijft de rapportagedatabase deze uitsluiten. Status alleen verklaart niet of een audit in de database verschijnt.

Status en resultaat zijn verschillend

De kolom status bevat de opgeslagen waarde, zoals IN_QUEUE, niet het weergavelabel Planned. Zie Status, result, and notes voor alle Engelse labels en opgeslagen waarden.

De tabel recording_status bevat statuswijzigingen. Deze bevat geen resultaatwijzigingen.

De kolom recording.result slaat het geselecteerde resultaat op, zoals Success (SUCCESS), Failed (FAILED), N/A (NOT_APPLICABLE) of Cancelled (CANCELLED). Nieuwe opnames starten met PLANNED. Deze waarde kan blijven staan als er geen resultaat is geselecteerd. Als de bronopname geen resultaatwaarde heeft, is de kolom NULL. Gebruik status, niet result, om de uitvoeringsstaat te identificeren.

De kolom is_failure wordt berekend op basis van checks, events en rework. Deze kan true zijn vanwege:

  • Een gefaalde check of dubbele controle.
  • Een torsieresultaat van NOK.
  • Een waarde buiten de toegestane grenzen.
  • Een Andon-event, dat een probleem tijdens uitvoering signaleert.
  • Een huidige of eerdere Rework (REWORK) status.

De kolom is_defect gebruikt dezelfde checks maar sluit alleen rework uit. Bijvoorbeeld: rework zonder een gefaalde check of Andon-event geeft is_failure = true en is_defect = false. Eerdere rework kan is_failure = true houden nadat de opname is beëindigd. Zie Rework voor de workflow.

Geen van beide berekeningen gebruikt het geselecteerde resultaat. Om N/A of Success te identificeren, gebruikt u result, niet is_failure = false. Een opname kan is_failure = false hebben zonder een geselecteerd resultaat.

Opname-notities

De kolom recording.notes bevat de notities van de opname, inclusief notities die zijn ingevoerd bij een resultaat. U kunt filteren op notes = 'auto cleanup' om opnames met precies die notitie te identificeren. Ontbrekende of lege notities verschijnen als NULL.

Rijen die zijn gesynchroniseerd voordat result en notes werden toegevoegd, kunnen nog steeds NULL in deze kolommen hebben. Een normale synchronisatie werkt alleen gewijzigde opnames bij. Zie Fill columns for existing data om deze kolommen voor ongewijzigde historische opnames te vullen.

Selecteer audits en werkinstructies met tags

Tags die u aan een werkinstructie of audit toevoegt, staan in de tabel workinstruction_tag, één rij per tag. Gebruik ze om de juiste audits te selecteren zonder op namen of beschrijvingen te matchen, die breken wanneer iemand de tekst bewerkt.

Column What it holds
workinstruction_id De werkinstructie of audit waaraan de tag is gekoppeld.
workinstruction_name De weergavenaam ervan.
tag Één tag. Tags zijn vrije tekst, dus spreek de spelling in uw workspace af.

Bijvoorbeeld, om de audits op te sommen die de tag calculate_quality_score dragen:

select r.id, r.status, r.result
from "company_<your-workspace-id>".recording r
join "company_<your-workspace-id>".workinstruction_tag t
    on t.workinstruction_id = r.workinstruction_id
where r.type = 'AUDIT'
    and t.tag = 'calculate_quality_score';

De werkinstructietabel heeft geen kolom die audits markeert. Selecteer audits met recording.type = 'AUDIT'.

Voltooid werk en gesloten orders

Opnamestatus en productorderstatus beschrijven verschillende werkniveaus:

Field and value Meaning
recording.status = 'FINISHED' De opname is beëindigd. Controleer result afzonderlijk.
product_order.enhanced_status = 'all-complete' (All complete) De actieve order voldoet aan de berekende voltooiingsvoorwaarden. Deze houden rekening met de werkinstructies, aantallen en niet-gearchiveerde suborders.
product_order.enhanced_status = 'finished' (Finished) De order is gesloten.

Een order kan In progress blijven wanneer de opnames zijn afgerond maar de voltooide hoeveelheid niet overeenkomt met de vereiste hoeveelheid. Een actieve order zonder werkinstructies of suborders is All complete. Zie Product-order status.

Het geforceerd afronden van een order annuleert onvoltooide opnames. Die opnames krijgen status FINISHED en resultaat CANCELLED. Sluiting is dus geen bewijs van succesvolle uitvoering. product_order.finished_at registreert de orderafsluiting, niet noodzakelijk het moment waarop al het werk was voltooid.

product_order.activated_at registreert wanneer de order voor het eerst werd geactiveerd. Deze is NULL voor een order die nooit is geactiveerd, en voor een order die geactiveerd werd voordat Azumuta activatietijden registreerde. Deze is niet afgeleid van execution_date, dat een geplande datum is. Orders die al gesynchroniseerd waren voordat deze kolom bestond krijgen alleen een waarde wanneer ze veranderen. Om deze voor alle bestaande orders te vullen, vraagt u Azumuta-support om uw rapportagegegevens te wissen zodat de volgende synchronisatie ze opnieuw opbouwt.

Zone-associaties en toewijzing

product_order_workinstruction_spot relateren elk orderitem aan zijn zones. De zone_type identificeert de bron:

  • assigned: een zone die aan het orderitem is toegewezen.
  • accessed: een zone die tijdens operatoractiviteit is geregistreerd, tenzij dezelfde zone al assigned is.
  • associated: een zone vanuit de plaatsing van de werkinstructie, alleen gebruikt wanneer het item geen toegewezen of bezochte zones heeft.

De tabel combineert toegewezen en bezochte zones. Hij houdt één rij per item en zone, waarbij assigned voorrang heeft. Een vergrendelde toewijzing is geen aparte SQL-zone-type.

Bijvoorbeeld: een item is toegewezen aan A, bezocht op A en B, en heeft standaardplaatsing C. De rijen zijn assigned A en accessed B, zonder C. Een filter op zone_type = 'accessed' mist daarmee het bezoek op A.

Fallback-plaatsing gebruikt de directe ouder tree node van de werkinstructie wanneer die node een zone is. Het zoekt niet in willekeurige voorouders.

Toewijzingen kunnen veranderen. De velden assigned_spot_id beschrijven toewijzing, niet een onveranderlijke uitvoeringslocatie. De associatietabel is geen toewijsgeschiedenis. De regels van de tabel komen ook niet altijd overeen met elke ingebouwde widget. Zie Zone filtering for product-order widgets voor widgetconfiguratie.

Join op orderitemniveau

Om gepland werk te tellen, begint u met product_order_workinstruction. Als u opnamegegevens nodig heeft, gebruik dan een left join van recording_id naar recording.id. Dit behoudt items zonder een rapportagerij voor een opname.

Join zones via product_order_workinstruction_spot.product_order_workinstruction_id = product_order_workinstruction.id. Join niet alleen op workinstruction_id: meerdere orderitems kunnen dezelfde werkinstructie gebruiken.

Meerdere zones of bezoeken kunnen de hoeveelheid van een item of de duur van een opname in een joined resultaat herhalen. Gebruik EXISTS voor een associatiefilter, of aggregeer elke bron voordat u joinet. Zie Count order items associated with a zone.

Geplande gebruikers en daadwerkelijke operators

recording.planned_user_id en planned_group_id beschrijven toewijzing. Ze identificeren niet iedereen die het werk heeft uitgevoerd. instruction_visit.user_id identificeert de operator voor dat bezoek.

Voor een training is planned_user_id de geplande trainer en recording.trainer_id de trainer die de training afrondde. De trainees staan in recording_trainee.

Meerdere operators kunnen bijdragen aan één opname. Tel distinct recording IDs per operator, niet bezoekrijen. Een gedeelde opname telt dan voor elke bijdrager mee. Zie Recordings voor de rapportworkflow en de operatorquery voor deze berekening.

Filter stappen op checktype

instruction_step.check_type bevat het type check op een stap. Gebruik dit in plaats van te matchen op step_description, dat verandert wanneer iemand de stap bewerkt. De kolom is NULL voor een stap zonder check.

Value Check
choice/ok-nok OK/NOK
choice/yes-no Yes/No
choice/single Single choice
choice/multiple Multiple choice
number/prompt Number
number/slider Slider
number/score Score
tools/torque Torque
text/line Single line
text/paragraph Paragraph
text/masked Masked input
text/unique-id Automatic ID
camera/bar-code Barcode
camera/picture Pictures
camera/signature Handwritten signature
table Table
special/attachment Files
special/print Print
special/email Email
special/procedure Procedure
special/identifier Product order number
special/variants Variants
special/timer Timer
special/link-product Link product order
special/scan-parts Parts
special/electronic-signature Electronic signature

Bijvoorbeeld, om de stappen met een OK/NOK-check op te sommen:

select workinstruction_name, step_description
from "company_<your-workspace-id>".instruction_step
where check_type = 'choice/ok-nok';

De waarden staan ook in de beschrijving van de kolom, zie de ingebouwde data dictionary.

Bezoeken, pogingen en toepasselijke stappen

  • instruction_visit heeft een rij wanneer een operator een stap verlaat. Een bezoek dat nog open is, kan nog geen rij hebben.
  • type = 'normal' en type = 'double-check' zijn afzonderlijke bezoekgroepen. is_last_visit markeert het laatste bezoek binnen zijn groep, niet noodzakelijk het laatste bezoek met een antwoord. Zie Double-checks.
  • Een geblokkeerde of ongeldige check telt als een poging maar levert geen geaccepteerd antwoord. instruction_total_visit.answer_attempts telt bezoeken met een poging nadat de operator vertrekt, niet individuele knopdrukken.
  • instruction_total_visit bevat totalen en het uiteindelijk geregistreerde antwoord voor elke opname, stap en bezoektype. Een geregistreerd antwoord is niet per se een succesvol antwoord.
  • recording_step.active = false betekent dat varianten de stap uitsluiten. Er wordt geen bezoek verwacht. Oudere opnames zonder opgeslagen variantselectie behandelen alle stappen als actief. Zie Variants en variant configuration.

Alleen ontbrekende gegevens bewijzen geen falen. Controleer toepasbaarheid, opnamestatus en of de stap een antwoord vereist. Zie Compare applicable steps with recorded answers.

Versie- en parametercontext

Join recording.workinstruction_version_id naar workinstruction_version.id om de versie te lezen die aan de opname is gekoppeld. Gebruik niet de huidige werkinstructieversie om historische stappen te interpreteren. Goedkeuring is een aparte eigenschap; zie Revision History.

Parameters worden opgeslagen als een JSON-object met sleutel de parameternaam. Lees een waarde met parameters->>'key'. Een opname of order zonder parameters heeft NULL.

Om een antwoord beschikbaar te maken in de rapportagedatabase, zet Write value to parameters op de check en geef het een stabiele sleutel, bijvoorbeeld machine_operator. Zie Use a parameter in a Product Check. Selecteer op die sleutel in plaats van te matchen op stapbeschrijvingen:

select id, parameters->>'machine_operator' as machine_operator
from "company_<your-workspace-id>".recording
where parameters->>'machine_operator' = 'Jan';

Een productorderopname bewaart zijn parameters op de order, dus recording.parameters is leeg voor zo'n opname. Lees product_order.parameters via recording.product_order_id. De kolom is ook een JSON-object, dus dezelfde expressie werkt:

select r.id, o.parameters->>'batch' as batch
from "company_<your-workspace-id>".recording r
join "company/<your-workspace-id>".product_order o
    on o.id = r.product_order_id;

Audits en andere opnames die geen productorderopnames zijn, gebruiken recording.parameters. Zie Product-order parameters en Introduction to parameters voor wat een parameter is.

JSON-velden kunnen lijsten of geneste objecten bevatten, niet alleen cijfers of tekst. Controleer het type van elke waarde voordat u deze converteert. Een SQL NULL duidt op ontbrekende gegevens, niet op nul of een gefaald antwoord.

Kolommen vullen voor bestaande data

Een nieuwe kolom of tabel wordt gevuld tijdens de volgende synchronisatie. Een rij die al bestaat krijgt alleen een waarde in een nieuwe kolom wanneer het bronrecord de volgende keer verandert, dus historische data kan leeg blijven. Dit geldt voor kolommen die zijn toegevoegd nadat u de rapportagedatabase inschakelde, zoals recording.result, recording.notes, recording.parameters, recording.trainer_id, tree_node.competency_importance, workinstruction_version.is_training_required en instruction_step.check_type. De tabel workinstruction_tag vult zichzelf.

Om de geschiedenis éénmaal te vullen, gebruikt u Clear data in de rapportageconfiguratie. Dit verwijdert alle gesynchroniseerde rijen voor uw workspace en houdt de rapportagedatabase ingeschakeld. De volgende synchronisatie vult elke tabel vanaf nul.

Waarschuwing: Queries en BI-rapporten tonen geen gegevens totdat die synchronisatie is voltooid. De knop is niet beschikbaar terwijl een synchronisatie draait. Zie Enable the reporting database.

Conventies die door het hele document worden gebruikt

  • Primaire sleutels. Elke tabel heeft een tekst-primair sleutel met de naam id. Dit identificeert een bronrecord of een gegenereerde rij. Gerelateerde kolommen gebruiken namen zoals recording_id en workinstruction_id. Bijvoorbeeld, join recording.workinstruction_id naar workinstruction.id.
  • Verwijderingen. Wanneer een synchronisatie een verwijderd bronrecord detecteert, verwijdert het de overeenkomstige rapportagerijen. Huidige tabeldefinities bevatten geen deleted_at. Oudere databases kunnen deze kolom nog hebben omdat schema-updates oude kolommen niet verwijderen. De huidige synchronisatie onderhoudt deze niet; gebruik deze niet als een actuele indicator voor verwijdering. Gearchiveerde records verschillen van verwijderde records. Bijvoorbeeld identificeert issue.archived_at gearchiveerde issues.
  • Sync-timestamps. Elke tabel heeft first_synced_at en last_synced_at. Deze registreren de eerste en meest recente synchronisatie die de rij heeft weggeschreven, niet de creatie- of wijzigingstijd van het bronrecord.
  • Bron-timestamps. Kolommen zoals created_at, updated_at en started_at zijn afhankelijk van de tabel. PostgreSQL slaat deze timestamps op als tijdstippen in UTC en toont ze in de sessietijdzone.
  • Opnameduur. recording.actual_duration en recording.rework_time zijn in seconden en kunnen fracties bevatten. Deel ze niet door 1000. Controleer de kolombeschrijving voor de eenheid van andere velden.
  • Flexibele velden gebruiken JSON. Gegevens die in vorm variëren (zoals parameters of een instructie answer) worden opgeslagen als jsonb, die u kunt opvragen met PostgreSQL's JSON-operatoren.
  • Vooraf berekende waarden. Om u joins te besparen, bevatten sommige tabellen kant-en-klare tellingen en metrics, bijvoorbeeld issue.comment_count, issue.open_task_count of recording.rework_time.

De ingebouwde data dictionary

Elke tabel en elke kolom heeft een mensleesbare beschrijving eraan gekoppeld. De meeste SQL-clients en BI-tools tonen deze automatisch. Bijvoorbeeld in psql:

\d+ "company_<your-workspace-id>".issue

U kunt ze ook lezen met een query:

select column_name, col_description(
    ('company_<your-workspace-id>.issue')::regclass,
    ordinal_position
) as description
from information_schema.columns
where table_schema = 'company_<your-workspace-id>'
  and table_name = 'issue'
order by ordinal_position;

Klaar om te queryen? Zie Example Analytics Queries.