
1
00:00:00,000 –> 00:00:01,760
Your live analytics aren’t truth.
2
00:00:01,760 –> 00:00:04,320
They’re a constantly mutating rumor with charts.
3
00:00:04,320 –> 00:00:05,960
You pull a number, ETL sneezes,
4
00:00:05,960 –> 00:00:08,200
and that number changes before the meeting ends.
5
00:00:08,200 –> 00:00:11,520
Then executives ask which version is right, spoiler, none,
6
00:00:11,520 –> 00:00:13,800
because the state you query no longer exists.
7
00:00:13,800 –> 00:00:15,040
Here’s the fix.
8
00:00:15,040 –> 00:00:17,320
Fabric warehouse snapshots lock a point in time,
9
00:00:17,320 –> 00:00:20,200
transactionally consistent, read only, zero copy.
10
00:00:20,200 –> 00:00:21,880
You get one stable version of truth
11
00:00:21,880 –> 00:00:24,480
without pausing pipelines or cloning warehouses.
12
00:00:24,480 –> 00:00:27,080
In the next minutes, I’ll show you why your data is fragile,
13
00:00:27,080 –> 00:00:28,600
why read replicas don’t save you,
14
00:00:28,600 –> 00:00:31,000
and exactly how snapshots give query stability,
15
00:00:31,000 –> 00:00:33,560
audit reproducibility, and lower cost.
16
00:00:33,560 –> 00:00:36,120
Why your data is fragile, the failure modes.
17
00:00:36,120 –> 00:00:38,840
Volatility isn’t speed, it’s uncertainty.
18
00:00:38,840 –> 00:00:41,760
The average user confuses fresh with reliable,
19
00:00:41,760 –> 00:00:44,440
then wonders why month end keeps slipping.
20
00:00:44,440 –> 00:00:47,480
Decisions don’t need adrenaline, they need reproducibility.
21
00:00:47,480 –> 00:00:50,160
If you can’t rerun the same query tomorrow
22
00:00:50,160 –> 00:00:52,120
and get the same answer for yesterday,
23
00:00:52,120 –> 00:00:53,880
you don’t have analytics, you have gossip.
24
00:00:53,880 –> 00:00:55,160
Let’s talk ETL turbulence.
25
00:00:55,160 –> 00:00:56,840
Your pipelines run batch windows,
26
00:00:56,840 –> 00:00:59,640
late arriving facts slide in, reprocessing kicks off
27
00:00:59,640 –> 00:01:01,840
because someone discovered a data quality hiccup.
28
00:01:01,840 –> 00:01:03,520
Meanwhile, analysts are querying,
29
00:01:03,520 –> 00:01:08,040
they hit tables mid-ride, half-baked states propagate into dashboards.
30
00:01:08,040 –> 00:01:09,560
The thing most people miss is simple.
31
00:01:09,560 –> 00:01:12,080
Your warehouse is temporarily a construction site
32
00:01:12,080 –> 00:01:14,160
and you keep giving tours with the scaffolding up.
33
00:01:14,160 –> 00:01:16,600
Now schema drift during loads, adding columns,
34
00:01:16,600 –> 00:01:18,680
changing types, recalculating aggregates
35
00:01:18,680 –> 00:01:21,120
completely normal in modern analytics.
36
00:01:21,120 –> 00:01:23,640
But if you allow live queries during those shifts,
37
00:01:23,640 –> 00:01:25,720
you break reproducibility.
38
00:01:25,720 –> 00:01:28,560
Last Tuesday’s model trained on a table with decimal tentator,
39
00:01:28,560 –> 00:01:30,440
today it’s decimal 12 on four.
40
00:01:30,440 –> 00:01:32,240
Tomorrow it’s split into two tables.
41
00:01:32,240 –> 00:01:35,240
You can’t retune models when last Tuesday no longer exists.
42
00:01:35,240 –> 00:01:37,240
That’s not agile, that’s amnesia.
43
00:01:37,240 –> 00:01:39,160
Read replicas, everyone’s comfort blanket.
44
00:01:39,160 –> 00:01:41,880
Replicas replicate change, not certainty.
45
00:01:41,880 –> 00:01:44,480
They mirror whatever lands, good rights, bad rights
46
00:01:44,480 –> 00:01:46,720
and schema shocks just distributed faster.
47
00:01:46,720 –> 00:01:48,080
Yes, they help throughput.
48
00:01:48,080 –> 00:01:50,680
No, they don’t give you a consistent point in time guarantee.
49
00:01:50,680 –> 00:01:52,520
That’s like photocopying a messy whiteboard.
50
00:01:52,520 –> 00:01:54,600
Now you have more messy whiteboards.
51
00:01:54,600 –> 00:01:56,960
Manual exports, masquerading is truth.
52
00:01:56,960 –> 00:02:01,360
CSV sprawl with no lineage, no RBAC and zero auditability.
53
00:02:01,360 –> 00:02:04,200
A folder named Final Final 2 isn’t governance.
54
00:02:04,200 –> 00:02:05,800
It’s performance art.
55
00:02:05,800 –> 00:02:07,400
When audits arrive and ask,
56
00:02:07,400 –> 00:02:10,400
prove these numbers match system of record as of close.
57
00:02:10,400 –> 00:02:12,040
Your screenshots don’t count.
58
00:02:12,040 –> 00:02:13,840
Provenance collapses on contact.
59
00:02:13,840 –> 00:02:16,160
Data science instability is the silent killer.
60
00:02:16,160 –> 00:02:18,240
Feature stores expect stable baselines.
61
00:02:18,240 –> 00:02:21,080
If the underlying data mutates mid-training or labels drift
62
00:02:21,080 –> 00:02:23,760
because ETL reprocessed without a frozen view,
63
00:02:23,760 –> 00:02:25,160
your experiments are not experiments.
64
00:02:25,160 –> 00:02:26,480
They’re accidents with charts.
65
00:02:26,480 –> 00:02:29,360
You can’t compare models if the ground moves under each run.
66
00:02:29,360 –> 00:02:32,400
Cost of chaos, analysts, rerun reports,
67
00:02:32,400 –> 00:02:35,920
re-explain variances and escalate to engineering.
68
00:02:35,920 –> 00:02:38,360
People build private caches to protect themselves,
69
00:02:38,360 –> 00:02:41,080
which multiplies copies and multiplies risk.
70
00:02:41,080 –> 00:02:43,320
Projects stall because executives lose trust.
71
00:02:43,320 –> 00:02:46,280
Once trust erodes, every number requires a meeting and a priest.
72
00:02:46,280 –> 00:02:49,240
Before we continue, you need to understand the real failure mode.
73
00:02:49,240 –> 00:02:50,960
Concurrency without isolation.
74
00:02:50,960 –> 00:02:54,360
You’re letting right transactions and read queries collide in time.
75
00:02:54,360 –> 00:02:57,840
And yes, you bought a read replica to offload traffic,
76
00:02:57,840 –> 00:03:00,160
but the replica doesn’t invent history.
77
00:03:00,160 –> 00:03:01,840
It streams the same moving target.
78
00:03:01,840 –> 00:03:03,480
The truth, you need a freeze frame.
79
00:03:03,480 –> 00:03:04,800
This is where most people mess up.
80
00:03:04,800 –> 00:03:07,640
They try to time their queries between loads, cute.
81
00:03:07,640 –> 00:03:10,760
It’s like trying to cross a highway by estimating truck gaps.
82
00:03:10,760 –> 00:03:12,720
You might survive, but the method doesn’t scale.
83
00:03:12,720 –> 00:03:15,160
Or they gait the entire warehouse with maintenance windows.
84
00:03:15,160 –> 00:03:16,080
Congratulations.
85
00:03:16,080 –> 00:03:17,840
You traded volatility for downtime.
86
00:03:17,840 –> 00:03:19,720
And your stakeholders still won’t wait.
87
00:03:19,720 –> 00:03:21,760
Here’s the shortcut nobody teaches.
88
00:03:21,760 –> 00:03:24,200
Stability beats recency for decision making.
89
00:03:24,200 –> 00:03:27,000
Not always, but whenever money, compliance, or accountability
90
00:03:27,000 –> 00:03:28,800
is involved, you need the exact same answers
91
00:03:28,800 –> 00:03:32,200
tomorrow that you saw today for the same timestamped reality.
92
00:03:32,200 –> 00:03:34,840
That requires isolation semantics, not vibes.
93
00:03:34,840 –> 00:03:36,120
Common mistake story.
94
00:03:36,120 –> 00:03:39,760
Last week, a team ran a daily sales dashboard at 858,
95
00:03:39,760 –> 00:03:42,120
right as ETL was loading late orders.
96
00:03:42,120 –> 00:03:45,600
The chart dipped, panic ensued, slacklit up, and by 917,
97
00:03:45,600 –> 00:03:48,200
the crisis vanished because the rest of the batch landed.
98
00:03:48,200 –> 00:03:51,040
The difference between bad day and business as usual
99
00:03:51,040 –> 00:03:53,560
was 15 minutes and zero governance.
100
00:03:53,560 –> 00:03:55,880
Once you nail this principle, volatility is the disease.
101
00:03:55,880 –> 00:03:57,240
Isolation is the treatment.
102
00:03:57,240 –> 00:03:58,240
Everything else clicks.
103
00:03:58,240 –> 00:04:01,120
Replicas handle load, snapshots handle truth.
104
00:04:01,120 –> 00:04:03,720
CSV is handle, personal embarrassment.
105
00:04:03,720 –> 00:04:04,880
Enter snapshots.
106
00:04:04,880 –> 00:04:07,600
They give you read only, transactionally consistent point
107
00:04:07,600 –> 00:04:10,560
in time views with zero copy metadata pointers.
108
00:04:10,560 –> 00:04:13,640
So your analysts query a frozen state while ETL
109
00:04:13,640 –> 00:04:15,440
does its acrobatics out of sight.
110
00:04:15,440 –> 00:04:17,680
No mid-flight surprises, no schema whiplash, no,
111
00:04:17,680 –> 00:04:19,560
don’t refresh right now messages.
112
00:04:19,560 –> 00:04:21,840
You stop trusting fragile data and start delivering
113
00:04:21,840 –> 00:04:24,240
a stable, auditable version of truth.
114
00:04:24,240 –> 00:04:26,800
What fabric warehouse snapshots actually guarantee,
115
00:04:26,800 –> 00:04:28,360
certainty, not vibes?
116
00:04:28,360 –> 00:04:30,280
Let’s define the contract because feelings
117
00:04:30,280 –> 00:04:31,440
won’t pass and audit.
118
00:04:31,440 –> 00:04:34,000
A fabric warehouse snapshot is read only,
119
00:04:34,000 –> 00:04:36,840
point in time, and transactionally consistent.
120
00:04:36,840 –> 00:04:38,360
Translation, when you query it,
121
00:04:38,360 –> 00:04:40,240
you see a complete coherent database
122
00:04:40,240 –> 00:04:43,240
as of a specific timestamp, no half-written rows,
123
00:04:43,240 –> 00:04:46,680
no mid-flight mergers, no oops and index was rebuilding.
124
00:04:46,680 –> 00:04:48,120
It’s not a copy you babysit.
125
00:04:48,120 –> 00:04:50,800
It’s a frozen view backed by metadata pointers.
126
00:04:50,800 –> 00:04:53,320
The warehouse keeps moving, the snapshot does not.
127
00:04:53,320 –> 00:04:55,720
Snapshot isolation is the spine here.
128
00:04:55,720 –> 00:04:58,440
Your queries read the most recent committed transaction
129
00:04:58,440 –> 00:05:00,360
before the snapshots timestamp.
130
00:05:00,360 –> 00:05:03,240
Not eventually consistent, not give it a few seconds.
131
00:05:03,240 –> 00:05:05,760
Committed, if a batch started but hadn’t committed
132
00:05:05,760 –> 00:05:07,920
by that timestamp, it does not exist in that view.
133
00:05:07,920 –> 00:05:10,000
And it will never suddenly appear mid-query.
134
00:05:10,000 –> 00:05:11,840
You get a deterministic slice of time
135
00:05:11,840 –> 00:05:15,240
that stays stable for the life of that snapshot.
136
00:05:15,240 –> 00:05:17,600
Now, the certainty window, you don’t need a museum,
137
00:05:17,600 –> 00:05:19,640
you need a library with a return policy.
138
00:05:19,640 –> 00:05:21,400
Practical teams set retention,
139
00:05:21,400 –> 00:05:22,920
so they always have enough history
140
00:05:22,920 –> 00:05:24,680
to reproduce key decisions.
141
00:05:24,680 –> 00:05:26,480
Daily snapshots for 30 days,
142
00:05:26,480 –> 00:05:28,600
plus preserved month and/or quarter and snapshots
143
00:05:28,600 –> 00:05:29,760
you keep longer.
144
00:05:29,760 –> 00:05:31,760
Schedule the capture, name them intelligently,
145
00:05:31,760 –> 00:05:35,880
month and 2025, ’09, and stop negotiating with memory.
146
00:05:35,880 –> 00:05:37,680
The catalog tells you which book to pull,
147
00:05:37,680 –> 00:05:39,520
you don’t hunt the pages on the floor.
148
00:05:39,520 –> 00:05:41,680
Zero copy design is the cost superpower.
149
00:05:41,680 –> 00:05:44,720
Most of you hoard CSVs like their emergency rations,
150
00:05:44,720 –> 00:05:46,120
each one a full duplicate.
151
00:05:46,120 –> 00:05:48,480
Snapshots aren’t that their metadata pointers
152
00:05:48,480 –> 00:05:51,560
that present a stable read of the existing storage.
153
00:05:51,560 –> 00:05:52,880
You aren’t cloning terabytes,
154
00:05:52,880 –> 00:05:54,480
you’re bookmarking an exact moment.
155
00:05:54,480 –> 00:05:56,640
That means you pay for governance and performance,
156
00:05:56,640 –> 00:05:59,320
not for duplicate bits that will rot in a file share
157
00:05:59,320 –> 00:06:01,440
named archive, do not delete two.
158
00:06:01,440 –> 00:06:02,560
Continuity matters.
159
00:06:02,560 –> 00:06:04,960
The best part is you don’t keep rebinding clients.
160
00:06:04,960 –> 00:06:07,640
Your connection string can stay pointed at the snapshot name
161
00:06:07,640 –> 00:06:10,840
while you roll the timestamp forward after ETL validates.
162
00:06:10,840 –> 00:06:12,800
Analysts keep working, the view updates
163
00:06:12,800 –> 00:06:15,520
to the next consistent state without breaking queries.
164
00:06:15,520 –> 00:06:17,320
Think of it like changing the channel’s program
165
00:06:17,320 –> 00:06:19,160
while the TV remains on the same input.
166
00:06:19,160 –> 00:06:22,200
No cable juggling, no everyone reconnect messages.
167
00:06:22,200 –> 00:06:24,200
Governance alignment is non-negotiable.
168
00:06:24,200 –> 00:06:27,360
Snapshots aren’t a side door, they’re first class citizens.
169
00:06:27,360 –> 00:06:30,200
Use our back so only the right people can create view
170
00:06:30,200 –> 00:06:31,840
or roll forward them.
171
00:06:31,840 –> 00:06:34,120
Apply, purview sensitivity labels,
172
00:06:34,120 –> 00:06:36,240
so PII stays labeled in the snapshot,
173
00:06:36,240 –> 00:06:38,280
not magically sanitized by denial.
174
00:06:38,280 –> 00:06:40,520
Turn on audit logs so every creation,
175
00:06:40,520 –> 00:06:44,360
access and update writes evidence you can surface in Power BI.
176
00:06:44,360 –> 00:06:46,040
Lineage helps you connect the snapshot
177
00:06:46,040 –> 00:06:47,960
to the upstream pipelines that produced it,
178
00:06:47,960 –> 00:06:50,360
which is how you answer, where did this number come from?
179
00:06:50,360 –> 00:06:53,720
Without calling five people, here’s the shortcut nobody teaches.
180
00:06:53,720 –> 00:06:56,440
Snapshots are a protocol for operational truth.
181
00:06:56,440 –> 00:06:58,560
A handshake between engineering, analytics,
182
00:06:58,560 –> 00:07:02,040
and compliance that says, this is the state we all agree on.
183
00:07:02,040 –> 00:07:04,120
It’s not a toggle you flip randomly.
184
00:07:04,120 –> 00:07:05,920
It’s the boundary that separates production
185
00:07:05,920 –> 00:07:07,600
churn from decision-grade facts.
186
00:07:07,600 –> 00:07:09,560
Once you treat snapshots like a protocol,
187
00:07:09,560 –> 00:07:12,440
capture validate advance the drama evaporates.
188
00:07:12,440 –> 00:07:15,320
And yes, there are limits because reality exists.
189
00:07:15,320 –> 00:07:17,160
If your retention is 30 days,
190
00:07:17,160 –> 00:07:19,520
and legal ones last year’s precise day end,
191
00:07:19,520 –> 00:07:21,280
either preserve the month and snapshot
192
00:07:21,280 –> 00:07:23,560
or extend retention for that domain.
193
00:07:23,560 –> 00:07:26,520
If you mix snapshot tables with live tables in one report,
194
00:07:26,520 –> 00:07:28,080
you reintroduce ambiguity.
195
00:07:28,080 –> 00:07:31,520
If you let anyone roll snapshots forward before validation’s pass,
196
00:07:31,520 –> 00:07:33,920
you’re back to chaos in a nicer outfit.
197
00:07:33,920 –> 00:07:36,560
The feature is powerful, your discipline makes it useful.
198
00:07:36,560 –> 00:07:38,760
Let me show you exactly how this pays off,
199
00:07:38,760 –> 00:07:41,720
with snapshots semantics you can run heavy ETL,
200
00:07:41,720 –> 00:07:44,720
while analysts keep querying a frozen consistent state.
201
00:07:44,720 –> 00:07:46,440
At month end, you capture once,
202
00:07:46,440 –> 00:07:48,200
point finance at the month and snapshot
203
00:07:48,200 –> 00:07:50,800
and rerun the P&L next week for the exact same result.
204
00:07:50,800 –> 00:07:53,960
During audits, you query the snapshot from the target date
205
00:07:53,960 –> 00:07:57,320
and export evidence with lineage and access logs attached.
206
00:07:57,320 –> 00:07:58,720
All without restoring databases,
207
00:07:58,720 –> 00:08:00,600
cloning warehouses or pausing pipelines.
208
00:08:00,600 –> 00:08:03,080
The reason this works is embarrassingly simple.
209
00:08:03,080 –> 00:08:06,560
Isolation plus immutability beats speed without guarantees.
210
00:08:06,560 –> 00:08:09,640
Replica’s increased capacity snapshots increased certainty.
211
00:08:09,640 –> 00:08:12,360
Zero copy pointers give the cost advantage.
212
00:08:12,360 –> 00:08:14,560
Our back labels and audit logs give the governance
213
00:08:14,560 –> 00:08:16,640
you keep promising but never quite deliver.
214
00:08:16,640 –> 00:08:18,840
If you remember nothing else, remember this.
215
00:08:18,840 –> 00:08:20,880
Truth is a timestamp you can name,
216
00:08:20,880 –> 00:08:22,360
not a vibe you can feel.
217
00:08:22,360 –> 00:08:24,480
Now let’s lock it in and implement.
218
00:08:24,480 –> 00:08:27,400
How to implement snapshots for zero drama analytics,
219
00:08:27,400 –> 00:08:29,080
T-SQL plus pipelines.
220
00:08:29,080 –> 00:08:31,360
Let’s stop theorizing and wire this properly.
221
00:08:31,360 –> 00:08:34,520
The rule, lock the truth first, then load.
222
00:08:34,520 –> 00:08:38,080
Analysts read the frozen view, pipelines churn in the background,
223
00:08:38,080 –> 00:08:41,280
no heroics, no slack warnings, pre-ETL safety pattern.
224
00:08:41,280 –> 00:08:43,520
Before your ingestion starts, capture a snapshot.
225
00:08:43,520 –> 00:08:45,440
That gives analysts a stable target
226
00:08:45,440 –> 00:08:47,720
while the warehouse mutates behind the curtain.
227
00:08:47,720 –> 00:08:50,360
In practice, schedule a pre-step in your pipeline
228
00:08:50,360 –> 00:08:52,200
that runs a t-school command to either create
229
00:08:52,200 –> 00:08:53,720
or update today’s snapshot.
230
00:08:53,720 –> 00:08:56,560
Name it predictably so clients never change connections,
231
00:08:56,560 –> 00:08:58,320
programmatic update.
232
00:08:58,320 –> 00:09:00,880
The pattern most people miss is you don’t recreate snapshots
233
00:09:00,880 –> 00:09:01,640
every time.
234
00:09:01,640 –> 00:09:04,480
You roll their timestamp forward after validation.
235
00:09:04,480 –> 00:09:07,640
Add a terminal pipeline step after loads after quality checks
236
00:09:07,640 –> 00:09:10,200
that advances the snapshot to the latest committed state.
237
00:09:10,200 –> 00:09:12,040
Clients stay on the same name.
238
00:09:12,040 –> 00:09:15,640
The truth moves forward only when you say so.
239
00:09:15,640 –> 00:09:16,880
T-SQL examples.
240
00:09:16,880 –> 00:09:19,480
Create a name snapshot once, then maintain it.
241
00:09:19,480 –> 00:09:20,520
Create a snapshot.
242
00:09:20,520 –> 00:09:21,480
Create snapshot.
243
00:09:21,480 –> 00:09:23,280
Current read only for database.
244
00:09:23,280 –> 00:09:24,640
Finance warehouse.
245
00:09:24,640 –> 00:09:25,800
List snapshots.
246
00:09:25,800 –> 00:09:28,400
Select name, snapshot time from Cisco’s snapshots
247
00:09:28,400 –> 00:09:33,280
where database ID equals DBID, finance warehouse.
248
00:09:33,280 –> 00:09:34,280
Roll forward to now.
249
00:09:34,280 –> 00:09:38,960
After ETL validation passes, alter database up finance warehouse.
250
00:09:38,960 –> 00:09:40,440
Update snapshot.
251
00:09:40,440 –> 00:09:44,800
Current read only with timestamp as CIS UTC data time.
252
00:09:44,800 –> 00:09:47,040
Query against the snapshot explicitly.
253
00:09:47,040 –> 00:09:49,240
Select from finance warehouse.
254
00:09:49,240 –> 00:09:50,280
Add snapshot.
255
00:09:50,280 –> 00:09:51,840
Current read only.
256
00:09:51,840 –> 00:09:54,120
DBO dot sales.
257
00:09:54,120 –> 00:09:56,640
If your environment exposes time-based selection,
258
00:09:56,640 –> 00:09:58,560
you can target a historical moment.
259
00:09:58,560 –> 00:10:01,440
Select a man from finance warehouse at time able to
260
00:10:01,440 –> 00:10:05,280
use 2025 09 30 T-53 59 59 Z.
261
00:10:05,280 –> 00:10:07,000
DBO dot sales.
262
00:10:07,000 –> 00:10:09,120
The exact syntax varies by release.
263
00:10:09,120 –> 00:10:10,360
The concept doesn’t.
264
00:10:10,360 –> 00:10:12,320
Explicit point in time read.
265
00:10:12,320 –> 00:10:13,320
Not vibes.
266
00:10:13,320 –> 00:10:15,120
And yes, the warehouse keeps accepting rights
267
00:10:15,120 –> 00:10:16,520
while you query the frozen view.
268
00:10:16,520 –> 00:10:19,680
That’s the entire point, pipeline choreography.
269
00:10:19,680 –> 00:10:20,560
Order matters.
270
00:10:20,560 –> 00:10:21,360
Snapshot.
271
00:10:21,360 –> 00:10:24,760
In just transform, validate, roll forward.
272
00:10:24,760 –> 00:10:26,880
If validation fails, the snapshot stays put
273
00:10:26,880 –> 00:10:28,760
and your reports remain consistent.
274
00:10:28,760 –> 00:10:31,280
If validation succeeds, advance the timestamp.
275
00:10:31,280 –> 00:10:34,520
You didn’t publish partials, you promoted a coherent state.
276
00:10:34,520 –> 00:10:37,400
Elegant, predictable, boring in the best way.
277
00:10:37,400 –> 00:10:38,320
Month and schedule.
278
00:10:38,320 –> 00:10:40,640
Automate a capture at close and keep it named.
279
00:10:40,640 –> 00:10:43,720
Example, month and 2025 09.
280
00:10:43,720 –> 00:10:46,960
Finance models and power BI datasets parameterize the target
281
00:10:46,960 –> 00:10:49,040
so you can switch between current read only and a
282
00:10:49,040 –> 00:10:52,360
specific month and without rebuilding anything.
283
00:10:52,360 –> 00:10:54,640
Auditors ask, show me as of 730.
284
00:10:54,640 –> 00:10:58,440
You point the parameter at month and 2025 09 and rerun.
285
00:10:58,440 –> 00:10:59,400
Identical result.
286
00:10:59,400 –> 00:11:00,680
That’s how adults do numbers.
287
00:11:00,680 –> 00:11:02,600
DAX usage for stable reports.
288
00:11:02,600 –> 00:11:05,600
In power BI, bind your semantic model to the snapshot.
289
00:11:05,600 –> 00:11:07,800
If your connector supports specifying the snapshot in
290
00:11:07,800 –> 00:11:09,560
the connection-set it once.
291
00:11:09,560 –> 00:11:12,440
Otherwise, use a parameter to drive a source query that
292
00:11:12,440 –> 00:11:15,640
references the snapshot name or timestamp, then push that
293
00:11:15,640 –> 00:11:19,160
parameter through a dataset setting or deployment pipeline.
294
00:11:19,160 –> 00:11:20,720
Measure logic stays identical.
295
00:11:20,720 –> 00:11:22,880
Only the source is temporal anchor changes.
296
00:11:22,880 –> 00:11:24,120
Audit replay workflow.
297
00:11:24,120 –> 00:11:26,000
Someone challenges last Tuesday’s KPI.
298
00:11:26,000 –> 00:11:27,160
You don’t restore anything.
299
00:11:27,160 –> 00:11:28,760
You query the Tuesday snapshot.
300
00:11:28,760 –> 00:11:31,360
Export the exact filter context and include lineage and
301
00:11:31,360 –> 00:11:32,440
access logs.
302
00:11:32,440 –> 00:11:35,880
In SQL select, from Finance Warehouse at snapshot daily
303
00:11:35,880 –> 00:11:38,280
2025 1014.
304
00:11:38,280 –> 00:11:40,800
DBO.kPI facts where KPI key at year,
305
00:11:40,800 –> 00:11:45,200
the zone 42, then package the query, the snapshot metadata,
306
00:11:45,200 –> 00:11:48,000
name and timestamp, and the audit log entry that shows when
307
00:11:48,000 –> 00:11:49,840
and by whom the snapshot was created.
308
00:11:49,840 –> 00:11:52,000
Evidence beats opinion every time.
309
00:11:52,000 –> 00:11:54,400
Retention hygiene, daily snapshots for 30 days.
310
00:11:54,400 –> 00:11:56,840
Prune non-critical daily on a schedule, preserve months and
311
00:11:56,840 –> 00:11:59,120
quarter and indefinitely or per policy.
312
00:11:59,120 –> 00:12:01,720
Store metadata about each preserved snapshot.
313
00:12:01,720 –> 00:12:05,720
timestamp, pipeline run ID, validation status, schema hash.
314
00:12:05,720 –> 00:12:08,200
That index is your library catalog without it your back to
315
00:12:08,200 –> 00:12:09,840
rummaging in boxes.
316
00:12:09,840 –> 00:12:12,080
Cost control via zero copy remembers snapshots are
317
00:12:12,080 –> 00:12:15,360
pointers not clones resist the urge to export CSVs just in
318
00:12:15,360 –> 00:12:16,320
case.
319
00:12:16,320 –> 00:12:19,560
If someone insists, root exports through DLP policies and
320
00:12:19,560 –> 00:12:22,160
sensitivity labels so the inevitable leak is at least
321
00:12:22,160 –> 00:12:25,200
controlled or better expose read only snapshot access and
322
00:12:25,200 –> 00:12:28,360
forbid raw exports entirely governance is not a vibe either
323
00:12:28,360 –> 00:12:31,880
common mistakes to avoid do not snapshot after ETL starts
324
00:12:31,880 –> 00:12:34,880
you’ll capture a moving target do not mix snapshot tables
325
00:12:34,880 –> 00:12:37,200
with life tables in the same report unless you enjoy
326
00:12:37,200 –> 00:12:40,400
reconciling nonsense do not allow pipeline owners to roll
327
00:12:40,400 –> 00:12:43,040
snapshots forward before validations pass and do not
328
00:12:43,040 –> 00:12:46,800
forget RBIAC and per view labels snapshots inherit sensitive
329
00:12:46,800 –> 00:12:50,720
data they don’t magically anonymize it month and pre ETL
330
00:12:50,720 –> 00:12:53,280
audit replay these are the same pattern with different
331
00:12:53,280 –> 00:12:58,160
timestamps freeze validate advance if this feels almost
332
00:12:58,160 –> 00:13:02,800
insultingly simple good complexity is where errors hide
333
00:13:02,800 –> 00:13:06,280
simplicity is where trust lives one more pragmatic tip
334
00:13:06,280 –> 00:13:09,720
version your semantic layer against logical names current read
335
00:13:09,720 –> 00:13:12,600
only for daily work month and cheek for closes audit on
336
00:13:12,600 –> 00:13:15,760
for investigations update one parameter to move the entire
337
00:13:15,760 –> 00:13:18,880
reporting estate between time anchors no data set rebuilds
338
00:13:18,880 –> 00:13:22,720
no broken visuals no 9 a.m. chaos the result uninterrupted
339
00:13:22,720 –> 00:13:25,640
kpi’s during loads reproducible audits and minutes and storage
340
00:13:25,640 –> 00:13:28,560
bills that don’t scream snapshots handle truth pipelines
341
00:13:28,560 –> 00:13:31,440
handle change you finally separated the kitchen from the dining
342
00:13:31,440 –> 00:13:35,440
room try not to serve half cooked meals again scenario one month
343
00:13:35,440 –> 00:13:38,960
and close that doesn’t break reproducible finance finance
344
00:13:38,960 –> 00:13:41,960
doesn’t want vibes it wants identical numbers every time you
345
00:13:41,960 –> 00:13:45,520
rerun the P&L for a closed period closing the books means
346
00:13:45,520 –> 00:13:48,200
you freeze reality and stop arguing with it that’s the entire
347
00:13:48,200 –> 00:13:51,760
game if late facts keep sliding in and your total drift after
348
00:13:51,760 –> 00:13:54,920
sign off you don’t have a close you have a rolling suggestion
349
00:13:54,920 –> 00:13:57,520
here’s the pattern that actually works on the last day of the
350
00:13:57,520 –> 00:14:01,000
month at your defined fiscal cutoff capture a warehouse snapshot
351
00:14:01,000 –> 00:14:04,160
and name it like an adult month in twenty twenty five zero nine
352
00:14:04,160 –> 00:14:07,400
finance models point to that snapshot the moment it exists
353
00:14:07,400 –> 00:14:11,320
after that nothing new for September appears in those views
354
00:14:11,320 –> 00:14:14,440
unless you create an explicit documented adjustment through an
355
00:14:14,440 –> 00:14:17,440
adjustments process not a sneaky data load mechanically
356
00:14:17,440 –> 00:14:19,800
you’ve already got the commands from earlier the moment your
357
00:14:19,800 –> 00:14:23,760
validations pass at close you execute the capture or roll the prepared
358
00:14:23,760 –> 00:14:27,360
month and snapshot to the exact cutoff time stamp the snapshot becomes
359
00:14:27,360 –> 00:14:30,360
the ledger for reporting your semantic model either connects directly to
360
00:14:30,360 –> 00:14:33,840
the name snapshot or uses a parameter that targets it the result
361
00:14:33,840 –> 00:14:36,840
this week’s P&L next week’s P&L and next quarters rerun for audit
362
00:14:36,840 –> 00:14:40,120
panel match decimal for decimal because the source state is frozen
363
00:14:40,120 –> 00:14:43,160
quick wind that pays for itself in one meeting and executive asks
364
00:14:43,160 –> 00:14:46,360
wider September’s margin look lower in the new dashboard you switch the
365
00:14:46,360 –> 00:14:50,080
parameter to month and two thousand twenty five zero nine hit refresh
366
00:14:50,080 –> 00:14:53,680
and their view aligns with the signed version identical totals identical
367
00:14:53,680 –> 00:14:56,840
dimensional breakdowns identical drill through results the
368
00:14:56,840 –> 00:15:01,680
conversation shifts from which version to why did we miss a price increase
369
00:15:01,680 –> 00:15:05,160
in other words you discuss business not plumbing common mistakes in
370
00:15:05,160 –> 00:15:09,040
finance land are painfully predictable allowing late facts to mutate
371
00:15:09,040 –> 00:15:12,760
close periods is the big one if the business truly needs a post-close
372
00:15:12,760 –> 00:15:16,200
entry create an October adjustment that reverses into September in the
373
00:15:16,200 –> 00:15:19,240
finance system and reflected as a separate adjustments table joint at
374
00:15:19,240 –> 00:15:23,800
query time still within the month and snapshot boundary second failing to
375
00:15:23,800 –> 00:15:28,960
archive snapshot metadata keep a minimal catalog snapshot name timestamp pipeline
376
00:15:28,960 –> 00:15:33,320
run ID validation checksum and schema hash when the auditor asks how you know
377
00:15:33,320 –> 00:15:36,920
nothing changed you show the checksum and the lineage not your memory and
378
00:15:36,920 –> 00:15:41,080
yes people will try to optimize by pointing some reports at life for freshness
379
00:15:41,080 –> 00:15:45,480
no if it references a closed period it hits the month and snapshot if it’s
380
00:15:45,480 –> 00:15:48,800
forecasting or current month provision analysis it can read current read only
381
00:15:48,800 –> 00:15:53,080
separate time anchors by purpose adults can handle two truths the signed past
382
00:15:53,080 –> 00:15:56,440
and the evolving present just don’t mix them in the same visual and pretend
383
00:15:56,440 –> 00:16:00,480
it’s inside the payoff is boring by design month and that doesn’t break
384
00:16:00,480 –> 00:16:04,240
audits that stop camping in your inbox and fp and a teams that trust the
385
00:16:04,240 –> 00:16:08,160
semantic layer enough to build on it stability over recency especially for
386
00:16:08,160 –> 00:16:12,520
close isn’t negotiable it’s how you end math arguments before they start scenario
387
00:16:12,520 –> 00:16:17,000
to pre-ETL snapshot for query stability during loads zero downtime reporting
388
00:16:17,000 –> 00:16:21,200
now let’s fix your daily nine day mkos your pipelines kickoff dashboards wobble
389
00:16:21,200 –> 00:16:25,280
and someone posts don’t refresh in slack like that’s a strategy you don’t need
390
00:16:25,280 –> 00:16:29,240
a ceasefire you need isolation the pre-ETL snapshot pattern gives you zero
391
00:16:29,240 –> 00:16:32,360
downtime reporting while the warehouse mutates in peace here’s the
392
00:16:32,360 –> 00:16:36,640
choreography that actually holds under pressure step one immediately before your
393
00:16:36,640 –> 00:16:40,320
ingestion window starts capture or roll a snapshot named current read only
394
00:16:40,320 –> 00:16:45,120
that becomes the stable read surface for analysts during the entire load step
395
00:16:45,120 –> 00:16:49,120
to run your ingest and transforms break things fix things privately step three
396
00:16:49,120 –> 00:16:54,720
validate row counts reconciliation checks schema expectations if everything passes
397
00:16:54,720 –> 00:16:59,600
step four roll forward current read only to the new time stamp clients keep the
398
00:16:59,600 –> 00:17:03,480
same connection string their world flips to the new consistent state without a
399
00:17:03,480 –> 00:17:07,480
reconnect without a tap closing festival without the which cluster am I on well
400
00:17:07,480 –> 00:17:13,520
scavenger hunt in a pipeline it looks like this snapshot ingest transform validate
401
00:17:13,520 –> 00:17:18,640
alter database update snapshot timestamp if validation fails you stop the snapshot
402
00:17:18,640 –> 00:17:22,320
stays at yesterday’s good state and the business keeps querying a coherent
403
00:17:22,320 –> 00:17:26,520
world no partial snow wise yesterday smaller than two days ago because you
404
00:17:26,520 –> 00:17:29,760
didn’t publish half a batch and call it progress what changes for analysts
405
00:17:29,760 –> 00:17:34,640
nothing noticeable which is the point kpi stay green visuals don’t flicker
406
00:17:34,640 –> 00:17:38,680
model refreshes don’t crash into schema changes mid-flight the only visible
407
00:17:38,680 –> 00:17:42,480
changes that your reports stop gaslighting people if a dashboard must refresh at
408
00:17:42,480 –> 00:17:45,960
eight thirty it pulls from yesterday’s consistent snapshot if it refreshes at
409
00:17:45,960 –> 00:17:49,400
ten thirty after validation it pulls from today’s consistent snapshot both
410
00:17:49,400 –> 00:17:53,120
are valid realities neither is a half-built bridge let me save you from two traps
411
00:17:53,120 –> 00:17:57,000
first rolling the snapshot forward before validations that’s how you ship
412
00:17:57,000 –> 00:18:01,360
anomalies as facts validate first then promote the truth second rebinding models
413
00:18:01,360 –> 00:18:04,880
instead of updating the snapshot timestamp don’t make users chase a new
414
00:18:04,880 –> 00:18:09,960
connection keep current read only as the stable name move the time anchor under
415
00:18:09,960 –> 00:18:14,680
the hood your semantic model stays untouched your governance stays boring if you
416
00:18:14,680 –> 00:18:18,400
need a sanity check add a tiny fact table that stores the snapshot’s effective
417
00:18:18,400 –> 00:18:22,600
timestamp and expose it as a measure in power bi when someone claims these
418
00:18:22,600 –> 00:18:26,320
numbers changed during my meeting you point at the timestamp measure it didn’t
419
00:18:26,320 –> 00:18:30,360
move their meeting just felt long cost wise this beats every clone the warehouse
420
00:18:30,360 –> 00:18:34,200
work around you’ve tried snapshots are zero copy you’re not doubling storage
421
00:18:34,200 –> 00:18:38,440
you’re pinning time and you’re not thoughtling ETL to a piece panicked refreshes
422
00:18:38,440 –> 00:18:42,280
compute works when it should reports refresh when they should no more scheduling
423
00:18:42,280 –> 00:18:46,000
gymnastics to hit imaginary quiet windows the result is the same theme with a
424
00:18:46,000 –> 00:18:51,000
daily rhythm freeze validate advance you separate the kitchen from the dining
425
00:18:51,000 –> 00:18:54,760
room surf fully cooked data and stop warning customers not to taste the soup
426
00:18:54,760 –> 00:18:58,840
during seasoning query stability during loads isn’t a miracle it’s a time stamp
427
00:18:58,840 –> 00:19:03,360
with discipline scenario three audit replay without restores provenance on
428
00:19:03,360 –> 00:19:07,120
demand auditors don’t want your best recollection they want the exact state as
429
00:19:07,120 –> 00:19:11,320
of a timestamp approximations fail control testing snapshots make audit
430
00:19:11,320 –> 00:19:15,920
replay boring in a good way workflow clean and repeatable you target the snapshot
431
00:19:15,920 –> 00:19:20,160
from the audit date run the query and package evidence with lineage the core is
432
00:19:20,160 –> 00:19:26,920
explicit time anchoring example select from finance warehouse at snapshot daily
433
00:19:26,920 –> 00:19:33,160
2025 10 14 you be dot the ledger where account key equals 410 pair that result
434
00:19:33,160 –> 00:19:37,680
with the snapshots metadata name timestamp pipeline run ID and validation status
435
00:19:37,680 –> 00:19:42,600
and your purview audit logs showing who created and access that that’s provenance
436
00:19:42,600 –> 00:19:47,520
on demand numbers lineage and access proof in one bundle no restores no
437
00:19:47,520 –> 00:19:52,000
downtime no please wait while it spins up a clone two guardrails don’t mix
438
00:19:52,000 –> 00:19:55,640
snapshot data with current warehouse tables in the same report that muddies
439
00:19:55,640 –> 00:19:59,600
the temporal context and run the LP on any exported evidence so sensitive data
440
00:19:59,600 –> 00:20:03,520
doesn’t take an unplanned field trip quick win a 10 minute evidence pack that
441
00:20:03,520 –> 00:20:07,280
reconciled to the sent ties to the lineage graph and closes the ticket without a
442
00:20:07,280 –> 00:20:12,240
war room evidence beats opinion every time the read replica myth versus snapshot
443
00:20:12,240 –> 00:20:17,080
reality replicas mirror volatility they copyrights good bad and malformed at
444
00:20:17,080 –> 00:20:22,120
scale throughput improves certainty does not the truth a replica of a moving
445
00:20:22,120 –> 00:20:25,920
target is still a moving target just elsewhere snapshots freeze time transaction
446
00:20:25,920 –> 00:20:29,880
the consistent read only reproducible they don’t chase rights they memorialize
447
00:20:29,880 –> 00:20:34,400
estate use replicas to balance load use snapshots to guarantee trust common
448
00:20:34,400 –> 00:20:39,520
confusion my replica will protect reporting during ETL no it faithfully streams
449
00:20:39,520 –> 00:20:43,600
the same mid flight changes your dashboard still catches half batches snapshot
450
00:20:43,600 –> 00:20:47,400
isolation avoids that by presenting only committed data as of a timestamp and
451
00:20:47,400 –> 00:20:52,600
it never morphs midquery when to choose replicas for concurrency and read
452
00:20:52,600 –> 00:20:57,520
scale snapshots for governance audit month and unstable analytics combine them
453
00:20:57,520 –> 00:21:02,400
if you enjoy performance uncertainty read scale on a snapshot back surface the
454
00:21:02,400 –> 00:21:06,280
reason this works is simple isolation semantics plus zero copy pointers beat
455
00:21:06,280 –> 00:21:11,400
eventual anything governance security and cost control purview plus zero copy
456
00:21:11,400 –> 00:21:15,680
this is where adults run the data estate are be asked first restrict who can
457
00:21:15,680 –> 00:21:19,640
create view or role forward snapshots not everyone gets scissors give data
458
00:21:19,640 –> 00:21:24,080
engineers the create advance rights give analysts read and keep finances month and
459
00:21:24,080 –> 00:21:27,880
snapshot read only for their group one reckless advance at the wrong moment and
460
00:21:27,880 –> 00:21:31,360
you’re back to chaos so don’t grant the button to the average users sensitivity
461
00:21:31,360 –> 00:21:36,640
labels next snapshots inherit sensitive data apply purview labels so PII stays
462
00:21:36,640 –> 00:21:40,520
classified address and in motion if a table is confidential in the warehouse it’s
463
00:21:40,520 –> 00:21:44,160
confidential in the snapshot you don’t get absolutely by freezing it pair that
464
00:21:44,160 –> 00:21:48,160
with DLP so exported evidence doesn’t escape via someone’s desktop heroics
465
00:21:48,160 –> 00:21:52,600
governance isn’t a sticker it’s enforced behavior audit and lineage are your
466
00:21:52,600 –> 00:21:57,320
proof turn on detailed logs for snapshot creation access and updates then
467
00:21:57,320 –> 00:22:00,840
surface them in a power BI compliance dashboard now when someone asks who
468
00:22:00,840 –> 00:22:04,760
touched the month and ledger you answer with a timestamp event not folklore
469
00:22:04,760 –> 00:22:08,760
lineage ties the snapshot to upstream pipelines and validations which is how you
470
00:22:08,760 –> 00:22:12,520
trace discrepancies in minutes instead of calendar weeks retention policy is
471
00:22:12,520 –> 00:22:17,400
your exposure control daily snapshots for 30 days then prune preserve month and
472
00:22:17,400 –> 00:22:22,080
and quarter and per policy keep a slim catalog name timestamp pipeline run ID
473
00:22:22,080 –> 00:22:25,760
validation checksum schema hash that’s your chain of custody without it you’re
474
00:22:25,760 –> 00:22:29,800
back to trust me bro which auditors love about as much as surprise karaoke and
475
00:22:29,800 –> 00:22:34,440
cost zero copy means you stop paying for duplicate bits snapshots are metadata
476
00:22:34,440 –> 00:22:38,600
pointers not terabyte clones compare that to CSV sprawl full duplicates with no
477
00:22:38,600 –> 00:22:42,560
governance that quietly inflates storage and incident risk you centralize access
478
00:22:42,560 –> 00:22:47,840
reduce exports and keep storage sane while ops stays fast performance is
479
00:22:47,840 –> 00:22:52,440
nice predictable cost under control is nicer the only version of truth is the one
480
00:22:52,440 –> 00:22:57,040
you freeze key takeaway stability beats recently snapshots give
481
00:22:57,040 –> 00:23:00,680
transactionally consistent auditable analytics that don’t wobble during loads
482
00:23:00,680 –> 00:23:05,160
or willed under audit adopt the pre ETL snapshot pattern this week schedule
483
00:23:05,160 –> 00:23:09,240
month and captures with a real catalog and wire audit replace evidence is a 10
484
00:23:09,240 –> 00:23:13,200
minute task if you want the t-sequel and DAX pack I showed plus the retention
485
00:23:13,200 –> 00:23:18,480
and rollback checklist subscribe now and watch the next video proceed