Created
June 29, 2022 15:07
-
-
Save data-goblin/b5f4b665038a260a3c5c47d40907ceb5 to your computer and use it in GitHub Desktop.
Revisions
-
data-goblin created this gist
Jun 29, 2022 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,68 @@ // This code is still WIP, it doesn't entirely filter the lineage. Feel free to make adjustments. string dependancies = "::: mermaid\ngraph 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)) { 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 \n:::"); dependancies.Output();