Tabular Editor
June 7, 2024

Выгрузка взаимодействия мер из модели данных

Порой для анализа табличной модели нужно распутать клубок мер, что ссылаются друг на друга. Может быть у вас желание удалить меру или переписать ее код. И нужно оценить степень ее влияния на модель.

Написала для этого макрос в Tabular Editor, который выдает список мер и их зависимости от других мер.

На картинке выше, к примеру, можно увидеть, что Дельта строится на основе Продано $ и Продано $ LP. Здесь же можно посмотреть и сами формулы мер.

Код макроса:

string tsv = "Measure\tMExression\tDependsMeasure\tDependsMExression"; // TSV file header row
 
 // Loop through all measures:
 foreach(var m in Model.AllMeasures) {
 
     // Get a list of ALL objects referenced by this measure (both directly and indirectly through other measures):
     var allReferences = m.DependsOn.Deep();
     var allTableReferences = allReferences.OfType<Measure>().Select(c => c).Distinct();
 
     // Output TSV rows - one for each table reference:
     foreach(var t in allTableReferences)
         tsv += string.Format("\r\n{0}\t{1}\t{2}\t{3}", m.Name,m.Expression.Replace("\n", "; "), t.Name, t.Expression.Replace("\n", "; "));
 }
 
 tsv.Output();

Поскольку знаний по C# не достаточно, и дальше не захотелось разбираться в коде, есть нюанс:)

Формула меры может содержать переносы строки, и в ее исходном виде выгрузить в формат tsv у меня не получилось. Поэтому я заменила символ переноса строки на ";". Чтобы в Excel при желании сделать обратный перевод.

В выгрузке выглядит это примерно так:

; var total = [Доставлено] ; var opened = [Открыто]; return DIVIDE(opened,total)

Далее можно применить формулу Excel:

=ПОДСТАВИТЬ(E17;";";СИМВОЛ(10))

И вот уже посимпатичнее для анализа: