Accounting view: show monthly hours, travel and absences per employee (1–31) using Calendar_layout

Hi,
I’m building an internal business app in Glide for time tracking, travel orders and absences.

I already have a generated calendar table (Calendar_layout) with these columns:

  • date
  • year
  • month_key (e.g. 202601)
  • month_day_key (e.g. 202601/15)
  • relations to:
    • date-calendar
  • lookup columns:
    • look_work_hours
    • look_commute
    • look_absence

My goal is to create an accounting view where a user with role “Accountant” can:

  1. Select a month (e.g. January 2026)
  2. Select an employee
  3. See a table for that month (1–31) showing per day:
  • worked hours
  • travel (km or yes/no)
  • absence type (sick, vacation, etc.)
  1. Also see monthly totals (sum of hours, sum of km, look-up absence days)

Right now I can show the calendar grid, but I’m struggling with:

  • Filtering Calendar_layout by selected employee

  • Linking the employee to all related Time_entries, Travel and Absences in the same daily grid

What is the best Glide pattern to?

Any best practice for building an accounting-style monthly timesheet (1–31 rows × multiple metrics) in Glide would be greatly appreciated.

Thank you!

1 Like

First question I would have here: Is there an absolute need to use Big Tables? It will limit your options, so you should know in advance before working more on it.

Secondly, do you need a Calendar_layout table like that? I think you can just have a date component writing to a user-specific column and filter based on that value?

Sorry for the confusion. This is actually my first real project in Glide, so I’m still learning the platform and its limitations.

At the time I started, I didn’t fully understand the differences between Big Tables and regular tables, and I wasn’t aware how much they can limit some options. I only learned about that after your comment.

The same applies to the Calendar_layout table. I created it as a workaround because I wasn’t yet familiar with using if-then-else columns and filtering directly from them. That’s why I built an extra calendar table to filter current month in layout.

You can read about some limitations here.

My suggestion is still the same, it’s unlikely you need to have a full Calendar_layout table. Just point 2 date components to 2 user-specific columns and filter/rollup your data based on that.

If the data you’re rolling up doesn’t need to scale much, you can use the normal table. Else, you’ll deal with the computation limitations that it has.

1 Like

My goal is to build an accounting timesheet view.
The accountant first selects an employee (e.g. Tomaž), then selects a month, and the app should display a full calendar from day 1 to day 31 for that employee.
For each day it should show:

  • worked hours
  • travel / commute
  • absence type
    And also include empty rows for days without any records, such as weekends and holidays.

This means the view must always show all calendar days of the selected month, even if there are no time entries for that day.
Example shown in the image

I was wondering what number of employees at your company are to submit an entry every working day. Have you checked the amount of rows your app is going to consume for this time tracking feature only?

  • 10 employees × 22 entries/month × 12 months = 2,640 rows/year (5-year projection 13,200 rows)

  • 50 employees × 22 entries/month × 12 months = 13,200 rows/year (5-year projection 66,000 rows)

  • 500 employees × 22 entries/month × 12 months = 132,000 rows/year (5-year projection

    660,000 rows)

Depending on the number of employees, we might need to use a high-scale data source for the time entry table.

1 Like

At the moment this is a small internal app. We currently have 2 employees, maybe 3–5 in the near future.
So we are talking about tens of rows per month, not thousands.

This is primarily for internal accounting and payroll, not a large-scale SaaS product.
That’s why correctness of rollups (hours, travel, absences) is more important for me than extreme scalability at this stage.

If in the future the company grows significantly, I understand that we may need to migrate the time entries to a Big Table or another high-scale data source.
For now, I am optimizing for accounting accuracy and full calendar reporting (1–31 days, including weekends and empty days).

1 Like

Very nice project.

I’m not sure, but I think the following video from Darren will be helpful.

In that case, I guess a calendar table is needed and the most straightforward way to do it. You just have to make sure the numbers you want to rollup are rollup-able (i.e either accepting the limitations of Big Tables and work around it, or change to normal tables).

Write the choice of employee and month (I guess it’s a combination of month and year) to user-specific columns, in a helper table with one row. This is where you can host the tab on the front end.

Cast them to the calendar table using single value columns, then do the queries to filter your other tables by those values. The query targeting other tables should be constructed like “employeeID is this row > single value chosen employeeID AND date is within this row > date”.

Finally, use rollups to calculate the total of these things, assuming they are numbers:

  • Worked hours
  • Travel/commute

Use a joined list to get the absence type.

Then on the front end, display a data grid targeting the calendar table, and filter by the row’s month is the same as single value chosen month.

Be careful with how you structure the time values though, I would suggest converting month values to numerical format.

1 Like

I’m having an issue with Relations in Glide and I can’t figure out why it behaves like this.

I have a Calendar table with a date column.
I also have another table where I relate records to the Calendar table using a Relation based on the same date value.

:backhand_index_pointing_right: The problem:
Relations are only recognized from January 13th onward.
Dates before 13.01.2026 do exist in the Daily_summaries, but the relation column stays empty for those rows.

I’ve already managed to set up the calendar and the filtering — the only thing missing is a solution to this issue.

It’s not a safe way to do relations.

You should have the “date” column as a datetime type first.

Then, convert the dates on both tables to a numeric format using a math column.

YEAR(D)*10^4 + MONTH(D)*10^2 + DAY(D)

With D being the Date.

And do the relation based on those numeric values.

1 Like