Skip to content

Latest commit

 

History

History
50 lines (50 loc) · 5.28 KB

TODO.md

File metadata and controls

50 lines (50 loc) · 5.28 KB
  • Write validations and tests specific to the Dimensional lens
  • Write validations and tests specific to the Time Series lens
  • Write tests for the various #from_params methods
  • Figure out a date picker UI for From/To.
    • Needs to support selecting absolute dates, and relative dates via expressions. Both should be able to be entered manually, or filled in based on suggested/common ranges. For example, the user should be able to select "Last 30 days" as both an absolute range, and as a relative range.
    • When working with relative expressions, the UI should show a hint as to what absolute time the expressions currently resolves to, so that the user can be confident they are writing the expression correctly.
    • The app always thinks in terms of "GTE From AND LT To". This does not necessarily have to be how the UI works for users. For example, we may want the user to be able to select "January 01" to "January 31" in the UI, if their desire is to select the entire month of January. If we want the UI behavior to differ from the app's internal behavior, we have to have a good plan for how to do that consistently and reliably.
  • Figure out if we want to support time zones for the range selection at all. The app only thinks in terms of UTC.
    • I vote no, at least to start.
    • If/when we do want to support time zones at all, it must be done entirely on the client side, the from and to values in the URL query will always be UTC-only.
  • Figure out a UI for filter multi-selects.
    • Things like podcast_id, country_id, timezone, etc.
    • While some of these are filtering on ID, the user should interact with something more friendly, like the podcast name.
    • The values available for these filters for any given user should probably be cached somewhere.
  • Add validations for values that must be authorized, like podcast_id.
    • The app needs to ensure that it will never query a database for resources that the user isn't authorized to access. The UI should only present authorized values, but check them again before the query is actually sent.
  • Finalize dimension and property names in schema
    • These need to be consistent because changing them would break saved URLs, reports, etc
  • Finalize query keys in schema
  • If the user adds an exclude filter on an impression dimension (like advertiser), but only selects downloads as a metric, ensure that all downloads associated with that advertiser are excluded, even if there are other impression rows for that download for other advertisers.
  • When using EXTRACT on timestamps, it may be helpful to be able to decide if the extract should use the timezone or not. If a user is extracting, for example, on download time, they likely would expect a download at 5 PM ET and 5 PM PT to be treated the same way, but when using EXTRACT without a timezone, they would get treated more like midnight at 2 AM.
    • Need to verify what happens with downloads that don't have a timezone
  • Document how these cases are handled:
    • episode pubDate changes
    • episode RSS guid changes (i.e., multiple drop spikes)
    • episode is deleted
    • episode is unpublished
    • episode is dropped with a backdated pubDate
    • episode is imported (i.e., missing historical data)
  • Maybe allow filters/groups/etc to reference the composition time range from/to?
  • Support aggregations other than TOTAL
  • Build aggregation method into metrics, so sum() becomes explicit, which allows for others down the road
  • If we have a value in the data some point that indicates if an episode was originally published before it was hosted on Dovetail, add a warning that the data is incomplete
  • When including "published" as a meta on episode, the value being displayed in the results has a time zone. No values in the app, internal or external, should have time zones
  • Support accessing BQ datasets other than "production". Probably needs to parse the data_schema as ERB
  • Separate permissions for downloads and impressions
  • Fix Oauth token refresh to bring you back to page you requested that triggered the refresh
  • Write some tests to check rolling window ranges down to the second
  • SortFields don't resolve exhibit properties. Make a note somewhere that you should ensure the desired property is used directly. Meta properties also don't resolve exhibit properties, which makes it possible to display, for example, podcast ID if desired, rather than podcast name.
  • Detect if there's a ridiculous number of rows/columns before attempting to displaying to prevent hangs
    • Maybe support for "Top N" filters, which get all the data back, but only make some of it available to the UI
  • May want to have an option that allows enforcing empty rows (i.e., display all possible group members, even if there is no data)
    • For some dimensions, it is tricky/expensive to generate the list of members
  • With 0 groups in time series, or 1 group in dimensional, allow values in the table to be displayed as a percent
  • Look into using pipe syntax for BigQuery queries https://cloud.google.com/bigquery/docs/pipe-syntax-guide
  • Add a preflight tubro thing that the composition can be submitted to to get real time warnings and errors without having to run the query
  • Data schema should reload in dev
  • Move DataSchemaUtils
  • CSV export
  • Figure out access for podcasts, episodes, campaigns, advertisers, etc. Do we keep piggybacking off feeder/augury permissions?