// 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().Select(c => c).Distinct(); // Direct lineage for upstream measures var _upstream = _measures.DependsOn; var _upstream_measures = _upstream.Measures.OfType().Select(c => c).Distinct(); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Deep lineage for downstream measures var _downstream_deep = _measures.ReferencedBy.Deep(); var _downstream_measures_deep = _downstream_deep.OfType().Select(c => c).Distinct(); // Direct lineage for downstream measures var _downstream = _measures.ReferencedBy; var _downstream_measures = _downstream.Measures.OfType().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().Select(c => c).Distinct().Contains(Selected.Measure) || measure_references.DependsOn.Measures.OfType().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();