Массовые операции с измерениями в Power BI
Требование, с которым мы сталкиваемся очень часто в наших проектах, состоит в том, чтобы иметь возможность легко повторно использовать несколько измерений, особенно при работе с аналогичными моделями данных в стандартном источнике данных, например, таких как системы учета на основе облаков, такие как Dynamics, Xero, QuickBooks и т. д.
Один из вариантов - стандартизированные .pbit-шаблоны, которые автоматически генерируются в Acterys, но они не могут использоваться в каждой ситуации. Power BI пока не предлагает сценарий, такой как SSAS MD, где вы можете легко скопировать определения измерений из одной модели в другую. Вы также не можете выбрать несколько измерений и скопировать их из одного отчета в другой. Используя только Power BI, вы должны скопировать по одному измерению каждый для каждого измерения, которое вы хотите использовать повторно.
Немного раздражает ... Но есть отличный выход. Официально не поддерживается Microsoft, но это работает.
Решением является Tabular Editor - настоящая находка для нас, консультирующих специалистов, которые должны повторно использовать меры и применять массовые действия для принятия мер на постоянной основе.
Большое спасибо Даниэлю Отыкье, который является вдохновителем редактора таблиц, и благодаря которому улучшена техника, которая здесь освещена. Даниэль должен, по нашему мнению, быть очень горячим претендентом на разработку «наиболее полезного инструмента Power BI Community».
Редактор таблиц предлагает отличные функции редактирования и сценариев для таблиц SSAS для баз данных Power BI.
Как это работает?
Предупреждение об опасности
Вы получите предупреждение о том, что то, что вы собираетесь делать, опасно и официально не поддерживается:
Кто не рискует, тот не пьет шампанского…
Но мы настоятельно рекомендуем сделать так, как предписывает диалог, и создать резервную копию вашего файла.
После того, как вы совершили большой прыжок на темную «неподдерживаемую сторону» и подключили свою модель, вы можете перемещаться по своей модели, таблицам и всем мерам, например:
Отсюда вы можете выбрать столько параметров, сколько захотите, скопировать их в буфер обмена или применить другие массовые действия.
Но не так быстро ....
Есть одна важная вещь, которую вы должны сделать заранее: процесс копирования не похож на аннотации формата с измерениями. Итак, если вы продолжаете действовать именно таким образом, вы получите сообщение об ошибке, как только вы попытаетесь сохранить вложенные меры в своей целевой модели.
Относительно этой проблемы, Даниэль предлагает применить сценарий, который удаляет аннотации формата из мер. Это одна простая строка:
Selected.Measures.ForEach(m => m.RemoveAnnotation(“Format”));
Фишка
Чтобы заставить его работать, выберите все свои измерения, которые вы хотите скопировать и скопируйте этот скрипт в вкладку Advanced Scripting и запустите сценарий (щелкните по зеленому треугольнику):
Вот и все. Теперь вы можете просто нажать CTRL-C или перейти в “Edit” -> “Copy”, и ваши определения измерений - в буфере обмена.
Единственный оставшийся шаг - открыть файл BI .pbix для источника назначения с другим экземпляром редактора таблиц. Перейдите к соответствующей таблице и вставьте ее из буфера обмена. Вуаля, все ваши измерение здесь.
Аналогичный подход может также использоваться для других массовых операций. Например, если вы хотите применить один и тот же формат чисел к нескольким измерениям сразу, просто выберите их и выберите строку формата в свойствах табличного редактора.
Последнее: если вы используете Quick Measures: это также не очень удобно при копировании и вставке. Чтобы он работал, вы должны запустить этот сценарий, разработанный Даниэлем. Он удалит как аннотацию формата, так и расширенные свойства.
var extProp = typeof(Measure).GetProperties( System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic ).FirstOrDefault(p => p.PropertyType.Name == “Measure” && p.Name == “MetadataObject”); foreach(var m in Selected.Measures){ m.RemoveAnnotation(“Format”); var tomObject = (Microsoft.AnalysisServices.Tabular.Measure)extProp.GetValue(m); tomObject.ExtendedProperties.Clear();}