Q1 – Total Cost of the Project
PREFIX ci:
PREFIX cr:
SELECT DISTINCT ((ROUND(SUM(?unitPrice * ?quantity)* 100) / 100.0) AS ?totalPrice) WHERE { ?set cr:hasAssignment ?subject. ?subject a cr:CostItemToGeometryAssignment. ?subject cr:refParamQuantity ?quantity. ?subject cr:refCostItem ?costItem. ?costItem ci:unitPrice ?unitPrice. }
Q2 – Cost Based on Element
PREFIX ci:
PREFIX cr:
PREFIX ifc2x3:
PREFIX ifc42:
PREFIX exp:
SELECT ?label (SUM(?quantity) AS ?totalQuantity) ((ROUND(SUM(?unitPrice * ?quantity) * 100) / 100.0) AS ?totalPrice) ?ifcguid WHERE { ?subject a cr:CostItemToGeometryAssignment. ?subject cr:refParamQuantity ?quantity. ?subject cr:refCostItem ?costItem. ?subject cr:refGeometry ?element. ?costItem ci:unitPrice ?unitPrice. { ?element ifc42:name_IfcRoot/exp:hasString ?label. ?element ifc42:globalId_IfcRoot/exp:hasString ?ifcguid. } UNION { ?element ifc2x3:name_IfcRoot/exp:hasString ?label. ?element ifc2x3:globalId_IfcRoot/exp:hasString ?ifcguid. } } GROUP BY ?label ?ifcguid
Q3 – Labor Time Comparison Across Cost and Schedule Analyses
PREFIX cr:
PREFIX msproj:
PREFIX xsd:
PREFIX ci:
SELECT ?task ?taskResourceTime ?cost (MAX(?timeLabourResource) as ?costResourceTime) WHERE { ?taskToCostItemAssignment cr:refTask ?task . ?taskToCostItemAssignment cr:refCostItem ?cost . ?taskToGeometryAssignment cr:refTask ?task . ?taskToGeometryAssignment cr:refGeometry ?geometry . ?costToGeometryAssignment cr:refCostItem ?cost . ?costToGeometryAssignment cr:refGeometry ?geometry . ?costToGeometryAssignment cr:refParamQuantity ?quantity . ?costToResourceAssignment cr:refCostItem ?cost . ?costToResourceAssignment cr:refResource ?resource . ?resource a cr:LabourResource. ?costToResourceAssignment cr:refParamUtilizationFactor ?utilizationFactor. BIND(xsd:float(?quantity)*xsd:float(?utilizationFactor) as ?timeLabourResource) ?task msproj:duration ?durationTask . ?taskToResourceAssignment cr:refTask ?task . ?taskToResourceAssignment cr:refResource ?resourceTask . ?resourceTask a cr:LabourResource . ?taskToResourceAssignment cr:refParamUtilizationRate ?rate . BIND(IF(STRSTARTS(STR(?durationTask), "-"), -1, 1) AS ?coef) BIND(COALESCE(xsd:integer(REPLACE(STR(?durationTask), "^.*[A-Z](\\d+)D.*$", "$1")), 0) AS ?d) BIND(COALESCE(xsd:integer(REPLACE(STR(?durationTask), "^.*T(\\d+)H.*$", "$1")), 0) AS ?h) BIND(COALESCE(xsd:integer(REPLACE(STR(?durationTask), "^.*T(?:|.*[A-Z])(\\d+)M.*$", "$1")), 0) AS ?m) BIND(COALESCE(xsd:decimal(REPLACE(STR(?durationTask), "^.*T(?:|.*[A-Z])(\\d*\\.?\\d*)S.*$", "$1")), 0) AS ?s) BIND(?coef * ((((?d * 24 + ?h) * 60) + ?m) * 60 + ?s)/3600 AS ?totalDuration) BIND(?totalDuration*?rate AS ?taskResourceTime) } GROUP BY ?task ?taskResourceTime ?cost
Q4 – Amount of Resources Needed Next Week
PREFIX cr:
PREFIX msproj:
PREFIX xsd:
PREFIX ci:
PREFIX dtc:
PREFIX cterm:
SELECT (SUM(?materialQuantity) as ?totalqty) ?um ?materialType ?materialObject WHERE { ?task dtc:startTime ?start. ?task dtc:endTime ?end. ?taskToCostItemAssignment cr:refTask ?task . ?taskToCostItemAssignment cr:refCostItem ?cost . ?taskToGeometryAssignment cr:refTask ?task . ?taskToGeometryAssignment cr:refGeometry ?geometry . ?resource a cr:MaterialResource. ?resource cterm:hasObject ?materialObject. ?resource cterm:hasMaterial ?materialType. ?resource cr:hasUnit ?um. ?costToGeometryAssignment cr:refCostItem ?cost . ?costToGeometryAssignment cr:refGeometry ?geometry . ?costToGeometryAssignment cr:refParamQuantity ?calculatedQuantity . ?costToResourceAssignment cr:refCostItem ?cost . ?costToResourceAssignment cr:refResource ?resource . ?costToResourceAssignment cr:refParamUtilizationFactor ?utilizationFactor. BIND(xsd:float(?calculatedQuantity)*xsd:float(?utilizationFactor) as ?materialQuantity) FILTER (?start >= "2024-10-01T00:00:00"^^xsd:dateTime && ?start <= "2024-10-15T23:59:59"^^xsd:dateTime) } GROUP BY ?um ?materialType ?materialObject ORDER BY ?start