kit

Chart

Built revision v17.10.0

Phoenix
Topics

Human support

Bring a missing role, layout, or state, or a rendering against the standard, to the session working on kit. Name the package and the entry.

On Reports

Chart

Bookings by day, 1 to 30 April 2025: 430, up 37 on the previous period
Show as a table
DateBookingsPrevious periodChange
12
10
Up 2
15
13
Up 2
11
12
Down 1
14
12
Up 2
18
15
Up 3
9
8
Up 1
8
9
Down 1
13
11
Up 2
16
14
Up 2
17
15
Up 2
15
16
Down 1
19
17
Up 2
10
9
Up 1
7
8
Down 1
14
12
Up 2
16
15
Up 1
18
16
Up 2
20
18
Up 2
21
17
Up 4
11
10
Up 1
9
8
Up 1
15
14
Up 1
17
15
Up 2
19
16
Up 3
18
17
Up 1
22
19
Up 3
12
11
Up 1
10
9
Up 1
16
14
Up 2
8
13
Down 5
Hirers by week, 1 January to 31 March 2025: 89 new and 108 returning
Show as a table
DateNew hirersReturning hirers
3
5
6
7
4
6
7
8
5
6
8
9
6
8
9
10
7
9
5
7
8
9
10
11
9
10
2
3
Hire income by month, July 2024 to March 2025: £15,610.00
Show as a table
DateHire income
£1,240.00
£1,580.00
£1,910.00
£2,230.00
£2,050.00
£1,320.00
£1,470.00
£1,690.00
£2,120.00
Deposits held by month, July 2024 to March 2025: £5,720.00
Show as a table
DateDeposits held
£620.00
£700.00
£540.00
£810.00
£760.00
£480.00
£530.00
£590.00
£690.00
Bookings
430
Up 37 on the previous period
Show as a table
DateBookings
12
15
11
14
18
9
8
13
16
17
15
19
10
7
14
16
18
20
21
11
9
15
17
19
18
22
12
10
16
8
Cancellations by day, 1 to 30 April 2025: none

No cancellations in this period

Bookings by day, 1 to 30 April 2025:
Show as a table
Hire income by month, July 2024 to March 2025:
Show as a table
Deposits held by month, July 2024 to March 2025:
Show as a table
Source
<Kit.Phoenix.Roles.Chart.trend
  id="phoenix-chart-bookings"
  label="Bookings by day, 1 to 30 April 2025: 430, up 37 on the previous period"
  kind={:line}
  intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2025-04-01], ~D[2025-04-30]))}
  ongoing
  series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Bookings", values: Enum.map([12, 15, 11, 14, 18, 9, 8, 13, 16, 17, 15, 19, 10, 7, 14, 16, 18, 20, 21, 11, 9, 15, 17, 19, 18, 22, 12, 10, 16, 8], &Kit.Phoenix.Amount.count(reader(), &1))})}
  prior={%Kit.Phoenix.Roles.Chart.Series{name: "Previous period", values: Enum.map([10, 13, 12, 12, 15, 8, 9, 11, 14, 15, 16, 17, 9, 8, 12, 15, 16, 18, 17, 10, 8, 14, 15, 16, 17, 19, 11, 9, 14, 13], &Kit.Phoenix.Amount.count(reader(), &1))}}
  changes={Enum.map([2, 2, -1, 2, 3, 1, -1, 2, 2, 2, -1, 2, 1, -1, 2, 1, 2, 2, 4, 1, 1, 1, 2, 3, 1, 3, 1, 1, 2, -5], &if(&1 < 0, do: "Down #{-&1}", else: "Up #{&1}"))}
  empty="No bookings in this period"
/>
<Kit.Phoenix.Roles.Chart.trend
  id="phoenix-chart-hirers"
  label="Hirers by week, 1 January to 31 March 2025: 89 new and 108 returning"
  kind={:columns}
  intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2025-01-01], ~D[2025-03-31]))}
  series={Kit.Phoenix.Roles.Chart.Drawn.two(
    %Kit.Phoenix.Roles.Chart.Series{name: "New hirers", values: Enum.map([3, 6, 4, 7, 5, 8, 6, 9, 7, 5, 8, 10, 9, 2], &Kit.Phoenix.Amount.count(reader(), &1))},
    %Kit.Phoenix.Roles.Chart.Series{name: "Returning hirers", values: Enum.map([5, 7, 6, 8, 6, 9, 8, 10, 9, 7, 9, 11, 10, 3], &Kit.Phoenix.Amount.count(reader(), &1))}
  )}
  empty="No hirers in this period"
/>
<Kit.Phoenix.Roles.Chart.multiples id="phoenix-chart-income">
  <:trend
    label="Hire income by month, July 2024 to March 2025: £15,610.00"
    kind={:line}
    intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2024-07-01], ~D[2025-03-31]))}
    series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Hire income", values: Enum.map([1240, 1580, 1910, 2230, 2050, 1320, 1470, 1690, 2120], &Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, &1)))})}
    empty="No hire income in this period"
  />
  <:trend
    label="Deposits held by month, July 2024 to March 2025: £5,720.00"
    kind={:line}
    intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2024-07-01], ~D[2025-03-31]))}
    series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Deposits held", values: Enum.map([620, 700, 540, 810, 760, 480, 530, 590, 690], &Kit.Phoenix.Amount.money(reader(), Money.new(:GBP, &1)))})}
    empty="No deposits held in this period"
  />
</Kit.Phoenix.Roles.Chart.multiples>
<Kit.Phoenix.Roles.FactGroup.fact_group>
  <Kit.Phoenix.Roles.LabelledFact.labelled_fact supporting={[Kit.Phoenix.Supporting.line([Kit.Phoenix.Words.text("Up 37 on the previous period")])]}>
    <:name>Bookings</:name>
    <:value words={[Kit.Phoenix.Words.amount(Kit.Phoenix.Amount.count(reader(), 430))]} />
    <:spark>
      <Kit.Phoenix.Roles.Chart.spark
        id="phoenix-chart-bookings-spark"
        label="Bookings by day, 1 to 30 April 2025: 430, up 37 on the previous period"
        intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2025-04-01], ~D[2025-04-30]))}
        ongoing
        series={%Kit.Phoenix.Roles.Chart.Series{name: "Bookings", values: Enum.map([12, 15, 11, 14, 18, 9, 8, 13, 16, 17, 15, 19, 10, 7, 14, 16, 18, 20, 21, 11, 9, 15, 17, 19, 18, 22, 12, 10, 16, 8], &Kit.Phoenix.Amount.count(reader(), &1))}}
        empty="No bookings in this period"
      />
    </:spark>
  </Kit.Phoenix.Roles.LabelledFact.labelled_fact>
</Kit.Phoenix.Roles.FactGroup.fact_group>
<Kit.Phoenix.Roles.Chart.trend
  id="phoenix-chart-cancellations"
  label="Cancellations by day, 1 to 30 April 2025: none"
  kind={:line}
  intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2025-04-01], ~D[2025-04-30]))}
  series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Cancellations", values: []})}
  empty="No cancellations in this period"
/>
<Kit.Phoenix.Roles.Chart.trend
  id="phoenix-chart-loading"
  label="Bookings by day, 1 to 30 April 2025:"
  total
  change
  kind={:line}
  intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2025-04-01], ~D[2025-04-30]))}
  series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Bookings", values: []})}
  prior={%Kit.Phoenix.Roles.Chart.Series{name: "Previous period", values: []}}
  empty="No bookings in this period"
  loading={Kit.Phoenix.Loading.sentence("Bookings by day had not loaded.")}
/>
<Kit.Phoenix.Roles.Chart.multiples id="phoenix-chart-income-loading" loading={Kit.Phoenix.Loading.sentence("Hire income and deposits held had not loaded.")}>
  <:trend
    label="Hire income by month, July 2024 to March 2025:"
    kind={:line}
    intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2024-07-01], ~D[2025-03-31]))}
    series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Hire income", values: []})}
    total
    empty="No hire income in this period"
  />
  <:trend
    label="Deposits held by month, July 2024 to March 2025:"
    kind={:line}
    intervals={Kit.Phoenix.Time.intervals(Kit.Phoenix.Time.day_range(reader(), ~D[2024-07-01], ~D[2025-03-31]))}
    series={Kit.Phoenix.Roles.Chart.Drawn.one(%Kit.Phoenix.Roles.Chart.Series{name: "Deposits held", values: []})}
    total
    empty="No deposits held in this period"
  />
</Kit.Phoenix.Roles.Chart.multiples>