actual icon indicating copy to clipboard operation
actual copied to clipboard

[WIP] Custom Reports: Include current

Open carkom opened this issue 9 months ago • 6 comments

Testing an option to add/remove current interval to "live" ranges.

I still need to add a migration so that it can be saved as part of the report. Holding off on that right now as I don't want it to mess up anyone's budget file.

carkom avatar Apr 29 '24 21:04 carkom

Deploy Preview for actualbudget ready!

Name Link
Latest commit a3fcdb3edf9ba8e6fa1432da80d58822e46afb70
Latest deploy log https://app.netlify.com/sites/actualbudget/deploys/667087e7b6efbb000803c0f6
Deploy Preview https://deploy-preview-2684.demo.actualbudget.org
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

netlify[bot] avatar Apr 29 '24 21:04 netlify[bot]

Bundle Stats — desktop-client

Hey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle.

As this PR is updated, I'll keep you updated on how the bundle size is impacted.

Total

Files count Total bundle size % Changed
9 4.75 MB → 4.75 MB (+2 kB) +0.04%
Changeset
File Δ Size
src/components/reports/disabledList.ts 📈 +477 B (+13.89%) 3.35 kB → 3.82 kB
src/components/reports/getLiveRange.ts 📈 +94 B (+9.54%) 985 B → 1.05 kB
src/components/reports/ReportSidebar.tsx 📈 +929 B (+5.78%) 15.71 kB → 16.61 kB
home/runner/work/actual/actual/packages/loot-core/src/client/data-hooks/reports.ts 📈 +57 B (+4.82%) 1.16 kB → 1.21 kB
src/components/reports/reports/CustomReport.tsx 📈 +298 B (+1.49%) 19.52 kB → 19.81 kB
src/components/reports/ReportOptions.ts 📈 +82 B (+1.25%) 6.42 kB → 6.5 kB
home/runner/work/actual/actual/packages/loot-core/src/shared/months.ts 📈 +85 B (+1.10%) 7.53 kB → 7.61 kB
src/components/reports/reports/GetCardData.tsx 📈 +31 B (+0.72%) 4.2 kB → 4.23 kB
src/components/reports/reportRanges.ts 📉 -1 B (-0.03%) 2.8 kB → 2.8 kB
View detailed bundle breakdown

Added

No assets were added

Removed

No assets were removed

Bigger

Asset File Size % Changed
static/js/ReportRouter.js 1.23 MB → 1.23 MB (+1.87 kB) +0.15%
static/js/index.js 3.01 MB → 3.01 MB (+142 B) +0.00%

Smaller

No assets were smaller

Unchanged

Asset File Size % Changed
static/js/indexeddb-main-thread-worker-e59fee74.js 13.5 kB 0%
static/js/resize-observer.js 18.37 kB 0%
static/js/BackgroundImage.js 122.29 kB 0%
static/js/narrow.js 75.73 kB 0%
static/js/usePreviewTransactions.js 790 B 0%
static/js/AppliedFilters.js 20.25 kB 0%
static/js/wide.js 263.59 kB 0%

github-actions[bot] avatar Apr 29 '24 21:04 github-actions[bot]

Bundle Stats — loot-core

Hey there, this message comes from a GitHub action that helps you and reviewers to understand how these changes affect the size of this project's bundle.

As this PR is updated, I'll keep you updated on how the bundle size is impacted.

Total

Files count Total bundle size % Changed
1 1.13 MB → 1.13 MB (+140 B) +0.01%
Changeset
File Δ Size
packages/loot-core/src/server/reports/app.ts 📈 +131 B (+2.99%) 4.27 kB → 4.4 kB
packages/loot-core/src/shared/months.ts 📈 +89 B (+0.77%) 11.36 kB → 11.44 kB
packages/loot-core/src/server/aql/schema/index.ts 📈 +75 B (+0.53%) 13.9 kB → 13.97 kB
View detailed bundle breakdown

Added

No assets were added

Removed

No assets were removed

Bigger

Asset File Size % Changed
kcab.worker.js 1.13 MB → 1.13 MB (+140 B) +0.01%

Smaller

No assets were smaller

Unchanged

No assets were unchanged

github-actions[bot] avatar Apr 29 '24 21:04 github-actions[bot]

The 'current interval' controlled by the option is 'month' rather than what is defined by the interval option? if so I'd suggest renaming it to Include current month for clarity. e.g. interval is weekly, with a live range of last 3 months, this option toggles the 4 weeks starting this month. How it is now vs making it go by the interval option both makes sense to me (as the budgeting is monthly).

Noticed option is disabled when using a static range(makes obvious sense). Were you thinking to disable it for the interval + live ranges that it doesn't make sense for, or not worry about that?

Teprifer avatar Apr 30 '24 07:04 Teprifer

The 'current interval' controlled by the option is 'month' rather than what is defined by the interval option? if so I'd suggest renaming it to Include current month for clarity. e.g. interval is weekly, with a live range of last 3 months, this option toggles the 4 weeks starting this month. How it is now vs making it go by the interval option both makes sense to me (as the budgeting is monthly).

Noticed option is disabled when using a static range(makes obvious sense). Were you thinking to disable it for the interval + live ranges that it doesn't make sense for, or not worry about that?

It's not always monthly. It's based on the range interval. Example: choosing "Last week" and Interval = daily. The toggle would give you all the days from this week as well.

If we changed it to match the interval instead and you chose "last month" and interval = weekly. You'd see all 4 weeks of March. Select the new toggle and you'd get the 4th week of April - the first three weeks would be missing. Not sure that makes sense to ever have a view like that. Also, it makes the code needlessly complicated.

I see your point with labeling, because it's not actually "current interval". I've changed the wording to follow the "range" selection. So it says "Include current month" when a monthly range is chosen and "Include current week" when a weekly range is chosen.

carkom avatar Apr 30 '24 08:04 carkom

Ah! I see where I was getting confused, thanks. :) (there was an extra layer of misunderstanding on my part too)

Teprifer avatar May 01 '24 05:05 Teprifer

@Teprifer, can you check this meets your expectations?

Make sure to only use a copied budget file or a test file as the migration in this PR will cause the budget file to not work with edge.

carkom avatar May 22 '24 08:05 carkom

Awww <3

Yeah I always test in a browser data cleared chrome window with a freshly exported budget.

  • Year to Date, includes up to current date regardless of the include current option setting. Not sure this is incorrect, since by definition 'to date' means, well, to the current day. But also there's the option to include/exclude the current X (see next point). Eh, thoughts? For what it's worth I can see it both ways reasonably equally. Mayyyybe it could be a thing that if 'year to date' or 'all time' is selected this option is forced to On automatically(to keep the current behaviour), and then users could optionally turn it off?

  • The option 'include current <week/month>' has no time unit when using a range of 'year to date' 'last year' or 'all time', and so just reads 'include current', wonder if for these it should be 'month' for year to date, and 'year' for all time. For 'last year' eh, disable/grey out?? Have a think on this and the above and what you think makes sense - happy to discuss further :)

Besides those minor points it looks pretty good.

Teprifer avatar May 22 '24 09:05 Teprifer

@Teprifer So there's a regression from a previous PR that broke filters. This PR is not focused on fixing those at all. You can check #2785 for the fix for filters corrections.

Can you edit your review (above) and take out anything that relates to filters or show activity clicks? It would be much easier if we could keep the issues separate. Cheers!

carkom avatar May 22 '24 10:05 carkom

@carkom Sorry didn't realise the filter correction stuff included the dates bit (only aware of amounts) so thought maybe related as this has a date affecting option. And the first part was linked to the new option in this PR, anyway, removed.

Teprifer avatar May 22 '24 10:05 Teprifer

Awww <3

Yeah I always test in a browser data cleared chrome window with a freshly exported budget.

* Year to Date, includes up to current date regardless of the include current option setting.
  Not sure this is incorrect, since by definition 'to date' means, well, to the current day. But also there's the option to include/exclude the current X (see next point). Eh, thoughts? For what it's worth I can see it both ways reasonably equally.
  Mayyyybe it could be a thing that if 'year to date' or 'all time' is selected this option is forced to On automatically(to keep the current behaviour), and then users could optionally turn it off?

* The option 'include current <week/month>' has no time unit when using a range of 'year to date' 'last year' or 'all time', and so just reads 'include current', wonder if for these it should be 'month' for year to date, and 'year' for all time. For 'last year' eh, disable/grey out?? Have a think on this and the above and what you think makes sense - happy to discuss further  :)

Besides those minor points it looks pretty good.

I think I've fixed both issues. Have a look.

Making "Year to date" and "All time" function within the "include current" logic is messy because the interval type can change. Example: when interval = Monthly currentInterval would be current month, when interval = weekly currentInterval would be current week. Making this change dynamically adds complexity that I don't see as neccessary.

"Year to date" is meant to be Jan 1st through today. If someone wants Jan of this year through this month minus one then they can utilize the static filters. Same with "All time" range. It's one extra click to use these static fields.

carkom avatar May 22 '24 15:05 carkom

I think I've fixed both issues. Have a look.

Making "Year to date" and "All time" function within the "include current" logic is messy because the interval type can change. Example: when interval = Monthly currentInterval would be current month, when interval = weekly currentInterval would be current week. Making this change dynamically adds complexity that I don't see as neccessary.

"Year to date" is meant to be Jan 1st through today. If someone wants Jan of this year through this month minus one then they can utilize the static filters. Same with "All time" range. It's one extra click to use these static fields.

Ah yep, I was thinking it'd be static as month for YTD and year for all time(regardless of interval setting), but as I mentioned I don't think there's an incorrect approach here, so the simplest makes sense. Besides which I imagine it's fairly niche anyhoo.

Had a look, seems fine, my brain is a bit fried, but if you're happy with it, onwards! :)

Teprifer avatar May 24 '24 05:05 Teprifer

Would it make sense to turn this option on by default? I feel like including the current would be wanted more often than not.

youngcw avatar May 28 '24 15:05 youngcw

I just realized, that the time range options probably need updated to consider this setting.
For example, if you select last 6 months with "include current" you get 7 months in the report.

youngcw avatar May 29 '24 20:05 youngcw

I just realized, that the time range options probably need updated to consider this setting. For example, if you select last 6 months with "include current" you get 7 months in the report.

That's as intended right? "Last 6 months" (eg previous 6 months) would be the 6 full (completed) months before the current month. If you tick "include current" then you'd get those same 6 months plus this month (6 + 1 = 7).

The other option would be to make the "Last 6 months" (and other options like it) dynamic. So with includeCurrent selected it would give you Dec '23 to May '24 with it unselected you'd get Nov '23 to Apr '24.

It could make sense either way. I find it a bit confusing that the start date changes based on if "include current" is selected. In my mind "last 6 months" is (current month - 7) through (current month - 1). The status of "includeCurrent" wouldn't change that.

carkom avatar May 29 '24 20:05 carkom

Your second option is what I expected to happen. For me the "6" part takes precedent and "last x months" could easily mean either before current or with current, so I then expect 6 months in the report. Maybe we can see what others think.

youngcw avatar May 29 '24 20:05 youngcw

With the option off by default the logic is correct. But I see the point of having it on by default as that matches current behaviour.

I think it could also be approached as a discoverabilty thing, if the include current option was right under the range then it should be obvious what's going on.

Or as you say, update the range text to reference there current month being included(or not), either by changing the number, or appending "(plus current X)" or some variation of. Then users could discover the option in the options menu, is easy to find.

Teprifer avatar May 29 '24 21:05 Teprifer

Just to add my opinion. It's currently working how I would expect. I think it's behaviour is clear when you use "last month" as the example.

If I select "Last month" from the live time range (and I'm graphing by time). And include current month is on. I see last month and this month. Not just this month (I think that would be worse). If I toggle current month off, I just see last month. This seems correct, and based on that, how it currently works for 'last 6 months' also makes sense to me. I get 7 months listed, just the current probably being incomplete. (Which I can remove thanks to this toggle).

twk3 avatar Jun 06 '24 15:06 twk3

Just to add my opinion. It's currently working how I would expect. I think it's behaviour is clear when you use "last month" as the example.

If I select "Last month" from the live time range (and I'm graphing by time). And include current month is on. I see last month and this month. Not just this month (I think that would be worse). If I toggle current month off, I just see last month. This seems correct, and based on that, how it currently works for 'last 6 months' also makes sense to me. I get 7 months listed, just the current probably being incomplete. (Which I can remove thanks to this toggle).

Good explanation of how my mind was working. Thanks! @youngcw, are you okay to merge as is?

carkom avatar Jun 09 '24 23:06 carkom

A future improvement, that I've seen in some other graphing systems, is that when graphing by time, an incomplete month is often displayed visually differently than the others. (meaning the latest month when include current is on). Often this is just a slight colour shift, or maybe some masking.

twk3 avatar Jun 15 '24 17:06 twk3

@carkom I'm running into one issue with this currently

When jumping between 'last 6 months' and 'This month, (or one of the other disabled options). The include current get disabled (as expected, maybe it should be disabled but on for some of these, but that's not the issue). And then if I jump back to 'last 6 months' it stays disabled, which is unexpected.

As a user in this workflow, I may have never opened "Options" at all. So the fact that my initial "last 6 months" query, and my later one produced different results is unexpected.

Should be fixed.

carkom avatar Jun 17 '24 02:06 carkom