После многих лет злоупотребления VBA, формулами массивов, структурированными ссылками в таблицах и в целом ломкой шеи Excel я обнаружил Power BI. И после борьбы это было хорошо.

Хорошо, с чего мне начать?

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

Получить и преобразовать в Excel

Да, конечно, есть Excel, и в нем есть Data Analysis ToolPak, таблицы, сводные таблицы, Power Maps, Power Pivot, Manage Data Model, Relationships, Get & Transform, Connections ... и, возможно, другие вещи, которые я не могу потрудиться, чтобы попытаться помню или не знаю о чем. Как мне понять все эти варианты?

Я использовал таблицы в excel (и в прошлом сталкивался с функциональными ошибками и ошибками производительности, надеюсь, теперь все исправлены), но я хотел создавать структуры данных и запросы с ними, как вы, например, в Access, поэтому я тяготел к Get & Transform . И это было именно то, на что я надеялся, такими, какими я всегда думал, что Tables должны быть. Однако потребовалось время, чтобы получить концепцию, потому что мне пришлось отделить ее от всех других элементов, упомянутых выше.

Например, можно ли установить отношения с объединениями? Могу ли я добавить таблицы в модель данных, а затем создать отношения? Очевидно нет. Это связи или вопросы, над которыми я работаю? Точно сказать не могу. Итак, хорошо, с чего мне начать? Какая метафора, на чем она основана? Абсолютно никакой помощи от MS в этом я не нашел. Какие поисковые запросы я использую? Это Power Query? это Get & Transform? Без понятия. Итак, да, это заняло некоторое время, но в конце концов я дошел до этого и понял, что могу создать таблицу, а затем из таблицы в первом экземпляре и после этого отобразить запросы в разделе `` Получить и преобразовать '' на вкладке `` Данные '' - это волшебный портал, который я было после. Когда вы создаете запрос из существующей таблицы и сохраняете его, вы можете увидеть этот запрос на панели справа после того, как нажмете «Показать запросы», и вот он: пользовательский интерфейс для создания и управления структурой данных. Здорово.

Редактор запросов

Единственная проблема в том, что терминология не была знакома, а метафора полностью отличается от Access или SQL. Я не видел вариантов для выполнения знакомых вещей, таких как, например, создание объединений, но ладно, через некоторое время это приобретет смысл, когда вы начнете объединять вещи вместе с пользовательским интерфейсом. Вы как бы понимаете, что метод слияния, за которым следует щелчок по значку в результирующем столбце, который добавляется, чтобы выбрать, какие поля ввести из таблицы с правой стороны соединения, является здесь методом.

По мере того, как вы создаете материал с помощью пользовательского интерфейса, вы начинаете видеть, как область Applied Steps заполняется «шагами преобразования», которые вы применяете к таблице. Это имеет смысл.

Вы также можете увидеть, как в строке формул появляются элементы, похожие на ту, что есть в Excel. Попытка выяснить, какой синтаксис формулы для панели формул - это запутанный опыт, когда вы только начинаете (одна из тех многих вещей, которые просты в ретроспективе, но трудны, когда вы боретесь с когнитивной нагрузкой незнания), но в итоге язык формул похож на предложения языка Mashup от MS, который называется M, и мы можем узнать о нем в Справочнике по функциям Power Query M.

Оказывается, строка формул в пользовательском интерфейсе вместе со значками, на которые вы нажимаете, действуют как средство записи макросов VBA и за кулисами создают код, который определяет структуру данных, которую вы создаете, и вы можете увидеть это, щелкнув опцию Advanced Editor. .

М-код

Если вы делаете довольно простые гибридные приложения, вам, вероятно, не нужно об этом знать, но я обнаружил, что это очень помогло мне понять, что происходит на этапах преобразования. Но синтаксис действительно плохо документирован, а идиома, по крайней мере, для меня, разочаровывающая и странная, с неявными структурами, которые доставляют то, что называется контекстом строки.

Я очень сопротивлялся изучению другого языка, который не имел основы в более широком пространстве CS, но затем я обнаружил, что он имеет происхождение от F # .NET, и это меня успокоило. Оказывается, это функциональное программирование.

В последнее время я много программировал на JavaScript и C # .NET, и я думал, что имею некоторое представление о чистых функциях, но я не работал с F # и понятия не имел, что это настолько радикально отличается. Я привык к объектам и функциям, а также к изменчивости. Я понятия не имел, насколько я злой, и меня смущали такие утверждения, как let и in, а также each . В конце концов я понял, что лучше всего понять основы Выражения, значения и let выражения

Выражения, значения и let выражение

Способ чтения структуры

let
 Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
 Value = Source{0}
in
 Value

равно пусть Источник и Значение будут определены как неизменяемые значения в выражении после оператора in. Если это весь код, то Value доступен в глобальной области и может использоваться другими запросами в книге.

Вы можете использовать различные функции Power Query M в правой части назначений в предложении let, но вы можете установить их значение только один раз, а затем вы можете использовать эти значения в одном выражении в предложении in.

Здесь нет циклов, потому что переменная счетчика должна быть изменяемой, и нет никакого условного управления потоком как такового, например, с операторами If и switch. Однако у вас могут быть условные структуры для определения значения, например…

Value = if boolean_expression then #”Value 1” else #”Value 2”,

Это также демонстрирует соглашение о ссылках на переменные с пробелами в них, что удобно для того, чтобы сделать их более читаемыми в пользовательском интерфейсе.

Функции Power Query M

Функции сгруппированы как методы для таких объектов, как Таблица, Список и т. Д., И обычно они включают функцию преобразования в качестве одного аргумента в своей сигнатуре вызова. Этой функции преобразования передается текущий элемент набора, по которому выполняется итерация, например строка для функции Table, и это часто сокращается с помощью оператора each, который является синтаксическим сахаром для определения функции. Как и JavaScript, функция является объектом первого класса, и определение может быть включено в список аргументов. Все это достаточно хорошо объяснено в документации.

Разделение проблем

Когда я искал помощь по различным сценариям, с которыми я столкнулся во время обучения, я продолжал видеть рекомендуемые решения с использованием этой штуки под названием DAX (Выражения анализа данных). У меня была идея, что это была альтернатива M и что это был старый способ делать что-то, основанное на формулах базы данных Excel. К сожалению, также никогда не было никакого ключа к тому, где вы физически печатаете эти гребаные вещи. Итак, я избежал этого и сосредоточился на том, чтобы делать все в M, потому что он имеет родословную с .NET.

Как оказалось, DAX - это язык формул для вещи под названием measures, которая немного похожа на вычисляемые столбцы в Access, но не совсем. Они похожи на функции, которые можно использовать для добавления производного столбца в набор таблиц. Но где?? Позвольте мне попытаться объяснить…

Контроллер представления модели

Редактор запросов, который я описал выше, создает то, что мы обычно называем моделью данных, или просто моделью для краткости. По сути, это куб базы данных, который состоит из структурированных и связанных таблиц. Еще одна важная часть современной системы бизнес-аналитики - Просмотр. Это визуализация данных, в которой все они оживают в виде графиков, карт и тому подобного. Существует также третий компонент, обычно называемый Контроллер, и этот элемент предназначен для управления изменениями в Модель и Просмотр в ответ на действия пользователя.

Здесь я остановлюсь на модели и представлении

Модель

Я уже рассмотрел Модель выше. Это достигается путем установления соединений с источниками данных (в простейшем случае - с таблицами в файлах Excel) и приведения таблиц в нужную форму, чтобы связать их, сгруппировать поиск и преобразовать для создания необходимого куба BI. В первую очередь это делается с помощью M, используя шаги преобразования, которые я представил выше в сочетании с Функции доступа к данным, которые также являются частью платформы Power Query.

Вид

Представление - это то место, где используются Power Maps, Power Pivot, Power View и представление отчетов Power BI, и здесь находятся measures, DAX и отношения. После связывания и формирования ваших данных Модель в Power Query вам может потребоваться добавить некоторую обработку, которая является частью Представления требования, например сводные вычисления, которые зависят от выбранной пользователем группировки или фильтрации и распространения пользовательского ввода на связанные элементы представления.

Контроллер

Эту часть я еще не понимаю: возможно, то, что я назвал моделью, более уместно называть моделью представления (как в MVVM, используемом в приложениях WPF). Но главное - подумать об арке.

Развязка

Независимо от того, как они называются, связь между этими двумя пространствами должна быть как можно более слабой, чтобы их можно было развивать и поддерживать отдельно.