Pull to refresh
17
9
Антон Кондауров @koanse

User

Send message

Сравнение средних значений в BI: однофакторный критерий Кохрена-Кокса

Level of difficultyHard
Reading time6 min
Views1.2K

В рамках BI решаются различные задачи, в том числе и с помощью статистических методов, для корректного выбора которых важно обращать внимание на содержание задачи. Например, если нужны только средние значения для графика, то действительно достаточно их рассчитать. Но иногда требуется решить другие задачи, например, не просто расчет средних значений двух выборок, но и сравнение средних двух выборок, чтобы узнать, в какой выборке среднее больше или меньше. Кроме того, данных для сравнения может быть столько, что они могут не умещаться на графике. В этом случае важно переключиться на подходящую статистическую гипотезу и использовать корректные статистические методы, намного более интересные, чем отображение средних значений на графике. Здесь могут быть эффективны методы дисперсионного анализа (ANOVA), или, в частном случае, когда речь идет о расчетах для одного фактора — методы сравнения средних двух выборок, и, например, метод Кохрена-Кокса. О том, какие результаты подобный подход дает на практике, а также о преимуществах работы с DAX при сравнении средних значений, читайте под катом.

Читать далее

BI в тестировании — сравнение результатов бенчмарков двух веток с помощью однофакторного ANOVA (критерий Кохрена-Кокса)

Reading time5 min
Views1.1K

Business Intelligence (BI) находит применение в самых разных сферах, в том числе, например, при анализе результатов бенчмарков. Часто возникает задача сравнения производительности двух версий приложения на основе результатов бенчмарков (время выполнения тестов для нескольких прогонов и нескольких тестов), например, сравнение master ветки и feature ветки. Улучшение производительности в feature ветке (особенно, если она для улучшения производительности и создавалась) проверить можно условно и вручную, но также важно проверить, что нет деградации в других кейсах бенчмарков для feature ветки по сравнению с master веткой. Это можно решить статистическими методами, например, достаточно однофакторного дисперсионного анализа (ANOVA), здесь будет рассмотрен критерий Кохрена-Кокса, особенности его имплементации на PostgreSQL и возможные виды графиков для представления результатов. Интересующимся применением BI и ANOVA для сравнения производительности двух версий приложения на бенчмарках — добро пожаловать под кат :)

Читать далее

Проверка отсутствия деградации бенчмарков для двух версий статистическими методами

Reading time4 min
Views1.1K

Привет, Хабр! Часто при тестировании идет сравнение производительности двух версий, например, master ветки и feature ветки. Допустим, идет сравнение по бенчмаркам, т.е. сравнивается время выполнения запросов для некоторого количества кейсов. Понятно, что если, например, в feature ветке есть улучшение производительности (и ветка создавалась как раз для улучшения производительности), это улучшение на целевых кейсах можно проверить даже вручную. Однако, осталось проверить, нет ли ухудшения производительности в остальных кейсах. Относительно точное вычисление производительности в смысле среднего времени выполнения запроса в конкретном кейсе требует нескольких прогонов кейса и может занять некоторое время, поэтому полная проверка всех кейсов (с десятками прогонов каждого кейса для получения более точного среднего результата) может занять, например, дни.

Однако, часто требуется лишь проверить лишь наличие деградации в feature ветке по сравнению с master, а не знать относительно точное время выполнения каждого запроса в feature ветке, это зачастую актуально для PR. Например, в feature ветке в одном кейсе два запроса выполняются за 300 и 300 секунд, а в master ветке для этого кейса за 12, 11, 10 секунд, нужно ли проводить несколько запусков кейса в feature ветке, или и так понятно, что есть деградация? Методы математической статистики позволяет формально ответить на этот вопрос с заданной вероятностью, например, 0.95, чтобы можно было принять решение формально, а не интуитивно. Интересующимся статистическими методами проверки отсутствия деградации — добро пожаловать под кат :)

Читать далее

Кардинальность при оптимизации DAX запросов в ClickHouse

Reading time7 min
Views1.7K

Привет, Хабр! Мы уже неоднократно поднимали вопросы оптимизации запросов к СУБД ClickHouse, которую все чаще используют как универсальное высокопроизводительное хранилище для аналитических задач. В случае с Visiology этот вопрос приобретает двойную ценность, так как мы используем оптимизацию для эффективного выполнения запросов в языке DAX.

Сегодня мы поговорим о применении группировок GROUP BY с учетом их производительности для относительно больших таблиц, например, с миллионами записей. Таким образом, речь пойдет об оценке кардинальности одного или нескольких столбцов. Эта задача, кстати, является достаточно нетривиальной. Но если Вы можете ее решить, появляется возможность для эффективных оптимизаций SQL. О них мы и поговорим сегодня.

Читать далее

Представление иерархии и выполнение иерархических запросов в ClickHouse с использованием хешей

Level of difficultyEasy
Reading time7 min
Views1.2K

Привет, Хабр! Достаточно часто используются иерархические фильтры или отчеты с иерархией, и представление иерархии может быть актуально как для UI (например, иерархических фильтров), так и для отчетов или дашбордов. Если рассматривать только структуру запроса с иерархией, без расчета промежуточных итогов и т.д., то сохранение структуры иерархического UI элемента при большом уровне вложенности, а также передача этой иерархии с UI на бэкенд и дальше, например, в виде SQL запроса в СУБД может быть относительно нетривиальной задачей. При относительно большом уровне вложенности (например, иерархия в 10 уровней), при решении «в лоб» и сохранении всех 10 выбранных значений на последнем уровне иерархии, станет неудобно хранить и передавать в качестве параметров с UI на бэкенд (для 1000 строк и 10 уровней вложенности может быть уже условно 10000 параметров), также растет и количество параметров в SQL, и проблемы усугубляются в случае микросервисной архитектуры, когда запрос SQL не сразу отправляется, например, в ClickHouse, а ещё эти 10000 параметров «путешествуют» из UI в один или несколько микросервисов, пока не попадут в ClickHouse. В связи с этим хочу рассмотреть одно из возможных решений проблемы с помощью хеширования на примере C# и ClickHouse, но это «не идеи, проверенные на продакшене», больше тема к обсуждению. Тем, кому интересно решение проблем иерархических запросов на примере C# и ClickHouse — добро пожаловать под кат :)

Читать далее

Изучаем DAX Time Intelligence с помощью ViTalk GPT

Reading time3 min
Views1.2K

Привет, Хабр! Сегодня я хочу поговорить о возможностях и ограничениях функций Time Intelligence в Visiology. Это очень интересный раздел языка DAX, который позволяет быстро делать показательные расчеты, например, сравнивая показатели текущего периода с предыдущими. Однако в его реализации для Visiology и Power BI есть некоторые различия (впрочем, не влияющие на результат). В этой статье мы поговорим об этой разнице, а также я наглядно покажу, как чат-бот ViTalk GPT помогает разобраться с особенностями работы различных функций.

Читать далее

Использование dax.do для произвольной схемы данных на основе перевода DAX в Contoso через Telegram бот

Reading time3 min
Views1.1K

Привет, Хабр! В работе Business Intelligence аналитика могут встречаться задачи проверки DAX запроса на произвольной схеме, к которой может не быть доступа. Перевод DAX запроса из исходной схемы в схему, к которой есть доступ и есть возможность выполнения DAX запроса, может занимать некоторое время и требовать определенных усилий. В век AI, безусловно, хочется делать перевод в схему автоматически, при помощи AI. Кроме того, ресурс dax.do является достаточно удобной песочницей для Contoso схемы данных, поэтому такое впечатление, что одним из быстрых решений для анализа и запуска DAX без схемы данных является перевод произвольного DAX в dax.do (например, автоматически при помощи Telegram бота), что позволяет уже дальше смотреть полученный DAX в песочнице dax.do на схеме Contoso без каких-то ограничений. Это позволяет проверить работоспособность DAX на незнакомой схеме за секунды. Интересующимся новыми возможностями DAX песочниц — добро пожаловать под кат :)

Читать далее

Возможности комбинаторов в ClickHouse

Reading time9 min
Views2.8K

Что делать с запросами к СУБД, выполнение которых затягивается на десятки минут, как можно оптимизировать вложенные операторы, чтобы получить нужные данные за секунды? За счет чего подобные операции выполняются в Visiology автоматически? Ответы на эти вопросы мы попробуем дать сегодня на примере небольшого синтетического теста со сложным SQL-запросом, и разберемся при чем тут комбинаторы в ClickHouse. Эта статья будет полезна тем, кто интересуется SQL-оптимизаторами, а также всем существующим и будущим пользователям Visiology, кто хочет заглянуть под капот системы. Если вы из их числа, добро пожаловать под кат :)

Читать далее

«DAX Fiddle» в виде Telegram бота

Reading time2 min
Views1.1K

Для многих языков есть свои online песочницы, например, для POSTGRES есть условный PostgreSQL Fiddle, также и для аналитического языка DAX хотелось бы побольше подобных инструментов. Существующий dax.do позволяет выполнять запросы условно только на стандартной схеме Contoso, и в век AI хотелось бы иметь инструмент для быстрого выполнения DAX запросов для произвольной схемы данных. Также генерация самой схемы и заполнение её данными также являются трудоемкими, и хотелось бы отдать это всё AI.

Кроме того, сейчас популярны Telegram боты, в связи с этим появилась идея создания Telegram бота для выполнения DAX (и построения простейшего дашборда-таблицы) на произвольной схеме данных, с автоматически сгенерированными данными, своего рода DAX Fiddle. Интересующимся DAX Fiddle — добро пожаловать под кат :)

Читать далее

Плюсы и минусы SUMMARIZE

Reading time6 min
Views2.1K

При использовании DAX аналитикам важно следить не только за корректностью результатов, но и за производительностью системы при обработке запросов. Одним из инструментов повышения эффективности является корректное использование функции SUMMARIZE. Всем, кто работает с большими объемами данных, активно изучает синтаксис DAX, а также интересующимся особенностями SUMMARIZE — добро пожаловать под кат!

Читать далее

Планы и факты: работаем с денормализованной таблицей

Reading time6 min
Views3.6K

Привет, Хабр! В этой статье я хотел бы поговорить про особенности план-факт анализа, а также о работе с денормализованной таблицей, которая «была, есть и будет использоваться», потому что оказывается удобной для некоторых приемов работы с BI. Под катом вы найдете 7 примеров решения типовых задач план-факт анализа, включая расчет долей, отображение данных с учетом иерархии, разбивку по регионам и так далее. Всех, кому интересны эти практические аспекты, жду под катом :)

Читать далее

Выполнение DAX запроса AI DAX движка в СУБД на примере PostgreSQL

Reading time3 min
Views1.4K

Привет, Хабр! DAX является мощным аналитическим языком запросов и активно используется во множестве проектов. Кроме того, на текущем уровне развития AI он способен условно в режиме реального времени преобразовать DAX запросы в запросы одной из СУБД, например, PostgreSQL, но, конечно, с рядом ограничений на сложность DAX запроса, схему данных и т.д. В связи с этим может быть актуальным вопрос, реально ли использовать «AI DAX движок» в сочетании с выполнением SQL запросов, сгенерированных этим движком, в одной из СУБД, т.е. выполнить DAX без Power BI на PostgreSQL источнике? Интересующимся возможностями DAX AI на примере PostgreSQL — добро пожаловать под кат :)

Читать далее

Получение SQL для PostgreSQL из DAX на основе AI

Reading time3 min
Views3.2K

Привет, Хабр! Популярным аналитическим языком является DAX, и он используется во множестве проектов. Соответственно, значительная часть бизнес-логики дашбордов реализована на DAX, и при переходе с Power BI на другой продукт требуется время на перевод DAX логики из Power BI. В связи с этим актуальны инструменты расширения списка платформ, на которых можно использовать DAX без Power BI.

Тем, кто интересуется «переводом» DAX на PostgreSQL — добро пожаловать под кат :)

Читать далее

Генерация дашборда по DAX мере через AI DAX движок

Reading time4 min
Views2.6K

Привет, Хабр! AI инструменты широко используются в разработке и других сферах, казалось бы, что ещё можно в них улучшить или добавить? Всё зависит от предметной области, в области Business Intelligence при работе с языком запросов DAX актуальными могут быть работа с мерами и создание новых мер. Рутинной задачей при этом является создание схемы данных и заполнение её данными для каждой меры, или можно использовать уже имеющуюся схему, однако при этом при переходе с одной схемы (где выполняются запросы) на другую приходится переименовывать таблицы и столбцы, сопоставлять типы данных и т. д. В связи с этим актуальным может быть инструмент для создания схемы данных для меры «на лету» и выполнения запроса с мерой, т. е. построение запроса и дашборда (концептуально, без форматирования) по мере «на лету».

В dax.do можно строить DAX запрос только для существующих схем, т. е. приходится тратить время на переименование полей и таблиц в DAX запросе при переносе написанного DAX‑запроса из dax.do.

В этой статье рассматривается решение такой проблемы — генерация схемы, связей, запроса и дашборда «на лету» (концептуально, по аналогии с отображением дашборда на основе DAX в dax.do), но только сугубо средствами AI, без реальных DAX движков. Надеюсь, такие инструменты или идеи могут быть полезны аналитикам и разработчикам для повседневной работы, если Вам интересен AI в DAX — добро пожаловать под кат :)

Читать далее

Суперсилы «Виталика»: на что способен ViTalk GPT

Reading time5 min
Views2.4K

Привет, Хабр! Область Business Intelligence — одна из наиболее “интеллектуальных” по определению, и в аналитической работе в некоторых задачах особенно удобно использовать искусственный интеллект. Поэтому мы сегодня поговорим про чат-бота ViTalk GPT, который в некоторых задачах помогает очень быстро найти правильный ответ на поставленные вопросы, а иногда — даже скорректировать свой же вопрос с учетом возможностей платформы Visiology. В этой статье мы коснемся сильных и слабых сторон AI, проверим, смогут ли два слона поставить мат королю, и оценим сферу применения ViTalk GPT для аналитиков, разработчиков и даже бизнес-пользователей. 

Читать далее

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

Level of difficultyEasy
Reading time7 min
Views2.2K

Привет, Хабр! В настоящее время используются не только SQL решения для работы с данными, тем не менее, на долю SQL приходится значительная часть систем. Также нередко бывает, что приложение генерирует SQL в зависимости от действий пользователя, например, при выборе полей или применении фильтров в отчетах, иными словами, есть динамический SQL, а не статический. Также часто для приложения есть тесты, например, соответствующие типичным активностям пользователей, и каждой активности соответствует один или несколько SQL, причем в тестах проверяется именно правильность результатов выполнения SQL.

Далее, для относительно сложных вариантов генерации SQL при изменениях бизнес-логики (или других изменениях) может измениться и сам динамически генерируемый SQL, причем результаты выполнения SQL могут остаться неизменными, однако производительность поменяется. В таких случаях изменения в производительности можно уловить при помощи бенчмарков, однако прогон бенчмарков может занимать значительное время, в связи с этим актуальна задача быстрого анализа изменений в производительности динамически генерируемого SQL. Интересны особенности анализа производительности приложения на основе SQL — добро пожаловать под кат :)

Читать далее

Реляционная алгебра для DAX: ALL в итераторе SUMX для SUMMARIZECOLUMNS

Reading time5 min
Views1.4K

Привет, Хабр! Язык запросов DAX популярен и эффективен для построения дашбордов в Business Intelligence, и за счет свой функциональной природы DAX в чем-то ближе к реляционной алгебре, по сравнению с SQL. Особенности DAX удобно рассмотреть на основе примеров DAX-запросов, переведенных на реляционную алгебру. В частности, использование ALL в итераторе SUMX в рамках наиболее популярной DAX функции SUMMARIZECOLUMNS позволяет рассмотреть некоторые нюансы DAX. Если интересно описание ALL в DAX с точки зрения реляционной алгебры — добро пожаловать под кат! :)

Читать далее

Определяем доли и коэффициенты проникновения с помощью DAX

Level of difficultyEasy
Reading time4 min
Views2K

Привет, Хабр! Одной из важных задач в аналитических запросах является расчет долей, который позволяет узнать, какая часть записей из общего количества по всей таблице соответствует какому-либо критерию. Также нередко полезными оказываются коэффициенты проникновения (в общем-то тоже являющиеся долями). Они позволяют оценить продажи, найти взаимосвязи признаков и сделать много еще чего полезного. Чтобы проводить такого рода расчеты идеально подходит язык DAX. Если Вам интересно, насколько это удобно и как именно сделать это в DAX — добро пожаловать под кат :)

Читать далее

Работа с календарями в BI — с DAX и без него

Reading time7 min
Views2.9K

Привет, Хабр! При работе с Business Intelligence и дашбордами практически в любой предметной области встречаются даты и календари, поэтому от выбора представления дат и их составных частей (день, месяц, квартал, полугодие, год и т.д.), ключей дат и таблицы с датами зависит производительность всех дашбордов. В этой статье я расскажу о том, как можно оптимизировать работу с датами в Visiology — с использованием DAX и без него. Интересно? Добро пожаловать под кат! :)

Читать далее

Оценка кардинальности полей таблицы

Reading time7 min
Views2.5K

Привет, Хабр! В SQL запросах важно ориентироваться в количестве записей в таблицах и в плане выполнения запроса. Это позволяет, например, уменьшить количество записей при выполнении запроса при помощи группировки GROUP BY. В случае работы над каждым SQL запросом вручную, это можно проверить в среде разработки. Но в случае генерации SQL запросов автоматически появляется задача проверки количества уникальных записей для одного или нескольких полей таблицы, иными словами, кардинальности. В частном случае, при наличии сильных линейных связей между полями таблицы или даже "полей-дубликатов", количество уникальных записей в двух полях практически равно количеству уникальных записей в одном поле, т.е. кардинальность двух линейно зависимых полей таблицы практически равна кардинальности одного поля. В связи с этим актуально применение коэффициентов парной и множественной корреляции при расчете кардинальности нескольких полей. Интересны статистические методы при расчете кардинальности? Добро пожаловать :)

Читать далее
1

Information

Rating
861-st
Location
Россия
Works in
Date of birth
Registered
Activity

Specialization

Fullstack Developer
Lead