Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save data-goblin/b5f4b665038a260a3c5c47d40907ceb5 to your computer and use it in GitHub Desktop.

Select an option

Save data-goblin/b5f4b665038a260a3c5c47d40907ceb5 to your computer and use it in GitHub Desktop.

Revisions

  1. data-goblin created this gist Jun 29, 2022.
    68 changes: 68 additions & 0 deletions selected-measure-dependancies_devops_mermaid.csx
    Original 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();