Created
June 29, 2022 15:04
-
-
Save data-goblin/06a910f48b8f2e8206741d39312aeb96 to your computer and use it in GitHub Desktop.
A Tabular Editor C# script to generate a context-dependent mermaid diagram (flowchart) of measure dependencies based on the selected measure.
This file contains 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
// This code is still WIP, it doesn't entirely filter the lineage. Feel free to make adjustments. | |
string dependancies = "flowchart LR\n%% Measure dependancy mermaid flowchart"; | |
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
foreach(var _measures in Model.AllMeasures ) | |
{ | |
// Deep lineage for upstream measures | |
var _upstream_deep = _measures.DependsOn.Deep(); | |
var _upstream_measures_deep = _upstream_deep.OfType<Measure>().Select(c => c).Distinct(); | |
// Direct lineage for upstream measures | |
var _upstream = _measures.DependsOn; | |
var _upstream_measures = _upstream.Measures.OfType<Measure>().Select(c => c).Distinct(); | |
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
// Deep lineage for downstream measures | |
var _downstream_deep = _measures.ReferencedBy.Deep(); | |
var _downstream_measures_deep = _downstream_deep.OfType<Measure>().Select(c => c).Distinct(); | |
// Direct lineage for downstream measures | |
var _downstream = _measures.ReferencedBy; | |
var _downstream_measures = _downstream.Measures.OfType<Measure>().Select(c => c).Distinct(); | |
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
// Only adds upstream measures if they are in the deep lineage | |
if ( _upstream_measures_deep.Contains(Selected.Measure) ) | |
{ | |
foreach( var measure_dependencies in _upstream_measures ) | |
{ | |
dependancies += string.Format("\r\n\t{2}[\"{3}\"] --> {0}[\"{1}\"]", | |
_measures.LineageTag, | |
_measures.Name, | |
measure_dependencies.LineageTag, | |
measure_dependencies.Name); | |
} | |
} | |
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
// Only adds downstream measures if they are in the deep lineage | |
if ( _downstream_measures_deep.Contains(Selected.Measure) ) | |
{ | |
foreach( var measure_references in _downstream_measures ) | |
{ | |
if ( | |
measure_references == Selected.Measure || | |
measure_references.ReferencedBy.Measures.OfType<Measure>().Select(c => c).Distinct().Contains(Selected.Measure) || | |
measure_references.DependsOn.Measures.OfType<Measure>().Select(c => c).Distinct().Contains(Selected.Measure)) | |
{ | |
dependancies += string.Format("\r\n\t{0}[\"{1}\"] --> {2}[\"{3}\"]", | |
_measures.LineageTag, | |
_measures.Name, | |
measure_references.LineageTag, | |
measure_references.Name ); | |
} | |
} | |
} | |
} | |
// Formats the selected measure in mermaid using a specific style | |
dependancies += string.Format("\r\n\n%% Formatting\n\tstyle " + Selected.Measure.LineageTag + " fill:#f87272,stroke:#333,stroke-width:2px"); | |
dependancies.Output(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment