Back to Usama Javed's portfolio

Portfolio analysis

115 kWp commercial rooftop cost and procurement control

The bill of materials, procurement and cost tracker for a 115 kWp commercial rooftop, with a Power BI report and supporting design and yield analysis.

BOM and cost tracker

A project workbook for a 115 kWp commercial rooftop in Islamabad, with 198 Jinko 580 W modules in 11 strings on a single Huawei SUN2000 inverter. It checks the string design against the inverter's voltage limit, prices the bill of materials, sets an order-by date for each item from the date it is needed on site, and tracks budget against committed and forecast cost.

A dashboard sums up the job: cost position, late and overdue orders, and spend by supplier. The workbook uses Excel Tables, XLOOKUP, SUMIFS, COUNTIF, nested IF and WORKDAY.INTL, with conditional formatting and a PivotTable with a slicer. Module and inverter data come from the manufacturers' datasheets. The order and delivery dates in the tracker are examples, and the PKR rates are indicative: the PKR 7.11M budget works out at about PKR 62 per Wp.

Download the workbook (.xlsx) to see the formulas.

All files for this project on GitHub

Dashboard
1. Dashboard. Budget PKR 7.11M against a forecast of PKR 7.14M (PKR 37,340 over), 3 items late or overdue, and a PivotTable with a supplier slicer
Inputs and BOM
2. Inputs and BOM. 18 modules per string reach 1,012 V on a -5 °C morning, inside the inverter's 1,100 V limit, so the check reads OK. The IF formula behind it is in the formula bar
Procurement tracker
3. Procurement tracker. The inverter was ordered 4 working days after its order-by date, so it arrives a day after electrical works start. The formula bar shows the nested IF that sets the status
Cost tracker
4. Cost tracker. Mounting is 6% over budget and AC cable 4% under. The formula bar shows the SUMIFS that totals the budget by category

Reporting dashboard

A one-page report for the same 115 kWp rooftop, fed from the Excel tracker. It shows budget, forecast and variance at a glance, compares budget and forecast for each cost category, counts BOM lines by procurement status, and lists the items that need action, most urgent first.

Power Query imports and cleans the cost and procurement tables, and four DAX measures (Budget, Forecast, Variance and Lines) drive the visuals. The totals agree with the Excel workbook, and as with the workbook, the PKR rates are indicative.

All files for this project on GitHub

Report page
1. Report page. Three cards, a clustered bar chart, a column chart, and a table filtered to the 7 lines that need action
Power Query
2. Power Query. The applied steps on the right: keep the columns needed, filter out Excel's total row, set the data types. All 19 BOM lines come through
DAX measure
3. DAX measure. Variance = [Budget] - [Forecast] in the formula bar, with the measure's description

Procurement database

An SQLite database for the same 115 kWp rooftop, built from the Excel tracker. It holds two linked tables: the bill of materials, with quantity, rate, budget and forecast for each of the 19 lines, and the procurement record for each line, with its order-by and delivery dates and status.

Seven queries pull out the most expensive items, the budget by category, the procurement status of every line and, through a join between the two tables, the items that need ordering or chasing, most urgent first. The results agree with the Excel workbook and the Power BI report, and as with the workbook, the PKR rates are indicative.

Download the SQL script (.sql) to build the database and run the queries.

All files for this project on GitHub

Database structure
1. Database structure. The two tables and their columns. The line number is the primary key of bom, and procurement uses it to link each row back to its BOM line
Browse data
2. Browse data. All 19 BOM lines with quantity, unit rate, budget and forecast in PKR, supplier and lead time
Budget by category
3. Budget by category. Line count and budget for each category with GROUP BY. Modules account for PKR 3.10M of the PKR 7.11M total
Items that need action
4. Items that need action. The join adds item names and suppliers to the procurement status: 1 order overdue, 2 late deliveries and 4 orders due, most urgent first

Roof layout and simulation

The same 115 kWp system as the Excel, Power BI, SQL and Python projects, designed in HelioScope on a commercial roof in Islamabad's I-9 industrial area: 198 Jinko 580 W modules on fixed-tilt racking at 20°, wired in 11 strings of 18 into one Huawei SUN2000-100KTL-M2 inverter (DC/AC ratio 1.15). HelioScope checked the strings at its own Islamabad design low of 0.3 °C and got 998 V; the Excel check uses a harsher -5 °C and gets 1,012 V. Both sit inside the inverter's 1,100 V limit.

The rows follow the building, at an azimuth of 146° (34° east of south), to fit all 198 modules; that costs about 2% of yield against due south. The simulation, on Meteonorm weather data, gives 158.8 MWh a year, or 1,383 kWh per kWp at a performance ratio of 81%. That is about 9% below the PVGIS figure for the same orientation, mainly because Meteonorm has 14% less sunshine for Islamabad than PVGIS's ERA5 data. It uses HelioScope's default loss settings. Shading here is row to row only: the parapets and the trees on the east side are not modelled.

All files for this project on GitHub

Roof layout
1. Roof layout. The field segment on the roof: 198 modules at 20° tilt and 146° azimuth, capped at 114.84 kWp, with each roof edge measured in metres
Wiring and inverter
2. Wiring and inverter. One Huawei 100 kW inverter and 11 strings of 18 modules on 6 mm² copper. The lines on the roof show how HelioScope routed the strings
Production report
3. Production report. 158.8 MWh a year, 1,382.5 kWh/kWp and a performance ratio of 81.3%, with production by month and the loss breakdown
Loss breakdown
4. Loss breakdown. Step by step from 1,576.5 kWh/m² of sunlight to 158,761 kWh sent to the grid: shading 3.6%, reflection 3.0%, soiling 2.0%, heat 4.9%, mismatch 3.8% and the inverter 1.6%

Energy yield estimate

A Jupyter notebook that estimates how much energy the 115 kWp rooftop in Islamabad will produce each month and over a year. It takes the system size from the bill of materials, reads PVGIS solar data for the site (monthly averages for 2005 to 2023), and compares a simple estimate, system size x irradiation x a performance ratio of 0.80, with the PVGIS model.

The system should produce about 178,300 kWh a year, or 1,553 kWh per kWp, with May the best month and February the lowest. The simple estimate comes out 7% high: from May to August the modules run hot, and the performance ratio drops to 0.71 in May and June, so a flat 0.80 overstates the yield in Islamabad's climate. Written in Python with pandas and matplotlib; the 20° tilt follows the HelioScope design, while facing due south and 14% system losses are the model's assumptions. At the 146° azimuth the roof actually takes, PVGIS gives 1,526 kWh per kWp, about 175,300 kWh a year, so following the building costs 1.7%. HelioScope, on Meteonorm weather, gives a lower 1,383 kWh per kWp for the same layout; the gap is the weather data.

The hourly battery model for the 79 kWp PV and 63 kWh battery design study is plain Python too: 8,760 hours of PV, load, grid import and state of charge, with three control jobs in priority order. It is explained in the AutoCAD project, and the code is on GitHub.

Download the notebook (.ipynb) and the PVGIS data (.csv) to run it yourself.

All files for this project on GitHub

System size and data
1. System size and data. 198 modules of 580 W give 114.84 kWp, and pandas reads the PVGIS monthly irradiation and energy per kWp for Islamabad from a CSV file
Energy per month and year
2. Energy per month and year. New columns for the simple estimate, the PVGIS model and each month's performance ratio, then the totals for the year: 178,296 kWh, or 1,553 kWh per kWp
Monthly energy chart
3. Monthly energy chart. A matplotlib bar chart of the PVGIS model, with the simple estimate as a line. The gap opens up in the hot months