Compare
Diff two versions of a model down to the property and the line of DAX, then cherry-pick exactly the changes you want into the model you have open. Compare works against a git ref, a file on disk, or another live model, so it fits dev-versus-prod drift checks and hotfix porting alike.
#In the Studio

The Compare tab shows an object-level diff: per table, column, measure, relationship and role, whether it is a Create, Update or Delete, with the before and after text. Drill from an object down to the specific property and the exact code that changed.
Pick a comparison target: the last commit, a branch or tag, a model file, or another model you have open. Then cherry-pick a merge, select the objects you want and bring just those across.
#Over MCP
The diff and merge primitives are dual-drive:
model_diffis the semantic compare. By default it compares the open model against the git refHEAD(what you changed since the last commit); pass a different git ref to compare against a branch or commit, a target file to compare against a model on disk, or two files to compare each other. It returns the per-object Create/Update/Delete with before/after text, and it is read-only.cherry_pickcopies objects from another model into the open one (a teammate's measure into yours, say). It is a dry run by default (it reports what would copy, what already exists, and what cannot), andcommit=trueapplies it as one undoable batch. It handles measures, calculated columns and calculation items into an existing group.apply_model_diffgoes the other way: it merges the open model's changes into a target file, making the target match the open model for the objects you choose. It is also dry-run by default, withcommit=trueto write andselectedRefsto limit the scope.- Multi-model sessions are first-class:
open_modelopens another model andcreate_modelstarts a new one from scratch, so you can hold both sides at once.
model_diff # open model vs HEAD (uncommitted changes)
model_diff gitRef=origin/prod # dev vs prod drift
cherry_pick sourceFile=<prod.bim> refs=["measure:Sales/Margin %"] # dry run
cherry_pick sourceFile=<prod.bim> refs=["measure:Sales/Margin %"] commit=true # apply
#Two everyday jobs
- Dev versus prod drift.
model_diffagainst the production git ref (or a live endpoint) shows exactly which objects diverged, before anyone deploys. - Hotfix porting. Fixed a measure in one branch and need it in another?
cherry_pickbrings just that measure across, dry-run first so you see whether it would overwrite anything, then committed as one undoable step.
Copying or merging a single object is free. Bringing more than one object across in a single undoable batch (a bulk cherry-pick or diff apply) is the one-click Pro operation, the same gate as every other bulk primitive. See Pro.
Semanticus