Last active
March 2, 2025 01:10
-
-
Save bjulius/45edda84a1486eb2204d8c35daf684b7 to your computer and use it in GitHub Desktop.
C# script for Tabular Editor/TE3 to extract table, column, relationship, and measure info in json format from Power BI PBIX files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//C# script for Tabular Editor/TE3 to extract table, column, relationship, and measure info in json format from Power BI PBIX files | |
//Written by Brian Julius, 3 Oct 2024 | |
// Specify the output file path | |
string outputFile = @"C:\Temp\PowerBI_Model_Info.txt"; // Change this to your desired path | |
using (var writer = new System.IO.StreamWriter(outputFile)) | |
{ | |
// TMSCHEMA_TABLES | |
writer.WriteLine("TMSCHEMA_TABLES"); | |
var dsTables = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_TABLES"); | |
var dtTables = dsTables.Tables[0]; | |
WriteDataTableToCsv(dtTables, writer); | |
writer.WriteLine(); // Add an empty line for readability | |
// TMSCHEMA_COLUMNS | |
writer.WriteLine("TMSCHEMA_COLUMNS"); | |
var dsColumns = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_COLUMNS"); | |
var dtColumns = dsColumns.Tables[0]; | |
WriteDataTableToCsv(dtColumns, writer); | |
writer.WriteLine(); | |
// TMSCHEMA_RELATIONSHIPS | |
writer.WriteLine("TMSCHEMA_RELATIONSHIPS"); | |
var dsRelationships = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_RELATIONSHIPS"); | |
var dtRelationships = dsRelationships.Tables[0]; | |
WriteDataTableToCsv(dtRelationships, writer); | |
writer.WriteLine(); | |
// TMSCHEMA_MEASURES | |
writer.WriteLine("TMSCHEMA_MEASURES"); | |
var dsMeasures = ExecuteDax("SELECT * FROM $SYSTEM.TMSCHEMA_MEASURES"); | |
var dtMeasures = dsMeasures.Tables[0]; | |
WriteDataTableToCsv(dtMeasures, writer); | |
writer.WriteLine(); | |
} | |
// Function to write DataTable to CSV | |
void WriteDataTableToCsv(System.Data.DataTable dt, System.IO.StreamWriter writer) | |
{ | |
// Write the header row | |
for (int i = 0; i < dt.Columns.Count; i++) | |
{ | |
writer.Write(dt.Columns[i].ColumnName); | |
if (i < dt.Columns.Count - 1) | |
writer.Write(","); | |
} | |
writer.WriteLine(); | |
// Write data rows | |
foreach (System.Data.DataRow row in dt.Rows) | |
{ | |
for (int i = 0; i < dt.Columns.Count; i++) | |
{ | |
string value = row[i].ToString(); | |
// Escape double quotes | |
value = value.Replace("\"", "\"\""); | |
// If value contains comma or quote, enclose in double quotes | |
if (value.Contains(",") || value.Contains("\"")) | |
value = "\"" + value + "\""; | |
writer.Write(value); | |
if (i < dt.Columns.Count - 1) | |
writer.Write(","); | |
} | |
writer.WriteLine(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment