Power BI e Source Control tramite Git

Per qualche tempo nel contesto di Power BI, è emersa la necessità da parte dei team di Data Analyst e Data Engineer, di poter creare report in modo collaborativo e in parallelo. Fino ad ora, il contributo di ciascun sviluppatore veniva gestito attraverso un approccio “Waterfall”, che significa “Ho completato lo sviluppo, ti passo il file .pbix”.

Tuttavia, questa metodologia ha mostrato delle limitazioni, poiché non favorisce un flusso di lavoro sinergico tra i membri del team. Fortunatamente, per rispondere a questa crescente esigenza di collaborazione, sono stati introdotti nuovi strumenti e approcci.

Recentemente, infatti, con l’introduzione del mondo Microsoft Fabric, è stato compiuto un ulteriore passo avanti, rendendo sempre più sottile la linea tra analisti e sviluppatori: l’introduzione del formato file .pbip.

Questo nuovo formato di file nel contesto di Power BI consente un’integrazione più fluida delle competenze tra analisti e ingegneri dei dati, promuovendo una maggiore collaborazione e un flusso di lavoro più integrato. Con l’adozione dei file .pbip, il lavoro di gruppo diventa più snello ed efficiente, poiché ogni membro del team può contribuire al progetto in tempo reale, visualizzando e aggiornando le modifiche apportate dagli altri.

Ciò aumenta la produttività e consente una gestione più efficace dei progetti complessi. Inoltre, grazie alla possibilità di utilizzare strumenti di versionamento come Git con i file .pbip, è possibile mantenere una cronologia delle revisioni, facilitando il tracciamento delle modifiche e semplificando il processo di revisione e approvazione del lavoro svolto. In conclusione, l’introduzione dei file .pbip rappresenta una risorsa preziosa per il mondo di Power BI, poiché favorisce una maggiore collaborazione tra analisti e sviluppatori, migliora l’ottimizzazione del flusso di lavoro e consente una creazione più completa e coerente di report e analisi dei dati. Nel prosieguo, sarà presente una guida pratica su come configurare una cartella Power BI con il controllo del codice sorgente. Utilizzeremo GitHub come piattaforma di support per Git.

La configurazione

Il primo passo da compiere è creare una repository e successivamente clonarla in una cartella locale:

No alt text provided for this image

Puoi utilizzare qualsiasi strumento per clonare la repository. Come ad esempio il terminale o GitHub Desktop. Eseguirò questo frammento di codice utilizzando Git nel terminale. Se non hai la command-line interface (CLI) di Git, puoi trovare il link per scaricarla qui.

Dopo aver completato il download, puoi eseguire questo frammento di codice per clonare la repository in una cartella locale:

git clone https://github.com/acordaro18/Adventure_Work_pbi_git.git

Fatto ciò, troverai la repository nella posizione desiderata:

No alt text provided for this image

Apri ora il tuo file .pbix e vai su File > Options and Settings > Options:

No alt text provided for this image

Sul lato sinistro della schermata, vedrai una scheda denominata “Preview Features”. Metti una spunta accanto all’opzione “Power BI project (.pbip) save option”, come mostrato in figura:

No alt text provided for this image

Ora, vai all’opzione “Save as” del file. Ora vedrai disponibile l’opzione “Save as .pbip”. Scegli questa opzione e salva il file nellarepository Git clonato in precedenza. Fatto ciò, troverai nella repository la seguente cartella e i seguenti file:

No alt text provided for this image

Nota bene: la cartella .git e il file .gitignore vengono generati dalla repository Git e non dal salvataggio del file .pbip.

Il report è contenuto nel file di configurazione .pbip, che appare così:

  "version": "1.0",
  "artifacts": [
    {
      "report": {
        "path": "Adventure Works DW 2020.Report"
      }
    }
  ],
  "settings": {
    "enableAutoRecovery": true
  }
}

Questa cartella conterrà ora due ulteriori cartelle: <NomeReport>.Dataset e <NomeReport>.Report. All’interno di queste cartelle, troverai file di configurazione .JSON che Power BI leggerà internamente per compilare il report stesso. Il file più interessante è il file di configurazione <NomeReport>.Dataset/model.bim, che contiene quasi tutte le informazioni su tabelle, colonne, origini di power query e misure DAX.

Facciamo un esempio: all’interno del modello relazionale del nostro report troviamo la tabella “Sales”.

All’interno del file model.bim, che è di fatto un .JSON, sarà possibile trovare la configurazione di tale tabella:

{
	"name": "Sales",
	"annotations": [
		{
			"name": "PBI_ResultType",
			"value": "Table"
		},
		{
			"name": "PBI_NavigationStepName",
			"value": "Navigation"
		}
	],
	"columns": [...],
	"lineageTag": "a8c377ce-4d50-438f-8719-83999a5c58af",
	"partitions": [
		{
			"name": "Sales-1c496a38-f0f4-4d25-b987-657177c38553",
			"mode": "import",
			"source": {
				"expression": [
					"let",
					"    Source = Sql.Database(SqlServerInstance, SqlServerDatabase),",
					"    dbo_vFactSales = Source{[Schema=\"dbo\",Item=\"vFactSales\"]}[Data],",
					"    #\"Removed Other Columns\" = Table.SelectColumns(dbo_vFactSales,{\"SalesOrderLineKey\", \"ResellerKey\", \"CustomerKey\", \"ProductKey\", \"OrderDateKey\", \"DueDateKey\", \"ShipDateKey\", \"CurrencyKey\", \"SalesTerritoryKey\", \"OrderQuantity\", \"UnitPrice\", \"ExtendedAmount\", \"UnitPriceDiscountPct\", \"ProductStandardCost\", \"TotalProductCost\", \"SalesAmount\"}),",
					"    #\"Changed Type\" = Table.TransformColumnTypes(#\"Removed Other Columns\",{{\"OrderQuantity\", Int64.Type}}),",
					"    #\"Renamed Columns\" = Table.RenameColumns(#\"Changed Type\",{{\"ExtendedAmount\", \"Extended Amount\"}, {\"OrderQuantity\", \"Order Quantity\"}, {\"ProductStandardCost\", \"Product Standard Cost\"}, {\"SalesAmount\", \"Sales Amount\"}, {\"TotalProductCost\", \"Total Product Cost\"}, {\"UnitPrice\", \"Unit Price\"}, {\"UnitPriceDiscountPct\", \"Unit Price Discount Pct\"}})",
					"in",
					"    #\"Renamed Columns\""
				],
				"type": "m"
			}
		}
	]
}

Possiamo esaminare come all’interno di questo frammento di codice siano inclusi tutti gli elementi correlati, compreso il codice M utilizzato dall’engine di Power Query per definire la fonte di dati.