Расчет недельных продаж с помощью DAX в LuckyTemplates
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
В сегодняшнем руководстве я собираюсь показать, как можно автоматизировать процесс сортировки одного столбца по другому внутри служб анализа LuckyTemplates и SSAS или SQL Server. Вы можете посмотреть полное видео этого урока в нижней части этого блога.
В этом примере у нас есть таблица Dates с несколькими столбцами. Некоторые столбцы представляют собой целую часть, которую мы собираемся скрыть; а некоторые столбцы являются строковой частью, которую мы собираемся показать конечному пользователю.
Итак, у нас есть столбцы «Календарный год», «Календарный год, месяц» и «Месяц». Мы хотим автоматизировать сортировку этих трех столбцов по их целой части. Я отсортирую календарный год по номеру календарного года, месяц календарного года по номеру месяца календарного года, а также месяц по номеру месяца.
Но мы не будем делать это поодиночке. Мы запустим скрипт, который автоматически отсортирует это для этой конкретной таблицы. Если у вас есть несколько столбцов для нескольких таблиц, вы можете использовать этот сценарий для этих наборов таблиц.
Мы собираемся использовать редактор таблиц для написания этого кода C#, но на данный момент в редакторе таблиц нет IntelliSense для языка C#. Чтобы упростить задачу, мы будем использовать Visual Studio (VS), где у нас есть IntelliSense для языка C#, и вы также можете использовать код VS.
Оглавление
Сортировка столбцов в LuckyTemplates и SSAS с помощью C#
Во-первых, нам нужно создать новый проект внутри Visual Studio, который будет консольным приложением (.Net Framework) для языка C#. Давайте выберем это, нажмите «Далее».
Затем мы можем указать любое имя для проекта. Я назову это SortBy и нажму Create.
Теперь вы можете видеть, что у нас есть код. Как только код заработает, мы просто скопируем и вставим его в табличный редактор.
Но чтобы код работал внутри Visual Studio, нам нужно установить ссылку на библиотеку. И для этого мы можем просто щелкнуть « Ссылки» и выбрать опцию « Управление пакетами NuGet» внутри опции браузера.
Внутри опции просмотра нам нужно написать сервисы анализа . А затем в доступных вариантах нам нужно выбрать второй и нажать « Установить». Начнется установка, и для ее завершения потребуется несколько секунд.
Далее нам нужно написать в коде Using Microsoft.AnalysisServices.Tabular , а затем поставить точку с запятой. Мы собираемся создать объект сервера, поэтому мы можем просто написать Server , а именем объекта сервера будет сам сервер , и мы напишем New Server .
По сути, мы создаем новый объект внутри памяти. И чтобы подключить этот сервер к файлу LuckyTemplates, мы собираемся использовать метод объекта сервера. Итак, давайте напишем server.Connect , и здесь мы укажем номер порта, на котором прослушиваются AnalysisServices внутри LuckyTemplates.
Чтобы найти этот номер порта, мы переходим во «Внешние инструменты», нажимаем « DAX Studio » и в нижней части находим локальный хост. Это кодовый номер, по которому службы анализа SQL-сервера, которые есть у нас внутри LuckyTemplates, прослушивают изменения, которые мы отправляем через LuckyTemplates или любой другой внешний инструмент.
Сервер — это одно, но сервер также может иметь несколько моделей в случае SSAS. Но сейчас в LuckyTemplates у нас есть только одна модель. Итак, мы собираемся объявить эту модель. Мы пишем здесь Model is equal to (=) server.Databases , и мы будем обращаться к самой первой базе данных на этом сервере, поэтому напишем .Model .
Теперь давайте проверим, работает ли эта часть кода. Для этого мы просто распечатаем список всех таблиц, которые у нас есть в этой модели данных. Итак, мы напечатаем здесь для каждого (Table t in model.Tables) , раскроем квадратную скобку и нажмем Enter.
После этого набираем Console.WriteLine (t.Name) . Чтобы убедиться, что окно не закроется автоматически после того, как оно напечатает имя таблицы, мы напишем Console.ReadLine , открывающую и закрывающую круглую скобку и точку с запятой. Теперь все, что нам нужно сделать, это нажать кнопку «Пуск» и дождаться ее выполнения.
Вы можете видеть, что мы можем напечатать имена таблиц, которые у нас есть внутри модели данных. У нас есть Даты, Продукт, Клиент и Магазин. Это подтверждает, что созданная нами установка работает.
Итак, теперь мы можем перейти к сути кода и начать создавать код, который поможет нам отсортировать этот столбец по целочисленному эквиваленту.
Давайте избавимся от всего, что мы создали из части ForEach . Мы собираемся оставить сервер и модель как есть. Давайте объявим переменную, которая будет содержать имя таблицы, по которой мы хотим выполнить итерацию. Я назову его DatesTable , и имя таблицы будет в основном Dates .
Затем у нас будет foreach var t в model.Tables , затем мы собираемся использовать предложение where , поэтому мы можем сказать, где T переходит в t.Name должно быть равно DatesTable . Если мы в настоящее время повторяем DatesTable, мы собираемся инициировать еще один цикл по всем столбцам этой DatesTable. Для этого мы можем написать foreach var c в t.Columns .
Чтобы проверить, итерируем ли мы только DatesTable и имеем ли мы доступ ко всем столбцам DatesTable, мы можем просто напечатать Console.WriteLine и сказать c.Name .
Если я нажму F5, то можно увидеть, что мы получаем доступ к колонкам.
Теперь мы можем двигаться дальше и писать больше кода.
Мы собираемся создать список кортежей, который будет содержать еще три столбца. Один из столбцов будет целевым столбцом. Второй столбец будет столбцом, по которому мы хотим отсортировать целевой столбец, а третий столбец будет просто содержать значение true или false, независимо от того, хотим ли мы скрыть столбец, по которому мы фактически сортируем.
Допустим, мы хотим отсортировать столбец «Календарный год» по номеру календарного года. Первый столбец будет содержать календарный год, второй столбец будет содержать номер календарного года, а третий столбец решит, хотим ли мы скрыть столбец номера календарного года после завершения сортировки или нет.
А для этого вернемся в Visual Studio, где мы собираемся создать новую переменную. Вы можете назвать это как угодно. В этом примере я назову его colOperations . Далее мы напишем new , а затем создадим список и напишем тип столбцов (string, string и bool). После этого мы создаем кортежи.
Таким образом, мы просто создаем список из трех столбцов, а для трех столбцов мы предоставили две строки. Теперь внутри нашего цикла foreach мы собираемся инициировать цикл for . По сути, мы говорим о том, что объявляем переменную, начинающуюся с i на каждой итерации. Если i меньше colOperations.Count, просто увеличьте это значение .
Далее мы собираемся написать оператор ЕСЛИ . c.Name принадлежит имени столбца, в котором мы сейчас находимся. Затем у нас есть colOperations i . i в основном позволяет нам получить доступ к одной конкретной строке . И когда мы пишем .Item1 , мы можем получить доступ к первому столбцу, второму столбцу или третьему столбцу.
Итак, сначала мы собираемся использовать столбец Item1 . Если это так, мы просто пишем, что c.SortByColumn должно быть равно t.Columns . Помните, что t — это табличный объект. Затем мы получаем доступ к столбцам из этой конкретной таблицы. Нам нужны colOperations , строка, в которой мы сейчас находимся в операциях со столбцами, а столбец — это, по сути, объект Item2 .
Наконец, чтобы скрыть тот конкретный столбец, по которому мы применяем сортировку, мы пишем последнюю строку кода.
Итак, теперь, когда мы написали основной код, который будем выполнять для нашей табличной модели, мы можем просто скопировать код из var colOperations и перенести его в табличный редактор, а затем мы собираемся выполнить тот же код.
Сортировка столбцов в LuckyTemplates и SSAS с помощью табличного редактора
Мы не собираемся использовать сервер или объект модели, потому что за кулисами табличный редактор автоматически узнает, к какой модели LuckyTemplates или модели служб анализа он должен подключаться. Таким образом, нам не нужно использовать эти переменные, потому что это уже работа табличного редактора , чтобы определить, как он хочет подключиться к этим моделям.
Вернувшись в LuckyTemplates, мы собираемся запустить Табличный редактор 3 или Табличный редактор 2. Вы можете использовать любой из них. В этом случае давайте воспользуемся Табличным редактором 3.
Мы переходим на вкладку «Файл», нажимаем «Новый код C#» и закрываем параметр «Свойства». Затем мы можем вставить код здесь. Единственное, в чем мы должны убедиться, это то, что вместо использования переменной модели следует использовать объект модели . Итак, давайте воспользуемся заглавной М и выполним этот код.
Теперь, когда сценарий успешно выполнен и в нем также указано, что показаны три изменения модели, мы собираемся зафиксировать изменения обратно в модель данных. Мы сохраним все, что мы применили к этим столбцам.
Вернувшись в LuckyTemplates, вы можете увидеть, что номер месяца скрыт. Если я нажму на столбец «Месяц» и перейду к « Инструменты столбца » и к « Сортировать по столбцу », вы увидите, что конкретный столбец был отсортирован по номеру месяца. То же самое касается номера месяца календарного года.
Календарный год сортируется сам по себе, потому что у нас не было этого столбца внутри кода C#. Итак, что мы можем сделать, так это запустить табличный редактор и создать еще один кортеж. А затем еще раз выполняем этот скрипт.
Редактор таблиц LuckyTemplates: обзор версии 3 и руководство
Редактор таблиц LuckyTemplates 3: автоматизация с помощью скрипта
Кодирование DAX внутри табличного редактора 3
Заключение
Вот как легко автоматизировать процесс сортировки одного столбца по другому в и SSAS. Это был очень простой пример того, как вы можете выполнить эту операцию внутри таблицы Dates. Но вы можете расширить этот список, добавив дополнительные столбцы, а затем проверить наличие другой таблицы.
Таким образом, вы можете сократить время, затрачиваемое на сортировку этих столбцов для одних и тех же моделей, которые вы собираетесь создавать снова и снова.
Я надеюсь, что вы нашли это полезным. Если у вас есть какие-либо вопросы, просто дайте мне знать в разделе комментариев.
В этом руководстве показано, как в конечном итоге можно рассчитать разницу между еженедельными результатами продаж с помощью DAX в LuckyTemplates.
Что такое self в Python: примеры из реального мира
Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.
В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.
В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.
В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.
Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.
Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.
В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.
Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.