Building a dataflow is the easy half. Making it run every morning, in the right order, and telling someone when it breaks – that's the half that usually requires an engineer. It doesn't have to.
In these guides – and in Refyner – schedule means orchestrating the dependency between transformations and their refresh times. That is a stronger claim than "run at 6am". A real schedule knows that the blended CAC dataflow reads PREP_CHANNEL_SPEND and PREP_ORDERS, so it runs them first, runs CAC after both succeed, and stops the chain – loudly – if either fails.
The distinction matters because the failure mode of timer-based refresh isn't an error message. It's a dashboard full of plausible, stale numbers: spend through yesterday joined to orders through Tuesday. Nobody notices until the numbers drive a bad decision, and then everybody notices.
Whatever tool provides it, production scheduling for everyday analytics comes down to six capabilities:
Analyst teams don't fail at scheduling because these are conceptually hard. They fail because in most stacks each item on that list is an engineering project.
BI-tool refresh. Power BI Dataflow and similar features re-run one artefact on a timer inside the BI suite. There is no dependency chain across transformations, and the output lives in the BI vendor's storage rather than your Snowflake – which is why we treat refresh and orchestration as different things in Refyner vs Power BI Dataflow.
dbt + Airflow. The engineering-standard answer, and a good one if you have engineers: dbt owns transformations, Airflow owns the DAG. But it is two code-first tools, deployed and maintained as infrastructure, and the people who operate them become the queue every analyst change waits in. The full comparison is in Refyner vs dbt / Airflow.
Desktop prep tools + a server. Prep is drag-and-drop on a desktop, but scheduling means buying and administering the server edition – orchestration priced and operated as a second product.
Snowflake's native tasks are the honest baseline every analyst should know, because they prove the mechanics are simple. A task runs SQL on a cron expression; a chained task runs after its predecessor:
-- Prep runs at 05:00 London time, after connectors sync
create or replace task T_PREP_ORDERS
warehouse = TRANSFORM_WH
schedule = 'USING CRON 0 5 * * * Europe/London'
as
create or replace table PREP_ORDERS as
select *
from RAW_SHOPIFY.ORDERS
qualify row_number() over (
partition by order_id order by _synced_at desc
) = 1;
-- The CAC model runs only after prep succeeds
create or replace task T_MODEL_BLENDED_CAC
warehouse = TRANSFORM_WH
after T_PREP_ORDERS
as
call SP_REBUILD_BLENDED_CAC();
alter task T_MODEL_BLENDED_CAC resume;
alter task T_PREP_ORDERS resume;
This works, and for two or three dataflows it may be all you need. Score it against the six capabilities, though, and the gaps show: no alerting without wiring up error notifications yourself, no lineage view beyond show tasks, backfills mean editing SQL, and every change is DDL in a worksheet – which quietly makes the schedule engineer-owned again, even if the engineer is you at your most careful.
Cadence is a modelling decision, not a preference. The pattern that holds across eCommerce and subscription teams:
Two disciplines make any cadence trustworthy: sequence dataflows after their sources (a schedule that fires before the connector lands is just an expensive way to copy yesterday), and treat a missed run as an incident with an owner, not a surprise for whoever opens the dashboard first.
Everything above is why Refyner treats prep and schedule as one tool rather than two. An analyst sets the cadence and dependencies on the dataflow they just built – no second product, no DAG repository – and Refyner runs it as pushdown on your Snowflake, watches every run, and alerts on failure. The built-in models ship with sensible cadences already attached: daily for Blended CAC, weekly for Retention & repurchase, monthly-shaped runs for Customer LTV. Scheduled dataflows are billed at $3 per compute hour, pay-as-you-go, while building and sampling stay free – the detail is on the pricing page.
Keep reading:
Mechanically, yes – tasks run SQL on cron expressions and can chain on predecessors. What you don't get is the operational layer: a lineage view, alerting someone when a run fails, safe backfills, run history you can actually read, and a place where analysts can change a schedule without writing DDL. Most teams that start with bare tasks end up rebuilding those pieces by hand.
Refresh re-runs one artefact on a timer. A schedule orchestrates a dependency chain: prep dataflows run first, models that read them run after, and a failure upstream stops the chain and alerts a person instead of silently publishing stale numbers. If your only lever is "refresh at 6am", the ordering between transformations is luck.
Match the cadence to the decision the output feeds. Spend, orders and CAC support daily trading decisions, so they run daily, sequenced after the connectors sync. Cohort models – LTV, retention, churn – move on monthly behaviour, so weekly or monthly runs are usually enough. Scheduling everything daily just spends compute to refresh numbers nobody reads intraday.
Set the cadence on the dataflow you just built – Refyner runs it on your Snowflake, watches every run, and alerts you before a broken job becomes a wrong number.