Aggregating a stream over sliding or tumbling time windows
Windowing (analytic) functions let you compute ranks, running totals, and row-to-row comparisons across a set of related rows without collapsing them into groups, using the OVER() clause with PARTITION BY and ORDER BY. In Fabric, you create these using Spark SQL/PySpark in notebooks or T-SQL in the Warehouse/SQL endpoint, applying functions like ROW_NUMBER, RANK, LAG/LEAD, and aggregate-over-window patterns.
Must-know
- The OVER() clause defines the window: PARTITION BY groups rows (like GROUP BY but keeps all rows), and ORDER BY defines the sequence within each partition for ranking and offset functions.
ROW_NUMBERalways assigns unique sequential integers even for ties, RANK skips numbers after ties, andDENSE_RANKdoes not skip numbers after ties: choose based on whether gaps are desired.- LAG and LEAD access prior/following row values within a partition and require an ORDER BY; an optional offset and default value can be specified for rows without a match.
- Aggregate functions (SUM, AVG, COUNT, MIN, MAX) become window functions when combined with OVER(), enabling running totals or moving averages without a GROUP BY.
- Frame specifications (ROWS BETWEEN / RANGE BETWEEN, e.g., UNBOUNDED PRECEDING AND CURRENT ROW) control exactly which rows within the partition are included in the calculation for each row.
- In PySpark, window specs are built with the Window class (Window.partitionBy(...).orderBy(...)) and passed to functions like
F.row_number().over(windowSpec); in Fabric Warehouse T-SQL, the same OVER()/PARTITION BY/ORDER BY syntax as SQL Server/Synapse applies.
A data engineer working in a Fabric notebook needs to keep only the most recent transaction for each account_id from a Delta table that contains many historical rows per account. Some accounts have multiple transactions with the exact same transaction_date. The engineer starts with:
window_spec = Window.partitionBy('account_id').orderBy(col('transaction_date').desc())
df_ranked = df.withColumn('rn', ???)
df_latest = df_ranked.filter(col('rn') == 1)
Which function should replace ??? so that exactly one row per account_id is kept, even for accounts whose latest transactions share the same transaction_date?
What you have tried across DP-700's objectives, not a readiness score.
Implement and manage an analytics solution
- Tuning a workspace's Spark compute defaults and pool sizing
- Grouping and governing workspaces with a Fabric domain
- Setting per-workspace defaults for OneLake storage
- Standing up an Airflow job runtime inside a workspace
- Connecting a workspace to a Git repository
- Managing schema changes with a database project
- Promoting Fabric items across environments with a deployment pipeline
- Granting and restricting access at the workspace level
- Locking down who can open a single Fabric item
- Layering row, column, object, and file-level security rules
- Hiding sensitive column values behind a dynamic mask
- Classifying Fabric items with a sensitivity label
- Marking a trusted item as promoted or certified
- Reading a Fabric audit log to see who did what
- Securing data at the OneLake storage layer
- Picking the right build tool among a dataflow, a pipeline, and a notebook
- Kicking off a job on a schedule or in response to an event
- Chaining notebooks and pipelines together with parameters and dynamic expressions
Ingest and transform data
- Deciding between a full reload and an incremental load
- Shaping source data ahead of a dimensional-model load
- Landing a continuous stream of data into storage
- Matching a workload to the right Fabric data store
- Picking a transformation tool from dataflows, notebooks, KQL, or T-SQL
- Linking to external data without copying it via a OneLake shortcut
- Keeping a source database continuously replicated into Fabric
- Moving data into Fabric with a data pipeline
- Writing transform logic in PySpark, SQL, or KQL
- Flattening related tables into one wide, denormalized shape
- Rolling records up with group-by aggregations
- Dealing with duplicate rows, gaps, and data that arrives late
- Selecting the right engine for a real-time workload
- Weighing storage-in-place against a linked shortcut for a Real-Time Intelligence table
- Weighing an accelerated shortcut against a standard one for query speed
- Routing and reshaping live events with an Eventstream
- Handling a continuous flow of records with Spark's structured streaming
- Querying and reshaping event data with KQL
- Aggregating a stream over sliding or tumbling time windows
Monitor and optimize an analytics solution
- Watching an ingestion job's health and progress
- Watching a transformation job's health and progress
- Tracking whether a semantic model's refresh actually succeeded
- Setting up an alert to catch a failure early
- Tracking down why a pipeline run failed and fixing it
- Diagnosing why a dataflow run failed
- Debugging a notebook run that failed
- Troubleshooting a misbehaving Eventhouse
- Troubleshooting a misbehaving Eventstream
- Debugging a T-SQL statement that failed
- Fixing a broken or unreachable shortcut
- Speeding up a Lakehouse table with maintenance operations
- Making a slow pipeline run faster
- Tuning a Fabric warehouse for faster queries
- Improving throughput on real-time streaming components
- Tuning a Spark job to run faster and cheaper
- Making a slow query run faster
Coverage checked against the published exam guide on Aug 11, 2026.
These are independent practice questions, written against this certification's published exam guide. They are not the certification vendor's own questions, and not the real exam.