Skip to content

build_reports

Calculates flow metrics from the XLSX files produced by transform_data and presents the results as interactive Plotly charts in the browser or as a PDF export.

Overview

Property Value
Status available
GUI entry point build_reports_gui.pyw
CLI entry point python -m build_reports
Benutzerhandbuch (DE) build_reports_Benutzerhandbuch.pdf
User Manual (EN) build_reports_UserManual.pdf
Manual de Utilizator (RO) build_reports_ManualUtilizator.pdf
Manual do Utilizador (PT) build_reports_ManualUtilizador.pdf
Manuel d'utilisation (FR) build_reports_ManuelUtilisateur.pdf

Metrics

Metric (SAFe) Metric (Global) Description Required file
Flow Time Cycle Time Cycle time from start to completion IssueTimes.xlsx
Flow Velocity Throughput Issues completed per time period IssueTimes.xlsx
Flow Load WIP Issues currently in an In Progress stage, grouped by stage and age IssueTimes.xlsx
Cumulative Flow Diagram Cumulative Flow Diagram Cumulative stage entries over time CFD.xlsx
Flow Distribution Flow Distribution Distribution by type, stage dominance and avg cycle time IssueTimes.xlsx
Process Flow: Transitions Process Flow: Transitions Directed graph of all status transitions (count) Transitions.xlsx
Process Flow: Time Process Flow: Time Directed graph with node and edge width based on median dwell time Transitions.xlsx

Input files

File Required Description
IssueTimes.xlsx All issues with time data per stage
CFD.xlsx optional Daily stage entries for the CFD
Workflow.txt optional <First> / <Closed> markers for CFD trend lines
pi_config_example.json optional Custom PI intervals for Flow Velocity
Transitions.xlsx optional Status transitions per issue for Process Flow

Architecture

build_reports/
├── metrics/             # Plugin registry + individual metric modules
│   ├── base.py          # MetricPlugin / MetricResult base classes
│   ├── flow_time.py
│   ├── flow_velocity.py
│   ├── flow_load.py
│   ├── cfd.py
│   ├── flow_distribution.py
│   └── process_flow.py
├── loader.py            # Load all XLSX files → ReportData
├── filters.py           # FilterConfig + apply_filters()
├── cli.py               # run_reports() + argparse CLI
├── gui.py               # tkinter GUI
├── export.py            # PDF and Excel export
└── terminology.py       # SAFe / Global terminology switching

The plugin system registers metrics automatically on import:

from build_reports.metrics import get_metric, all_metrics
plugin = get_metric("flow_time")
result = plugin.compute(data, terminology="SAFe")
figs = plugin.render(result, "SAFe")

Quick start CLI

python -m build_reports IssueTimes.xlsx --pdf report.pdf
python -m build_reports IssueTimes.xlsx --cfd CFD.xlsx --transitions Transitions.xlsx --browser
python -m build_reports IssueTimes.xlsx --metrics flow_time process_flow process_flow_time --from-date 2025-01-01

Templates

The GUI supports saving and loading all settings as a JSON template (menu → Templates). Templates are versioned ("version": 4) and backwards-compatible.

Data hand-over from transform_data

build_reports can be launched directly from transform_data: after a transformation, its Open in build_reports button pre-fills the IssueTimes, CFD, Transitions and workflow fields here. Internally the data is passed as a project template via the --gui-template <path> command-line flag, which the GUI loads on startup. If a project template was loaded in transform_data, its build_reports settings (PI config, filters, metric selection) carry over too; otherwise the PI config and filters remain empty for you to choose.

Note: Flow Time Method B and workflow structure

Method B sums stage minutes up to, but not including, the <Closed> stage. Stages defined after the closed stage in the workflow (e.g. "Monitoring", "Done") are also excluded. The closed stage itself carries a carry-forward value (reference_dt − closed_date) for completed issues that would distort the measured cycle time — it is therefore excluded.

Method A (calendar days First Date → Closed Date) is not affected and is recommended as a comparison.