{% extends "base.html" %} {% block title %}Factcat — Setup{% endblock %} {% block extra_css %} .setup-page { flex: 1; min-height: 0; width: 100%; box-sizing: border-box; padding: 1.5rem 1.75rem 2rem; display: grid; grid-template-columns: minmax(22rem, 28rem) minmax(0, 1fr); gap: 1.25rem; align-items: start; } .setup-form { background: var(--fc-snow); border: 1px solid var(--fc-line); border-radius: 0.75rem; padding: 1.4rem 1.5rem 1.6rem; } .setup-docs { background: var(--fc-snow); border: 1px solid var(--fc-line); border-radius: 0.75rem; padding: 1.25rem 1.45rem 1.6rem; min-height: 0; max-height: calc(100vh - 3rem); overflow: auto; font-size: 0.88rem; color: var(--fc-ink-soft); } .setup-docs h1 { font-size: 1.05rem; margin: 0 0 0.65rem; } .setup-docs h2 { margin-top: 1.15rem; } .setup-docs p, .setup-docs ul { margin: 0 0 0.65rem; } .setup-docs ul { padding-left: 1.2rem; } .setup-docs code { font-size: 0.8em; background: var(--fc-paper); padding: 0.05rem 0.3rem; border-radius: 0.25rem; } .setup-docs pre { background: var(--fc-paper); padding: 0.75rem 0.9rem; border-radius: 0.4rem; overflow: auto; font-size: 0.8rem; } #status { color: var(--fc-ok); font-size: 0.85rem; } @media (max-width: 56rem) { .setup-page { grid-template-columns: 1fr; } .setup-docs { max-height: none; } } {% endblock %} {% block body %}

Project setup

Map a table in your BigQuery. Mapping is saved to .factcat.json in this directory. Uses application-default credentials unless you open Advanced.

Warehouse

Table

Grain

Stable id for this grain. Null means the event is not about that grain (dropped from uniques). INT64 preferred; STRING is fine. Not unique on the events table. Display only (Unique Users, Average per User). Does not choose the id column. TIMESTAMP (UTC instant) or DATETIME (civil time). Not DATE. STRING column of event names. Save runs DISTINCT on the last 90 days and caches the list for Events.

Time

Applied after the instant is converted to the reporting calendar. Whose midnight is a day, and whose Monday is a week. Not the warehouse default. TIMESTAMP is a UTC instant. DATETIME has no zone: treat it as already in the reporting timezone.

Formatting

Example: 1,234.56 Factcat sets this on the BigQuery job (maximum_bytes_billed). 0 is unlimited. A report can override it for one run. Crash fuse in SQL after aggregation (most recent rows). A normal chart never hits this; grouping by a high-cardinality property might. It does not reduce bytes scanned. A report can raise it if results are truncated.

Advanced: service-account JSON instead of ADC
{% endblock %}