Power BI Developer Guide

FPMS Visuals Catalog — built directly from SQL outputs

Every visual below is generated from one of the 13 SQL view outputs you shared, and now ships with a sample on-card preview so reviewers can see the intended Power BI tile before it is built. Each card lists the source view, the Power BI visual type, the fields to drop onto each well, and the exact build steps — using only standard visuals (no marketplace, Python, R, or Deneb). Visual rules follow §11 of the FPMS PBI Design Spec: one ranking truth per page, DataCoverageStatus = 'VALID' filter shells, and no DAX re-ranking on top of SQLFleetEfficiencyRank.

13
Source views
67
Visuals catalogued
14
With DAX measures
33
Executive-grade
SOURCE

HIMS_IQ_FPMS_ShipEfficiencyRanking_FullCoverage

File · HIMS_IQ_FPMS_ShipEfficiencyRanking_FullCoverage.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast (full fleet coverage incl. UNAVAILABLE)  ·  Rows · 90

ShipCodeVesselNameShipTypeLadenBallastBenchmarkEfficiencyRankRelativeEfficiencyPctEfficiencyClassCurrentDeviationPct+7 more

Fleet Efficiency Ranking (Bar)

Compare every vessel's Benchmark Efficiency Rank within Laden / Ballast.

Executive
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · RelativeEfficiencyPctY · VesselNameLegend · EfficiencyClass
Filters
  • LadenBallast = L (page-level slicer)
  • DataCoverageStatus = VALID
Build steps (Power BI)
  1. Insert → Clustered bar chart.
  2. Y-axis: VesselName · X-axis: RelativeEfficiencyPct.
  3. Legend: EfficiencyClass (TOP / ABOVE_AVG / AVERAGE / BELOW_AVG / BOTTOM).
  4. Sort by BenchmarkEfficiencyRank ascending.
  5. Conditional format data colors → categorical map by EfficiencyClass.
  6. Add reference line at 0% (fleet avg).
  7. Tooltips: BenchmarkQuality, MaturedThroughYear, PredictionReliabilityScore.
Tooltips: BenchmarkEfficiencyRank · BenchmarkQuality · MaturedThroughYear

Ranking Matrix · Benchmark vs Monitor

Cross-check who ranks well on benchmark but poorly on monitor (and vice versa).

Analyst
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix
MatrixBenchmarkEfficiencyRankRelativeEfficiencyPctMonitorDeviationRank_ByModeCurrentDeviationPctRolling90DayUnifiedEfficiencyBand
Filters
  • LadenBallast slicer
Build steps (Power BI)
  1. Insert → Matrix.
  2. Rows: VesselName · Columns: (none) · Values listed above.
  3. Conditional format: data bars on RelativeEfficiencyPct and CurrentDeviationPct.
  4. Icons on Rolling90DayUnifiedEfficiencyBand (Green / Amber / Red).
  5. Add a calculated column RankGap = BenchmarkEfficiencyRank − MonitorDeviationRank_ByMode and color the cell.
DAX
Rank Gap = Ranking[BenchmarkEfficiencyRank] - Ranking[MonitorDeviationRank_ByMode]

Benchmark Efficiency vs Current Deviation (Scatter)

Spot the four quadrants: efficient & stable, efficient & drifting, weak & stable, weak & drifting.

Executive
Speed →
Sample preview · Scatter Chart
Scatter ChartX · RelativeEfficiencyPctY · CurrentDeviationPctLegend · ShipTypeVesselName (Details)
Build steps (Power BI)
  1. Insert → Scatter.
  2. Details: VesselName · X: RelativeEfficiencyPct · Y: CurrentDeviationPct.
  3. Size: PredictionReliabilityScore · Legend: ShipType.
  4. Add X reference line at 0 (fleet avg) and Y reference line at 0 (matching benchmark).
  5. Use Analytics pane → median lines for both axes to draw quadrants.
Tooltips: FinalActionRecommendation · PrimaryReasonCode · MaturedThroughYear

Efficiency Class Distribution (Donut)

% of fleet in TOP / ABOVE / AVERAGE / BELOW / BOTTOM.

Executive
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · EfficiencyClassDistinct count of ShipCode
Filters
  • LadenBallast slicer
Build steps (Power BI)
  1. Insert → Donut.
  2. Legend: EfficiencyClass · Values: ShipCode (Count distinct).
  3. Detail labels: Category, percent of total.

Action Recommendation Table

Operations-ready action list with reason code.

Operations
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Table
TableVesselNameLadenBallastFinalActionRecommendationPrimaryReasonCodeDaysSinceLatestHullCleaningCurrentDeviationPctRankingCoverageStatus
Build steps (Power BI)
  1. Insert → Table.
  2. Sort by CurrentDeviationPct descending.
  3. Conditional format icon on PrimaryReasonCode and color FinalActionRecommendation.
  4. Filter pane: RankingCoverageStatus = FULL_RANK_AVAILABLE.

Data Coverage Funnel

Show how many vessels drop out at each gate (benchmark → monitor → ranking).

Data Quality
LadenBallast
Sample preview · Funnel Chart
Funnel ChartCount of ShipCode at each stage
Build steps (Power BI)
  1. Build measures (below) and place on a Funnel chart in stage order.
DAX
Stage1 Total Vessels = DISTINCTCOUNT(Ranking[ShipCode])
Stage2 Benchmark Available = CALCULATE([Stage1 Total Vessels], Ranking[BenchmarkAvailable]="YES")
Stage3 Monitor Covered = CALCULATE([Stage1 Total Vessels], Ranking[MonitorCoveragePct] > 0)
Stage4 Full Rank = CALCULATE([Stage1 Total Vessels], Ranking[RankingCoverageStatus]="FULL_RANK_AVAILABLE")
SOURCE

HIMS_IQ_FPMS_ShipDecisionTable

File · HIMS_IQ_FPMS_ShipDecisionTable.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast (decision-grade summary)  ·  Rows · 90

FinalActionRecommendationPrimaryReasonCodeRollingOperationalEfficiencyIndexMonitorCoveragePctSignConsistencyPctYoYTrendHullCleaningBenefitPctLifecycleAvgDaysSinceLatestHullCleaning

Recommendation Treemap

Show fleet split by FinalActionRecommendation, sized by count.

Executive
Voyage hotspots
Sample preview · Treemap
TreemapLegend · FinalActionRecommendationCount of ShipCode
Build steps (Power BI)
  1. Insert → Treemap.
  2. Group: FinalActionRecommendation · Details: PrimaryReasonCode · Values: Count of ShipCode.
  3. Color by FinalActionRecommendation (red = ACTION, amber = INVESTIGATE, green = MONITOR).

Decision KPI Cards

Headline counts at the top of the page.

Executive
$4.21MANNUAL FUEL LOSS · ROLLING 90D▲ 7.4% vs prior 90dTarget $3.0M
Sample preview · Card (multi-row)
Card (multi-row)VesselsAction %Avg ROEIAvg Sign Consistency
Build steps (Power BI)
  1. Use measures below in a multi-row card.
DAX
Vessels = DISTINCTCOUNT(Decision[ShipCode])
Action Count = CALCULATE([Vessels], Decision[FinalActionRecommendation]="ACTION_REQUIRED")
Action % = DIVIDE([Action Count],[Vessels])
Avg ROEI = AVERAGE(Decision[RollingOperationalEfficiencyIndex])
Avg Sign Consistency = AVERAGE(Decision[SignConsistencyPct])

Deviation vs Hull-Cleaning Recency (Quadrant)

Identify vessels overdue for cleaning that are also drifting.

Operations
Speed →
Sample preview · Scatter Chart
Scatter ChartX · DaysSinceLatestHullCleaningY · CurrentDeviationPctLegend · FinalActionRecommendationVesselName
Build steps (Power BI)
  1. Scatter with reference line X = 180 days and Y = 5%.
  2. Quadrant top-right = priority cleaning candidates.

YoY Trend Distribution (Stacked Column)

How many vessels are IMPROVING / FLAT / DEGRADING per ShipType.

Executive
LadenBallast
Sample preview · Stacked Column Chart
Stacked Column ChartX · ShipTypeLegend · YoYTrendCount of ShipCode
Build steps (Power BI)
  1. Drag fields as listed; sort legend manually (IMPROVING, FLAT, DEGRADING).

Prediction Reliability Heatmap

Matrix of vessels × reliability score colored by validation status.

Data Quality
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix (conditional formatting)
Matrix (conditional formatting)PredictionReliabilityScore
Build steps (Power BI)
  1. Rows: VesselName · Columns: LadenBallast · Values: PredictionReliabilityScore.
  2. Conditional format background by value (0–40 red, 40–70 amber, 70–100 green).
SOURCE

HIMS_IQ_FPMS_RelativeEfficiencyIndex_FullCoverage

File · HIMS_IQ_FPMS_RelativeEfficiencyIndex_FullCoverage.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast (full coverage with DataCoverageStatus)  ·  Rows · 90

RelativeEfficiencyIndexRelativeEfficiencyPctAvgNormalizedConsumptionMtPerDayFleetAvgNormalizedConsumptionMtPerDayBenchmarkEfficiencyRankBenchmarkEfficiencyClassREISpeedRangeFromREISpeedRangeTo

REI Tornado (% better/worse than fleet)

Diverging bar showing each vessel's RelativeEfficiencyPct vs fleet (0%).

Executive
LadenBallast
Sample preview · Clustered Bar Chart (diverging)
Clustered Bar Chart (diverging)X · RelativeEfficiencyPctY · VesselNameLegend · BenchmarkEfficiencyClass
Build steps (Power BI)
  1. Bar chart sorted by RelativeEfficiencyPct ascending.
  2. Add reference line at 0.
  3. Use conditional data colors: positive = green, negative = red.
  4. Filter DataCoverageStatus = VALID.
DAX
REI Color = IF(SELECTEDVALUE(REI[RelativeEfficiencyPct]) >= 0, "#2BB673", "#E2483D")

Normalized Consumption vs Speed Range

Where each vessel sits relative to fleet average on its used speed window.

Analyst
Speed →
Sample preview · Scatter Chart
Scatter ChartX · REISpeedRangeFromY · AvgNormalizedConsumptionMtPerDayLegend · ShipTypeVesselName
Build steps (Power BI)
  1. Plot one dot per vessel; size = SampleCount_Consumption.
  2. Add Y reference line = FleetAvgNormalizedConsumptionMtPerDay (use a measure with CALCULATE / ALL).
DAX
Fleet Norm Cons = CALCULATE(AVERAGE(REI[FleetAvgNormalizedConsumptionMtPerDay]), ALL(REI))

Efficiency Class Heat Strip

Compact strip showing every vessel as a colored block, sorted by rank.

Executive
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix with single row + conditional formatting
Matrix with single row + conditional formattingRelativeEfficiencyPct
Build steps (Power BI)
  1. Matrix: Columns = VesselName, Values = RelativeEfficiencyPct.
  2. Sort Columns by BenchmarkEfficiencyRank.
  3. Background color formatting: diverging red→white→green centered at 0.

Coverage KPI Strip

Tell management 'X of 45 vessels have a valid REI'.

Data Quality
$4.21MANNUAL FUEL LOSS · ROLLING 90D▲ 7.4% vs prior 90dTarget $3.0M
Sample preview · Multi-row Card
Multi-row CardValid REI VesselsUnavailableAvg R² (where available)
Build steps (Power BI)
  1. Use the FullCoverage view; build measures filtering on DataCoverageStatus.
DAX
Valid REI Vessels = CALCULATE(DISTINCTCOUNT(REI[ShipCode]), REI[DataCoverageStatus]="VALID")
Unavailable = CALCULATE(DISTINCTCOUNT(REI[ShipCode]), REI[DataCoverageStatus]<>"VALID")
SOURCE

HIMS_IQ_FPMS_FuelLossForecastSummary_FullCoverage

File · HIMS_IQ_FPMS_FuelLossForecastSummary_FullCoverage.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast (forecast extra fuel/USD)  ·  Rows · 90

TotalForecastExtraFuelMtTotalForecastExtraFuelUSDForecastStartDateForecastEndDateForecastResetReasonMaturedThroughYearDataCoverageStatus

Forecast Loss Headline Cards

Total expected extra fuel (MT) and USD across fleet for the horizon.

Executive
$4.21MANNUAL FUEL LOSS · ROLLING 90D▲ 7.4% vs prior 90dTarget $3.0M
Sample preview · Card
CardTotal Forecast Extra Fuel (MT)Total Forecast Loss (USD)Vessels in Forecast
Build steps (Power BI)
  1. Use sum measures filtered by DataCoverageStatus = VALID.
DAX
Total Extra Fuel MT = CALCULATE(SUM(Forecast[TotalForecastExtraFuelMt]), Forecast[DataCoverageStatus]="VALID")
Total Forecast USD = CALCULATE(SUM(Forecast[TotalForecastExtraFuelUSD]), Forecast[DataCoverageStatus]="VALID")

Top 10 Loss Contributors

Identify worst-case vessels for the planning horizon.

Executive
LadenBallast
Sample preview · Clustered Bar Chart with TopN filter
Clustered Bar Chart with TopN filterX · TotalForecastExtraFuelUSDY · VesselNameLegend · LadenBallast
Filters
  • Top N = 10 by TotalForecastExtraFuelUSD
Build steps (Power BI)
  1. Insert bar chart, apply Visual-level filter Top N = 10 on TotalForecastExtraFuelUSD.
  2. Data labels formatted as $#,##0.
  3. Drill-through enabled on VesselName → Vessel detail page.

Forecast Reset Reason Breakdown

Show why each forecast was reset (hull cleaning, profile change, etc.).

Analyst
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · ForecastResetReasonCount of ShipCode
Build steps (Power BI)
  1. Donut, legend = ForecastResetReason, values = count distinct ShipCode.

Forecast Window Gantt

See each vessel's forecast horizon visually.

Analyst
LadenBallast
Sample preview · Stacked Bar Chart (acting as Gantt)
Stacked Bar Chart (acting as Gantt)X · ForecastDaysAvailableY · VesselName
Build steps (Power BI)
  1. Create measure DaysToStart = DATEDIFF(TODAY(), ForecastStartDate, DAY).
  2. Stacked bar: invisible series 'DaysToStart' first, then 'ForecastDaysAvailable' colored.
  3. Sort by ForecastStartDate.
DAX
Days To Start = DATEDIFF(TODAY(), MAX(Forecast[ForecastStartDate]), DAY)

Forecast Loss by Drydock Maturity

Group by MaturedThroughYear (Y1..Y5) to see lifecycle pattern.

Analyst
LadenBallast
Sample preview · Clustered Column Chart
Clustered Column ChartX · MaturedThroughYearY · SUM(TotalForecastExtraFuelUSD)Legend · LadenBallast
Build steps (Power BI)
  1. Column chart by MaturedThroughYear, legend LadenBallast.
SOURCE

HIMS_IQ_FPMS_HullCleaningImpact

File · HIMS_IQ_FPMS_HullCleaningImpact.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast × HullCleaningSequence  ·  Rows · 64

HullCleaningDateHullCleaningBenefitPctPreCleaningDeviationPctPostCleaningDeviationPctHullCleaningImpactStatusEventDetectionMethod

Pre vs Post Cleaning Deviation (Dumbbell)

Visualize improvement per event.

Analyst
LadenBallast
Sample preview · Clustered Bar Chart (two series acting as dumbbell)
Clustered Bar Chart (two series acting as dumbbell)X · Deviation %Y · VesselName & HullCleaningDateLegend · Pre / Post
Build steps (Power BI)
  1. Unpivot PreCleaningDeviationPct and PostCleaningDeviationPct in Power Query → columns become 'Phase' + 'Value'.
  2. Clustered bar by ShipCode+Date with legend = Phase.
  3. Sort descending by HullCleaningBenefitPct.

Benefit % by Vessel (Waterfall-style Bar)

Rank cleaning events by % benefit.

Executive
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · HullCleaningBenefitPctY · VesselName + HullCleaningDate
Filters
  • HullCleaningImpactStatus = IMPROVED_AFTER_CLEANING
Build steps (Power BI)
  1. Filter to IMPROVED_AFTER_CLEANING only.
  2. Bar sorted descending; data labels = HullCleaningBenefitPct %.

Impact Status Mix

Cleaning events grouped by outcome (improved / insufficient data / no change).

Data Quality
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · HullCleaningImpactStatusCount of events
Build steps (Power BI)
  1. Donut chart; legend = HullCleaningImpactStatus.

Cleaning Events Timeline

Show event distribution over time and detection method.

Operations
Speed →
Sample preview · Scatter Chart
Scatter ChartX · HullCleaningDateY · VesselNameLegend · EventDetectionMethod
Build steps (Power BI)
  1. Scatter: X = HullCleaningDate, Y = VesselName.
  2. Color by EventDetectionMethod; size by HullCleaningBenefitPct.

Cleaning Sequence Effectiveness

Are repeat cleanings (#2, #3) delivering less benefit than first?

Analyst
LadenBallast
Sample preview · Clustered Column Chart
Clustered Column ChartX · HullCleaningSequenceY · AVERAGE(HullCleaningBenefitPct)
Build steps (Power BI)
  1. Column chart with X = HullCleaningSequence, Y = avg benefit %.
SOURCE

HIMS_IQ_FPMS_MasterPrediction_Canonical

File · HIMS_IQ_FPMS_MasterPrediction_Canonical.xlsx  ·  Grain · 1 row per report (ShipCode × Report_Date × VoyageNumber × LadenBallast)  ·  Rows · 5,760

Report_DateSpeedKnotsActualConsumptionMtPerDayPredictedConsumptionMtPerDayConsumptionDeviationPctISO_StatusPredictionStatusAnnualizedFuelLossUSD+3 more

Speed vs Consumption Timeseries (Actual vs Predicted)

Per-vessel timeseries with a vertical reference line at LastHullCleanDate.

Analyst
— forecast
Sample preview · Line Chart with reference line
Line Chart with reference lineX · Report_DateActualConsumptionMtPerDayPredictedConsumptionMtPerDay
Filters
  • VesselName slicer
  • LadenBallast slicer
Build steps (Power BI)
  1. Line chart; X-axis Report_Date (continuous).
  2. Two lines: Actual and Predicted.
  3. Analytics pane → add Constant line for hull-clean date. To make it dynamic, create measure HullCleanX = MAX(Master[LastHullCleanDate]) and use 'X-axis Constant Line' = measure.
  4. Drop SpeedKnots into a secondary line on the same chart (dual-axis) or as tooltip.
DAX
Hull Clean X = CALCULATE(MAX(Master[LastHullCleanDate]), ALLSELECTED(Master))
Tooltips: SpeedKnots · ISO_Status

Consumption Deviation % Trend

Track % deviation per report with a rolling 30-day average.

Analyst
— forecast
Sample preview · Line Chart
Line ChartX · Report_DateConsumptionDeviationPctRolling 30d Deviation
Build steps (Power BI)
  1. Insert line chart; values include the rolling measure below.
  2. Add Y reference line at 0%.
DAX
Rolling 30d Deviation = AVERAGEX(DATESINPERIOD('Date'[Date], MAX('Date'[Date]), -30, DAY), CALCULATE(AVERAGE(Master[ConsumptionDeviationPct])))

Speed-Bin Heatmap (Consumption Deviation)

See which speed bins have systemic positive deviation.

Analyst
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix (conditional formatting)
Matrix (conditional formatting)AVG ConsumptionDeviationPct
Build steps (Power BI)
  1. Matrix: Rows = VesselName · Columns = SpeedBin · Values = AVG(ConsumptionDeviationPct).
  2. Conditional format background diverging red↔green at 0%.

ISO 19030 Pass vs Fail by Vessel

Data-quality bar.

Data Quality
LadenBallast
Sample preview · 100% Stacked Column
100% Stacked ColumnX · VesselNameLegend · ISO_StatusCount of reports
Build steps (Power BI)
  1. 100% stacked column; legend ISO_Status.

ISO Fail Reason Pareto

Which fail reasons drive 80% of exclusions?

Data Quality
— forecast
Sample preview · Line and Stacked Column Chart
Line and Stacked Column ChartX · ISO_FailReasonCountCumulative %
Build steps (Power BI)
  1. Column: count of rows.
  2. Line: cumulative percentage measure.
  3. Sort by count descending.
DAX
Fail Count = CALCULATE(COUNTROWS(Master), Master[ISO_Status]="ISO_FAIL")

Nm/MT Actual vs Benchmark Timeseries

Efficiency view — higher is better.

Executive
— forecast
Sample preview · Line Chart
Line ChartX · Report_DateNmPerMt_Actual_RowNmPerMt_Benchmark_Row
Build steps (Power BI)
  1. Line chart with both metrics; add hull-cleaning vertical reference line.

Annualized Loss USD Stacked by Mode

How much loss is laden vs ballast.

Executive
— forecast
Sample preview · Stacked Area Chart
Stacked Area ChartX · Report_DateLegend · LadenBallastSUM(AnnualizedFuelLossUSD)
Build steps (Power BI)
  1. Stacked area chart; format Y as currency.

Steaming Hours by Month

Utilisation overlay (TimeHours summed by month) with hull-clean line.

Operations
LadenBallast
Sample preview · Column Chart
Column ChartX · Report_Date (Month)SUM(TimeHours)
Build steps (Power BI)
  1. Column chart with Report_Date grouped by month.
  2. Add Hull-clean reference line using the measure from mp-timeseries-cons.

Prediction Zone Distribution

How many reports are WITHIN_BENCHMARK_RANGE vs extrapolated.

Data Quality
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · PredictionZoneCount
Build steps (Power BI)
  1. Donut; legend = PredictionZone.
SOURCE

HIMS_IQ_FPMS_MonitorPredictionAccuracy_R2

File · HIMS_IQ_FPMS_MonitorPredictionAccuracy_R2.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast  ·  Rows · 90

MonitorPredictionR2_ConsumptionMonitorPredictionAccuracyClassMonitorSampleCountMonitorSSEMonitorSST

R² per Vessel (Bar)

Show predictive accuracy ranking.

Data Quality
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · MonitorPredictionR2_ConsumptionY · VesselNameLegend · MonitorPredictionAccuracyClass
Build steps (Power BI)
  1. Bar sorted descending by R².
  2. Reference lines at 0.5 and 0.8 (accuracy thresholds).

Monitor Accuracy Class Mix

Share of fleet in HIGH / MEDIUM / LOW accuracy.

Executive
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · MonitorPredictionAccuracyClassCount
Build steps (Power BI)
  1. Donut; legend MonitorPredictionAccuracyClass.

Sample Size vs R² (Scatter)

Are low-R² vessels under-sampled?

Analyst
Speed →
Sample preview · Scatter Chart
Scatter ChartX · MonitorSampleCountY · MonitorPredictionR2_ConsumptionVesselName
Build steps (Power BI)
  1. Scatter; reference line at R² = 0.5.
SOURCE

HIMS_IQ_FPMS_Vessel_NmPerMt_Forecast

File · HIMS_IQ_FPMS_Vessel_NmPerMt_Forecast.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast × PerformancePeriodType  ·  Rows · 64

NmPerMt_ActualNmPerMt_BenchmarkMtPerNm_ActualMtPerNm_BenchmarkTotalDistanceNMTotalFuelMT_ActualPerformancePeriodType

Nm/MT Actual vs Benchmark

Two-series bar per vessel; higher = better.

Executive
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · ValueY · VesselNameLegend · Metric (Actual / Benchmark)
Build steps (Power BI)
  1. Unpivot NmPerMt_Actual and NmPerMt_Benchmark in Power Query.
  2. Clustered bar; legend = Metric.

Period Type Comparison

Compare benchmark window vs monitor window per vessel.

Analyst
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix
MatrixNmPerMt_ActualNmPerMt_Benchmark
Build steps (Power BI)
  1. Rows: VesselName · Columns: PerformancePeriodType.
  2. Conditional bars on NmPerMt_Actual.

Distance vs Fuel (Bubble)

Total NM traveled vs total fuel — efficiency is the slope.

Executive
Speed →
Sample preview · Scatter Chart
Scatter ChartX · TotalDistanceNMY · TotalFuelMT_ActualLegend · ShipTypeVesselName
Build steps (Power BI)
  1. Scatter; size = QualifiedSourceRows.
  2. Add trend line via Analytics pane.
SOURCE

HIMS_IQ_FPMS_Vessel_Performance_KPI_Computed

File · HIMS_IQ_FPMS_Vessel_Performance_KPI_Computed.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast × CalendarYear × CalendarMonth (monthly KPI)  ·  Rows · 1,980

CalendarYearCalendarMonthPostDrydockYearAvgSpeedKnotsActualConsumptionMtPerDayBenchmarkConsumptionMtPerDayPredictedConsumptionMtPerDayVarianceVsBenchmarkPct+6 more

Monthly Actual vs Benchmark vs Predicted (Line)

Triple-line monthly trend per vessel — the canonical performance chart.

Analyst
— forecast
Sample preview · Line Chart
Line ChartX · YearMonth (from CalendarYear + CalendarMonth)ActualConsumptionMtPerDayBenchmarkConsumptionMtPerDayPredictedConsumptionMtPerDay
Filters
  • VesselName slicer
  • LadenBallast slicer
Build steps (Power BI)
  1. Power Query: add column YearMonth = #date([CalendarYear],[CalendarMonth],1).
  2. Insert Line chart; X-axis = YearMonth (continuous).
  3. Plot three series; lock colors (Actual red, Benchmark blue, Predicted amber).
  4. Add Analytics reference band between Benchmark and Predicted to show 'expected envelope'.

Variance vs Benchmark Heatmap (Vessel × Month)

One-glance fleet heatmap showing every vessel-month deviation.

Executive
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix (conditional formatting)
Matrix (conditional formatting)AVG VarianceVsBenchmarkPct
Build steps (Power BI)
  1. Matrix: Rows = VesselName, Columns = YearMonth, Values = AVG(VarianceVsBenchmarkPct).
  2. Conditional format diverging Red-White-Green centered at 0%.
  3. Disable subtotals; freeze first column.

Monthly Excess Fuel Cost (Stacked Column by Mode)

Track $ leak per month, split L vs B.

Executive
LadenBallast
Sample preview · Stacked Column Chart
Stacked Column ChartX · YearMonthLegend · LadenBallastSUM(ExcessFuelCostUSD)
Build steps (Power BI)
  1. Stacked column; format Y axis as currency.
  2. Add data labels on totals only.

Operational Efficiency Index Over Time

Track OEI trajectory per vessel against fleet average.

Analyst
— forecast
Sample preview · Line Chart
Line ChartX · YearMonthOperationalEfficiencyIndexFleet Avg OEI
Build steps (Power BI)
  1. Line chart per vessel.
  2. Add Fleet Avg OEI measure as second (dashed) line.
DAX
Fleet Avg OEI = CALCULATE(AVERAGE(KPI[OperationalEfficiencyIndex]), ALL(KPI[VesselName]))

Deviation by Post-Drydock Year

How fleet variance evolves Y1 to Y5 after drydock.

Executive
LadenBallast
Sample preview · Clustered Column Chart
Clustered Column ChartX · PostDrydockYearY · AVG VarianceVsBenchmarkPctLegend · ShipType
Build steps (Power BI)
  1. Column chart by PostDrydockYear; legend ShipType.
  2. Add error bars via Analytics (Std Dev).

Speed vs Consumption Scatter (Monthly Points)

Cloud of monthly points around the benchmark curve.

Analyst
Speed →
Sample preview · Scatter Chart
Scatter ChartX · AvgSpeedKnotsY · ActualConsumptionMtPerDayLegend · LadenBallastVesselName + YearMonth
Build steps (Power BI)
  1. Scatter chart; size = TotalTimeHours.
  2. Add trend line per Legend value.

Unified Efficiency Band — Vessel Months

Stacked area of vessel-months in GREEN / AMBER / RED.

Executive
— forecast
Sample preview · Stacked Area Chart
Stacked Area ChartX · YearMonthLegend · UnifiedEfficiencyBandCount of rows
Build steps (Power BI)
  1. Stacked area chart; lock band colors (Green / Amber / Red).
SOURCE

HIMS_IQ_FPMS_Vessel_Performance_KPI_Forecast

File · HIMS_IQ_FPMS_Vessel_Performance_KPI_Forecast.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast × CalendarYear × CalendarMonth (forward months)  ·  Rows · 830

KPIDataTypeCalendarYearCalendarMonthAvgSpeedKnotsPredictedConsumptionMtPerDayBenchmarkConsumptionMtPerDayExcessFuelMTExcessFuelCostUSD+1 more

Actual + Forecast Continuum (Line)

Append Computed (history) and Forecast (future) into a single timeline.

Executive
— forecast
Sample preview · Line Chart
Line ChartX · YearMonthLegend · KPIDataTypeActualConsumptionMtPerDayPredictedConsumptionMtPerDay
Build steps (Power BI)
  1. Power Query: Append KPI_Computed and KPI_Forecast (both have KPIDataType column).
  2. Line chart split by KPIDataType so forecast renders dashed.
  3. Add vertical reference line at MAX(Computed YearMonth) labelled 'Today'.
DAX
Cutover Date = CALCULATE(MAX(KPI[YearMonth]), KPI[KPIDataType]="COMPUTED")

Forecast Excess Cost — Next 12 Months

Stacked column showing forward $ exposure per vessel.

Executive
LadenBallast
Sample preview · Stacked Column Chart
Stacked Column ChartX · YearMonthLegend · VesselNameSUM(ExcessFuelCostUSD)
Filters
  • KPIDataType = FORECAST
  • YearMonth <= TODAY + 12 months
Build steps (Power BI)
  1. Stacked column; Top N filter on VesselName by SUM(ExcessFuelCostUSD).
  2. Currency format on values.

Forecast Reliability vs Predicted Loss

High-cost forecasts with low reliability deserve scrutiny.

Data Quality
Speed →
Sample preview · Scatter Chart
Scatter ChartX · PredictionReliabilityScoreY · SUM(ExcessFuelCostUSD)Legend · LadenBallastVesselName
Build steps (Power BI)
  1. Scatter; reference lines at reliability=70 and a configurable USD threshold.

Forecast Mode Mix (Laden vs Ballast)

Donut of forecasted excess cost by mode.

Executive
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · LadenBallastSUM(ExcessFuelCostUSD)
Build steps (Power BI)
  1. Donut; values formatted as currency.
SOURCE

HIMS_IQ_FPMS_YoY_Performance_FullCoverage

File · HIMS_IQ_FPMS_YoY_Performance_FullCoverage.xlsx  ·  Grain · 1 row per ShipCode × LadenBallast × PostDrydockYear  ·  Rows · 360

PostDrydockYearAvgActualConsumptionMtPerDayAvgConsumptionDeviationPctExcessFuelMTExcessFuelCostUSDPreviousYearDeviationPctYoYDeviationChangePctYoYTrend+1 more

Deviation Trajectory by Drydock Year

AvgConsumptionDeviationPct across Y1 to Y5 per vessel.

Analyst
— forecast
Sample preview · Line Chart with Small Multiples
Line Chart with Small MultiplesX · PostDrydockYearY · AvgConsumptionDeviationPctLegend · VesselName
Build steps (Power BI)
  1. Line chart; X = PostDrydockYear (integer axis).
  2. Use small multiples (Format pane) for clarity.

YoY Deviation Change % (Diverging Bar)

Worst degraders at top, biggest improvers at bottom.

Executive
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · YoYDeviationChangePctY · VesselName + YearLegend · YoYTrend
Build steps (Power BI)
  1. Bar sorted descending by YoYDeviationChangePct.
  2. Color by YoYTrend (DEGRADING red, FLAT grey, IMPROVING green).

Fleet YoY Trend Mix

% of vessel-years improving vs degrading.

Executive
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · YoYTrendCount
Build steps (Power BI)
  1. Donut by YoYTrend.

Cumulative Excess Cost by Drydock Year

How $ leak compounds across the lifecycle.

Executive
— forecast
Sample preview · Stacked Area Chart
Stacked Area ChartX · PostDrydockYearLegend · ShipTypeSUM(ExcessFuelCostUSD)
Build steps (Power BI)
  1. Stacked area by ShipType.

YoY Variance Status Matrix

Which vessels are flagged in which year.

Data Quality
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Matrix
MatrixYoYVarianceStatus
Build steps (Power BI)
  1. Rows = VesselName, Columns = PostDrydockYear, Values = YoYVarianceStatus.
  2. Conditional format icons (check / warn / cross).
SOURCE

HIMS_IQ_FPMS_Fleet_Ranking_FullCoverage (variants: _Computed, _Materialize, Export_*)

File · HIMS_IQ_FPMS_Fleet_Ranking_FullCoverage.xlsx (+ 4 sibling variants)  ·  Grain · 1 row per ShipCode × LadenBallast × KPIDataType  ·  Rows · 180

KPIDataTypeOperationalEfficiencyIndexSimpleAvgOperationalEfficiencyIndexAvgVarianceVsBenchmarkPctTotalExcessFuelMTTotalExcessFuelCostUSDBenchmarkRelativeEfficiencyIndexBenchmarkEfficiencyRank+7 more

Fleet Leaderboard Table

Sortable league table — the executive home page.

Executive
ShipY1Y2Y3Y4Y5QM-4QM-8QM-12QM-16QM-20
Sample preview · Table
TableFleetEfficiencyRankVesselNameShipTypeLadenBallastOperationalEfficiencyIndexAvgVarianceVsBenchmarkPctTotalExcessFuelCostUSDFleetPerformanceCategory
Filters
  • KPIDataType slicer (COMPUTED vs FORECAST)
  • ShipType slicer
Build steps (Power BI)
  1. Insert Table visual.
  2. Sort by FleetEfficiencyRank ascending.
  3. Data bars on OperationalEfficiencyIndex and AvgVarianceVsBenchmarkPct.
  4. Icons on FleetPerformanceCategory.
  5. Format TotalExcessFuelCostUSD as $#,##0.

Rank by Ship Type (Small Multiples Bar)

Compare QMAX vs QFLEX leaderboards side by side.

Executive
LadenBallast
Sample preview · Clustered Bar Chart with small multiples
Clustered Bar Chart with small multiplesX · OperationalEfficiencyIndexY · VesselNameLegend · BenchmarkEfficiencyClass
Build steps (Power BI)
  1. Bar chart; Small multiples = ShipType.
  2. Sort by FleetEfficiencyRank_ByShipType ascending.

Cost Impact Rank vs Efficiency Rank (Scatter)

Spot vessels that are efficient yet costly (high utilisation) and vice versa.

Analyst
Speed →
Sample preview · Scatter Chart
Scatter ChartX · FleetEfficiencyRankY · CostImpactRankLegend · ShipTypeVesselName
Build steps (Power BI)
  1. Scatter with both axes reversed (lower rank = better).
  2. Add a 45° reference line.

FleetPerformanceCategory Treemap

Share of fleet in each performance category.

Executive
Voyage hotspots
Sample preview · Treemap
TreemapLegend · FleetPerformanceCategoryCount of ShipCode
Build steps (Power BI)
  1. Treemap; details = VesselName.

Unified Efficiency Band by Ship Type

100% stacked column comparing band mix per ship class.

Executive
LadenBallast
Sample preview · 100% Stacked Column Chart
100% Stacked Column ChartX · ShipTypeLegend · UnifiedEfficiencyBandCount
Build steps (Power BI)
  1. 100% stacked column.

Coverage Reconciliation Cards (Materialize vs Computed)

Verify the materialized table matches the computed view.

Data Quality
$4.21MANNUAL FUEL LOSS · ROLLING 90D▲ 7.4% vs prior 90dTarget $3.0M
Sample preview · Multi-row Card
Multi-row CardVessels (Computed)Vessels (Materialize)Vessels (FullCoverage)
Build steps (Power BI)
  1. Load all three Fleet_Ranking variants as separate queries.
  2. Build measures using DISTINCTCOUNT against each loaded table.
  3. If they mismatch, raise a refresh alert via conditional formatting.
SOURCE

HIMS_IQ_FPMS_Fleet_Combined_Ranking_FullCoverage (variant: Export_*)

File · HIMS_IQ_FPMS_Fleet_Combined_Ranking_FullCoverage.xlsx (+ Export sibling)  ·  Grain · 1 row per ShipCode (modes combined into one OperatingModeScope)  ·  Rows · 45

OperatingModeScopeIncludedModeCountIncludedModesActualConsumptionMTBenchmarkConsumptionMTTotalExcessFuelMTTotalExcessFuelCostUSDOperationalEfficiencyIndex+4 more

Combined Fleet Ranking (Bar)

Single combined rank per vessel (L + B merged).

Executive
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · OperationalEfficiencyIndexY · VesselNameLegend · UnifiedEfficiencyBand
Build steps (Power BI)
  1. Bar chart sorted by CombinedFleetEfficiencyRank.
  2. Color by UnifiedEfficiencyBand.
  3. Data label format: 0.00.

Cost Impact Pareto

Which 20% of vessels drive 80% of cost?

Executive
— forecast
Sample preview · Line and Stacked Column Chart
Line and Stacked Column ChartX · VesselName (sorted by cost desc)TotalExcessFuelCostUSDCumulative %
Build steps (Power BI)
  1. Sort VesselName by TotalExcessFuelCostUSD descending.
  2. Column = TotalExcessFuelCostUSD.
  3. Line = cumulative % measure on secondary axis.
DAX
Cumulative Cost % = VAR _t = SUM(Combined[TotalExcessFuelCostUSD]) VAR _all = CALCULATE(SUM(Combined[TotalExcessFuelCostUSD]), ALLSELECTED(Combined)) VAR _running = CALCULATE(SUM(Combined[TotalExcessFuelCostUSD]), FILTER(ALLSELECTED(Combined), Combined[TotalExcessFuelCostUSD] >= _t)) RETURN DIVIDE(_running, _all)

Operating Mode Coverage

Which vessels have both L and B included vs only one mode.

Data Quality
LadenBallast
Sample preview · 100% Stacked Bar Chart
100% Stacked Bar ChartY · VesselNameLegend · IncludedModesIncludedModeCount
Build steps (Power BI)
  1. 100% stacked bar; legend IncludedModes (BOTH / L_ONLY / B_ONLY).

Actual vs Benchmark Fuel (Bar)

Two-bar comparison per vessel; gap = excess.

Analyst
LadenBallast
Sample preview · Clustered Bar Chart
Clustered Bar ChartX · MTY · VesselNameLegend · Metric
Build steps (Power BI)
  1. Power Query: unpivot ActualConsumptionMT and BenchmarkConsumptionMT.
  2. Clustered bar; legend = Metric.
  3. Add ExcessMT as a data label.

Unified Band Mix

Distribution of the combined unified band across the fleet.

Executive
28VESSELSEXCELLENT · 42%GOOD · 28%MODERATE · 18%WEAK · 12%
Sample preview · Donut Chart
Donut ChartLegend · UnifiedEfficiencyBandCount of ShipCode
Build steps (Power BI)
  1. Donut; legend UnifiedEfficiencyBand.

Repeatable build playbook

  1. In Power BI Desktop: Home → Get Data → Excel → load each HIMS_IQ_FPMS_*.xlsx sheet as its own query.
  2. Rename queries to match the SQL view name (no HIMS_IQ_FPMS_ prefix in the model).
  3. Mark ShipCode + LadenBallast as the relationship key across tables; create a Vessel dimension if you reuse VesselName/ShipType.
  4. Build a Date table (CALENDAR(MIN(Master[Report_Date]), MAX(Master[Report_Date]))) and mark it as the date table; relate it to Master[Report_Date].
  5. Page-level slicers everywhere: LadenBallast, ShipType, MaturedThroughYear, DataCoverageStatus.
  6. For every per-vessel chart, enable drill-through to a "Vessel Detail" page so the executive view collapses cleanly.
  7. Theme: use one dark theme JSON; categorical colors for EfficiencyClass / FinalActionRecommendation must be locked across all pages.

Send the next batch of SQL output files when ready — this catalog extends source-by-source without breaking the existing pages.