Выгрузка взаимодействия мер из модели данных
Порой для анализа табличной модели нужно распутать клубок мер, что ссылаются друг на друга. Может быть у вас желание удалить меру или переписать ее код. И нужно оценить степень ее влияния на модель.
Написала для этого макрос в 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))
И вот уже посимпатичнее для анализа: