system.kanoa.operators.getOLEDataByCrew(assetId, startDate, endDate, attributionMode, output)
Returns one row per sch.crew with a schedule overlapping the range, rolling up OLE/POLE across every sch.operatorShiftAssignment row stamped with that crewId (at assetId or any descendant asset). Assignment rows with no crewId (individual, non-crew assignments) are rolled into their own "No Crew" row (crewId None) rather than excluded, so non-crew labor still gets a metrics row instead of silently vanishing from the report. Existing per-operator/per-assignment OLE functions (getOLEOperatorLeaderboard, getOLEDataByShift, etc.) are unaffected by this and keep returning every assignment regardless of crewId.
Parameters
assetId Integer: site/area to roll crews up under (crews scheduled at this asset or any descendant)
startDate String
endDate String
attributionMode String: 'EvenSplit' (default), 'FullCredit', or 'PrimaryOnly' - controls how counter
output is: split when multiple crew members are concurrently scheduled
Returns
oleData Dataset one row per crewId, metrics summed across every member's assignment row and
OLE/POLE recomputed once from the summed totals never averaged per-member ratios
Example
assetId = 4
startDate = system.date.parse("2026-09-01 00:00:00")
endDate = system.date.parse("2025-10-01 00:00:00")
attributionMode = 'EvenSplit'
data = system.kanoa.operators.getOLEDataByCrew(assetId, startDate, endDate, attributionMode)