Keep the raw data, untouched.
Ingest every source as it arrives, so any number can be traced back to where it came from.
Pulled production data from SAP PP across 7 manufacturing plants.
Analytics Engineer. I build data pipelines and models with Databricks, PySpark, SQL and AWS, so Finance and Operations teams get numbers they can trust in Power BI.
I'm Kevin, a data professional from Brazil, now living in Brisbane.
I started in operations, on a brewery production floor, working every day in SAP. Since then I have built dashboards, ETL pipelines and Lakehouse platforms for banking, construction and manufacturing companies. In Brisbane, I supported the office of World Courier, a global logistics company, with data projects.
I like work where the data is messy and the business question is clear. My job is to connect the two.
I started on a brewery production floor, counting stock against SAP. I know what bad data costs people on the ground. So every project follows the same path.
Ingest every source as it arrives, so any number can be traced back to where it came from.
Pulled production data from SAP PP across 7 manufacturing plants.
Remove duplicates, align keys and types, and add quality checks before anyone builds a report on top.
Built ETL in Pentaho and PySpark to make data consistent across sites.
Model fact and dimension tables around real business questions, then tune them for fast dashboards.
Delivered Power BI models for Finance, Commercial and Operations teams.
I have built many more dashboards and data pipelines. These are some I chose to show. Open any project to read the full story in English, with the live dashboard. All numbers are changed to protect confidential data. Ask me if you would like to see more.
Spend, cost per shipment and cost per km for two contract carriers, with route maps across South East Queensland and Northern NSW.
How many boxes of each type the Brisbane office uses, by temperature band and by day, with a short forecast.
A large rebuild of a construction company's data platform on Databricks and AWS, with Bronze, Silver and Gold layers.
BigQuery datasets, Power BI dashboards, A/B tests and a Power Platform app for a large Brazilian bank.
One water efficiency indicator for every plant, compared with targets and plans, for sustainability reporting.
I built the full data flow: SAP data captured into Oracle, scheduled loads, and an ICP dashboard to find where quality drops.
Packaged volume in hectolitres by drink type, beer style, packaging and production line, compared with the plan.
OTIF, order cycle time and delivery problems by reason and by branch, across five years of orders.
A PowerApps app for drivers, automatic alerts, and a live status board for the maintenance workshop.
Every role added a layer: operations first, then reporting, then the platform underneath.
Supported the Brisbane office of a global specialty logistics company. Built Power BI reports on packaging use and third-party carrier costs, alongside daily warehouse work.
Led the move of a legacy data platform to a Databricks and AWS Lakehouse with Medallion layers in Delta Lake.
BigQuery datasets, Power BI dashboards, A/B tests and insight reports for senior stakeholders.
Corporate KPIs for 7 plants from SAP PP, a water consumption indicator, and Pentaho ETL.
Taught Power BI and data analytics to working professionals, from beginner to advanced.
ETL into the corporate data warehouse, a fleet app in PowerApps, and Power Automate alerts.
Daily work in SAP PP: production orders, materials and stock. Matched system records to physical counts and automated routines with VBA.
Dark chips are my core stack.
Giving a talk about working in BI at UNEB, a university in Bahia, Brazil.
I live in Brisbane and can start now. I'm happy to meet for a coffee, do a technical interview, or walk you through a project.
World Courier moves time-critical and temperature-controlled shipments. The Brisbane office uses two third-party carriers, called Phoenix and Yellow in the report. The team wanted to know which carrier gives better value, and on which routes.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

Carrier costs were spread across invoices and shipment records. Nobody could quickly answer simple questions: How much do we spend with each carrier? What does one shipment cost? Which routes are expensive per kilometre?

Medicines and clinical trial samples travel in special packaging: dry ice boxes, dry shippers, pallets and insulated boxes. Each type keeps a different temperature. This report shows how the Brisbane office uses that packaging every day.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

Packaging is expensive, and running out of the right box can delay a shipment. The team needed a clear view of which box families they use, for which temperature bands, and how use changes over time.

Tenda is one of Brazil's largest home builders. Its data platform had grown over many years, and reports were slow and hard to trust. I worked on the team that moved it to a modern Lakehouse. It was a very large project, with data from finance, sales and construction operations.
I can't show the real system or data, because they belong to the client. The diagram and code below are examples I made for this portfolio to show how this kind of platform works.
Data lived in many legacy systems. Each report rebuilt the same logic in its own way, so numbers did not match between teams. Pipelines were slow, and it was hard to know where a number came from.
A short PySpark example of the kind of logic I wrote. It is not the client's code.
# Example only: Silver layer job, written for this portfolio
from pyspark.sql import functions as F
bronze = spark.read.table("bronze.finance_invoices")
silver = (
bronze
.withColumn("invoice_date", F.to_date("invoice_date", "yyyy-MM-dd"))
.withColumn("amount", F.col("amount").cast("decimal(18,2)"))
.filter(F.col("invoice_id").isNotNull())
.dropDuplicates(["invoice_id"])
)
# Simple quality gate before the table is published
assert silver.filter(F.col("amount") < 0).count() == 0
silver.write.format("delta").mode("overwrite").saveAsTable("silver.finance_invoices")Banco BV is one of Brazil's biggest banks for vehicle finance. I worked with its Finance and Operations teams, who needed reliable data and clear reports from very large volumes of transactions.
I can't show the bank's real dashboards or data. The diagram and SQL below are examples I made for this portfolio to show the type of work.
Leaders needed one trusted view of key numbers. Some processes and reports were not reliable, and the bank's internal data school tracked certificates by hand.
A short BigQuery SQL example of the kind of logic I wrote. It is not the client's code.
-- Example only: compare a test group with a control group
SELECT
test_group,
COUNT(*) AS customers,
AVG(processing_hours) AS avg_processing_hours,
COUNTIF(report_error) / COUNT(*) AS error_rate
FROM analytics.process_experiment
WHERE run_date BETWEEN '2025-06-01' AND '2025-08-31'
GROUP BY test_group;Grupo Petrópolis is one of Brazil's largest brewing groups. Breweries use a lot of water, so the company wanted one way to measure water efficiency in all 7 plants.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

Each plant measured water in its own way, so plants could not be compared. Leaders also needed the numbers for sustainability reporting.
The dashboard was built in Portuguese. Use this table to read the screen.
| On screen (Portuguese) | In English |
|---|---|
| Dashboard água | Water dashboard |
| Índice de água global | Global water index |
| Cerveja / Não cerveja | Beer / non-beer |
| Índice de água por área | Water index by area |
| Envase | Packaging line |
| Processo | Brewing process |
| Xaroparia + PET | Syrup room + PET bottling |
| Tipo de consumo | Consumption by plant |
| UND | Plant (unit) |
| Real / meta | Actual / target |
| IC | Status icon |
| Realizado / Planejado | Actual / planned volume |
| Consumo por unidade | Consumption by plant |
| Data / Centro de custo / Subgrupo / Tipo | Date / cost centre / subgroup / type |
ICP is the group's corporate quality indicator for brewing. It shows what share of quality checks meet the standard, from the brewing process to packaging and the finished product. I built this project end to end: the data pipeline and the dashboard.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

Quality results lived in SAP tables at each plant. There was no automatic way to bring them together, so the corporate team could not see quickly which plant, product or process step was pulling quality down.

The dashboard was built in Portuguese. Use this table to read the screen.
| On screen (Portuguese) | In English |
|---|---|
| Visão geral | Overview |
| Análise por área | Analysis by area |
| Não conformidade | Non-conformity |
| Detalhamento | Detail |
| Processo / Envase / Produto acabado | Process / packaging / finished product |
| Filial | Plant |
| Mosto: Pilsen / Puro malte | Wort: Pilsen / pure malt |
| Grupo / Descrição | Group / process step |
| Fabricação / Filtração / Fermentação | Brewing / filtration / fermentation |
| Adega de pressão / Maturação | Bright beer tanks / maturation |
| Ano / Mês | Year / month |
| Limpar filtros | Clear filters |
| Data e hora da última atualização | Date and time of last update |
Packaging is the last step in a brewery: beer and soft drinks go into cans, glass bottles, kegs and PET bottles. This dashboard shows how much each plant packaged, and how that compares with the plan.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

Production planning needed one daily view of packaged volume across all plants and lines, built on the same automated SAP data flow as the quality dashboard.

The dashboard was built in Portuguese. Use this table to read the screen.
| On screen (Portuguese) | In English |
|---|---|
| Produção envasada | Packaged production |
| Planejamento / Projeção | Planning / projection |
| Tipo: cerveja, refrigerante, outros | Type: beer, soft drink, other |
| Estilo: puro malte, especial | Style: pure malt, special |
| Embalagem: lata, vidro, barril, PET | Packaging: can, glass, keg, PET |
| Realizado / Planejado | Actual / planned |
| Linha | Production line |
| Unidade | Plant |
| Outros indicadores | Other indicators |
| Última atualização | Last update |
A drinks company delivers to thousands of shops and bars. This report shows how well those deliveries perform, and why some orders go wrong.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

The logistics team had delivery data but no single view of service level. They needed to see OTIF over time and find the main reasons for failed or late orders.

The dashboard was built in Portuguese. Use this table to read the screen.
| On screen (Portuguese) | In English |
|---|---|
| Análise de pedidos | Order analysis |
| Qtd de pedidos | Number of orders |
| Ano / Mês / Trimestre | Year / month / quarter |
| Filial | Branch |
| Fora do prazo | Late |
| Pedidos com ocorrência por motivo | Orders with problems, by reason |
| Falta de pedido | Missing order |
| Preço errado / divergente | Wrong / mismatched price |
| Estab. fechado | Shop closed |
| Desistência cliente | Customer cancelled |
| Estado e cidade | State and city |
| Custos / Pedidos | Costs / Orders |
Truck drivers on the road had no fast way to tell the workshop about a problem. They called or sent messages, and requests got lost.
All numbers in this dashboard are changed to protect privacy and confidential data. The design and logic are my real work.

The Maintenance Planning team could not see all open problems in one place, or which jobs were late.
The dashboard was built in Portuguese. Use this table to read the screen.
| On screen (Portuguese) | In English |
|---|---|
| Status manutenção | Maintenance status |
| Oficina externa / interna | External / internal workshop |
| Tarefas concluídas / pendentes | Completed / pending tasks |
| Cavalo / Carreta | Prime mover / trailer |
| Prioridade: baixa, média, urgente | Priority: low, medium, urgent |
| Concluído / Em atraso | Done / overdue |
| Elétrico / Mecânico / Solda / Borracharia | Electrical / mechanical / welding / tyres |
| Problemas em aberto | Open problems |
| % serviços em atraso | % jobs overdue |
| Placa | Plate (rego) |
| Quem abriu | Reported by |