@@ -34,6 +34,54 @@ var columnRelativeToVisibleDomain
3434 return columnRelativeToVisibleDomain ;
3535 }
3636
37+ /// <summary>
38+ /// Creates a projection that returns the percentage of the visible time consumed by this
39+ /// <see cref="TimeRange"/>.
40+ /// </summary>
41+ /// <param name="timeRangeColumn">
42+ /// Time range.
43+ /// </param>
44+ /// <returns>
45+ /// Percent of time consumed by the given time range in a given visible domain.
46+ /// </returns>
47+ public static IProjection < int , double > Create (
48+ IProjection < int , TimeRange > timeRangeColumn )
49+ {
50+ Guard . NotNull ( timeRangeColumn , nameof ( timeRangeColumn ) ) ;
51+
52+ var aggregateRowsInVisibleDomainColumn
53+ = Projection . AggregateInVisibleDomain < TimeRange , TimestampDelta > ( timeRangeColumn ) ;
54+
55+ var columnRelativeToVisibleDomain
56+ = Percent . Create ( timeRangeColumn . Compose ( timeRange => timeRange . Duration ) , aggregateRowsInVisibleDomainColumn ) ;
57+
58+ return columnRelativeToVisibleDomain ;
59+ }
60+
61+ /// <summary>
62+ /// Creates a projection that returns the percentage of the visible time consumed by this
63+ /// <see cref="ResourceTimeRange"/>.
64+ /// </summary>
65+ /// <param name="resourceTimeRangeColumn">
66+ /// Resource time range.
67+ /// </param>
68+ /// <returns>
69+ /// Percent of time consumed by the given resource time range in a given visible domain.
70+ /// </returns>
71+ public static IProjection < int , double > Create (
72+ IProjection < int , ResourceTimeRange > resourceTimeRangeColumn )
73+ {
74+ Guard . NotNull ( resourceTimeRangeColumn , nameof ( resourceTimeRangeColumn ) ) ;
75+
76+ var aggregateRowsInVisibleDomainColumn
77+ = Projection . AggregateInVisibleDomain < ResourceTimeRange , TimestampDelta > ( resourceTimeRangeColumn ) ;
78+
79+ var columnRelativeToVisibleDomain
80+ = Percent . Create ( resourceTimeRangeColumn . Compose ( resourceTimeRange => resourceTimeRange . Duration ) , aggregateRowsInVisibleDomainColumn ) ;
81+
82+ return columnRelativeToVisibleDomain ;
83+ }
84+
3785 /// <summary>
3886 /// Creates a projection that maps a percentage relative to an entire domain to a percentage
3987 /// relative to the current visible domain.
0 commit comments