# Power BI Deployment Pipelines Pitfalls / Lessons Learnt

Let's assume we are promoting an artifact (e.g., a semantic model) from the Dev environment to the Test environment using Deployment pipelines in PowerBI/Fabric.

---

### 1\. 📦 Artifact Comparison vs Runtime Behavior

* Pipelines **compare model files** (datasets/reports) — *structure, not runtime behavior*.
    
* **Connection settings at runtime** (e.g., database server) are **NOT** part of artifact comparison.
    
* **"No difference"** means *file is same*, **not** that *connection string is right*!
    

### 2\. 🚀 Deployment Rules Behavior

* **Deployment rules are only applied during promotion.**
    
* **Saving deployment rules** does **NOT** change already deployed artifacts.
    
* **You must promote again** after setting deployment rules to apply them!
    

### 3\. ⚡ How Differences Appear

| Action | Pipeline Comparison |
| --- | --- |
| Promote cleanly without manual changes | Same ✅ |
| Manually change deployment rules after promote | Different ❗ |
| Promote again with correct deployment rules | Same ✅ |

### 4\. 🔥 Environment Drift Trap

* If you manually change rules after promotion ➔ **Environment drift detected** ➔ Pipeline shows **Different**.
    
* If rules applied during promotion ➔ **No drift** ➔ Pipeline shows **Same**.
    

### 5\. 🎯 Key Behavior

| Question | Answer |
| --- | --- |
| Does saving deployment rule immediately update model? | ❌ No |
| Does promoting apply deployment rules? | ✅ Yes |
| Does "no difference" guarantee connection strings are correct? | ❌ No |
| How to really guarantee correct server? | ✅ Check parameters manually in Service + use proper deployment rules |

---

# 🧠 Quick Pitfalls to Remember

| Pitfall | How to Avoid |
| --- | --- |
| Thinking "no difference" = correct server connection | Always manually check connection |
| Saving deployment rules but forgetting to promote again | After saving rules, **always promote** once more |
| Manually changing test/prod environment without re-promoting | Prefer controlled promotions with automatic rule apply |

---

# Steps

```plaintext
pgsqlCopyEdit[ Dev Model ]
     |
     | (Promote)
     ↓
[ Test Model (initially same as Dev) ]
     |
     | (Edit Deployment Rules? Save? Must Promote Again!)
     ↓
[ Test Model (now runtime behavior changed to Test server) ]
```

✅ **Artifact stays same inside.**  
✅ **Runtime settings change when promoting with deployment rules.**

---

# ✅ Super Important :

> **Promotion applies rules. Saving rules alone does nothing. "No difference" checks files, not servers. Manual changes cause drift. Always check connections!**

Thanks for Reading ..
