🍀BitBitGo🍀 Системный Анализ
3.22K subscribers
216 photos
153 videos
112 links
Курс «Системный анализ»
https://bitbitgo.by/
Пишем про системный анализ.
Поможем стартануть в карьере IT. Присоединяйся!
Download Telegram
📊 SQL ДЛЯ АНАЛИТИКА: ОКОННЫЕ ФУНКЦИИ — СЛЕДУЮЩИЙ УРОВЕНЬ

Привет, коллеги! 👋 Вы уже знаете SELECT, JOIN и GROUP BY. Но есть вещь, которая выводит анализ на новый уровень — оконные функции. Они позволяют считать скользящие средние, приросты, доли и ранги без сложных подзапросов. Сегодня разберём на реальных задачах. Поехали! 🚀

📌 Кейс 1: Сравнение продаж с прошлым месяцем (LAG)

Менеджер просит: «Покажи помесячную динамику и прирост к прошлому месяцу». Без оконных функций пришлось бы делать self-join или подзапрос. А так:

SELECT 
DATE_TRUNC('month', order_date) as month,
SUM(amount) as revenue,
LAG(SUM(amount)) OVER (ORDER BY DATE_TRUNC('month', order_date)) as prev_revenue,
(SUM(amount) - LAG(SUM(amount)) OVER (ORDER BY DATE_TRUNC('month', order_date))) /
LAG(SUM(amount)) OVER (ORDER BY DATE_TRUNC('month', order_date)) * 100 as growth_percent
FROM orders
GROUP BY month
ORDER BY month;

Что получим: месячная выручка, прошлая выручка и процент роста. Всё одним запросом! 🔥

📌 Кейс 2: Топ-3 товара в каждой категории (ROW_NUMBER)

Нужно для каждой категории выделить три самых продаваемых товара. Раньше — муть с подзапросами. Теперь:

WITH ranked_products AS (
SELECT
category_id,
product_id,
SUM(quantity) as total_sold,
ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY SUM(quantity) DESC) as rn
FROM order_items
GROUP BY category_id, product_id
)
SELECT category_id, product_id, total_sold
FROM ranked_products
WHERE rn <= 3;

Результат: аккуратный топ по каждой категории. А если нужны все товары с повторами (если продажи одинаковые) — используйте RANK() или DENSE_RANK(). 🏆

📌 Кейс 3: Скользящее среднее за 7 дней (AVG OVER)

Для отчёта по трендам нужно сгладить дневные скачки. Скользящее среднее — идеально:

SELECT 
date,
revenue,
AVG(revenue) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) as avg_7d
FROM daily_revenue
ORDER BY date;

Теперь видно тенденцию без шума. Маркетологи будут благодарны! 📈

📌 Кейс 4: Доля товара в общей выручке (SUM OVER)

ABC-анализ: надо понять, какие товары дают 80% выручки. Считаем долю накопленным итогом:

WITH product_revenue AS (
SELECT
product_id,
SUM(amount) as revenue,
SUM(SUM(amount)) OVER () as total_revenue
FROM sales
GROUP BY product_id
)
SELECT
product_id,
revenue,
revenue / total_revenue * 100 as percent,
SUM(revenue / total_revenue * 100) OVER (ORDER BY revenue DESC) as cumulative_percent
FROM product_revenue
ORDER BY revenue DESC;

Видим, где граница 80%. Классика для категорийных менеджеров. 📦

🎯 ПОЧЕМУ ЭТО ВАЖНО ДЛЯ АНАЛИТИКА?

Скорость: один запрос вместо трёх.
Гибкость: можно комбинировать с группировками и фильтрами.
Точность: меньше шансов ошибиться в логике.

Освойте оконные функции — и бизнес будет носить вас на руках за быстрые и точные ответы. 💪

#SQL
90% каналов про AI и ИТ бесполезны

Одни пересказывают новости.
Другие копируют посты друг у друга.

В итоге человек читает десятки каналов, но новых идей почти не появляется.

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

Поэтому мы собрали подборку сильных каналов про ит и искусственный интеллект. Внутри авторы, которые разбирают: новые AI-инструменты, технологии и продукты, стартапы, реальные кейсы использования нейросетей, вайб-кодинг и др. Это экономит время. Не нужно искать хорошие каналы по одному

Ссылка для добавления➡️ https://t.me/addlist/3WsuUGbOgm8xYTAy

Давайте поддержим каналы, чтобы качественного контента стало больше!
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Media is too big
VIEW IN TELEGRAM
Экспертиза тех специалиста IT
😁5
📜 ТРЕБОВАНИЯ, КОТОРЫЕ РАБОТАЮТ: КАК КОД ПОМОГАЕТ АНАЛИТИКУ

Привет, коллеги! 👋 Слышали фразу: «Требования должны быть однозначными»? Легко сказать, сложно сделать. Сегодня покажу, как код (да, код!) помогает аналитику проверять и уточнять требования до передачи разработчикам. Реальные кейсы внутри. 🧑‍💻

📌 Кейс 1: «Скидка при заказе от 1000 рублей»

Бизнес-аналитик записал: «Если сумма заказа превышает 1000 рублей, применяется скидка 10%». Разработчик реализовал, тестировщик проверил — всё ок. Но на проде клиенты жалуются: скидка не применяется, когда сумма ровно 1000.

В чём проблема? Слово «превышает» можно трактовать как «больше» (>1000) или «больше или равно» (>=1000)? Аналитик не уточнил.

Что сделал бы проактивный аналитик? Написал бы простой тест на Python ещё до разработки:

def test_discount():
assert apply_discount(1000) == 1000 # 0% или 10%?
assert apply_discount(1001) == 900.9 # должно быть 10%
assert apply_discount(500) == 500 # без скидки

Или даже на бизнес-языке (Gherkin):

Feature: Скидка на заказ
Scenario: Сумма ровно 1000
Given сумма заказа 1000 рублей
When рассчитывается скидка
Then скидка не применяется (0%) # или применяется? Надо решить!

Этот тест сразу подсветит неоднозначность. Спор решается на этапе анализа, а не на проде. 🔥

📌 Кейс 2: «Пароль должен содержать спецсимволы»

Требование: «Пароль должен содержать хотя бы один спецсимвол». Разработчик написал проверку: if any(c in "!@#$%" for c in password). Тестировщик проверил пароль "pass!" — работает. Через месяц выясняется, что клиенты из Германии не могут ввести "ß", потому что это не спецсимвол, а буква. Или спецсимволы типа "©" не считаются.

Как аналитик мог предотвратить это? Уточнить: «спецсимволы — это символы из набора ASCII: !"#$%&'()*+,-./:;<=>?@[]^_{|}~`». Или ещё лучше — сразу дать регулярное выражение в требованиях:

[!@#$%^&*(),.?":{}|<>]

Но и это не всё. Аналитик может написать параметризованный тест, который проверяет граничные случаи:

import pytest

def validate_password(password):
# минимальная проверка для примера
return any(c in "!@#$%^&*" for c in password)

@pytest.mark.parametrize("pwd,expected", [
("pass!", True), # содержит !
("pass", False), # нет спецсимвола
("pass©", False), # © не в наборе
("pass#", True), # содержит #
])
def test_special_char(pwd, expected):
assert validate_password(pwd) == expected

Тест "pass©" провалится, и аналитик поймёт: нужно либо расширить набор, либо уточнить у бизнеса, считать ли «©» спецсимволом. 🎯

📌 Кейс 3: «Акция действует с 1 по 31 октября»

Бизнес сказал: «Акция на товары категории "Электроника" с 1 по 31 октября». Разработчик жёстко закодил даты. 1 ноября акция закончилась, но менеджер просит продлить до 5 ноября. Начинается аврал.

Что должен был сделать аналитик? Сформулировать требование как параметризованное, а не жёсткое. И показать пример кода, как это должно быть реализовано:

# Плохо
if date >= "2025-10-01" and date <= "2025-10-31":
apply_discount()

# Хорошо — параметры в конфиге или БД
promo = get_promo("october_electronics")
if promo.is_active(date):
apply_discount()

И тест, проверяющий, что даты можно менять без изменения кода:

def test_promo_flexible():
set_promo_dates("2025-10-01", "2025-10-31")
assert is_promo_active("2025-10-15") == True
assert is_promo_active("2025-11-01") == False
set_promo_dates("2025-10-01", "2025-11-05")
assert is_promo_active("2025-11-01") == True

Теперь гибкость заложена в требования. 🚀

🎯 ЧТО ДАЁТ АНАЛИТИКУ ТАКОЙ ПОДХОД?

Экономия времени на переделках.
Повышение доверия команды — требования превращаются в исполняемые спецификации.
Автоматическая регрессия — тесты остаются и проверяют, что требования не нарушены.

Совет: Дружить с разработчиками и просить их показывать код тестов. А лучше — писать простые тесты самим (хотя бы в виде псевдокода). Это поднимает качество требований на новый уровень. 📈

#REQUIREMENTS
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Когда решил помочь коллегам, но вовремя осознал, на кого повесят задачу
🙈4
📊 BPMN: НЕ ПРОСТО КАРТИНКИ, А ИНСТРУМЕНТ АНАЛИЗА

Привет, коллеги! 👋 Многие думают, что BPMN нужен только чтобы «нарисовать процесс для заказчика». На самом деле, это мощный инструмент анализа, который помогает находить узкие места, избыточность и скрытые проблемы. Сегодня покажу на реальных кейсах, как BPMN спасает проекты. 🚀

📌 Кейс 1: «Согласование договора за 2 недели»

Компания жаловалась, что согласование договора занимает 14 дней. Аналитик нарисовал процесс в BPMN и сразу увидел проблему:

Дорожка юриста: проверка договора → отправка финансисту.
Дорожка финансиста: проверка бюджета → возврат юристу с правками.
Дорожка руководителя: финальное утверждение.

Что обнаружилось? В BPMN стало видно, что документ ходит по кругу между юристом и финансистом по 3–4 раза, потому что нет чёткого порядка правок. Каждый раз после изменений одного отдела другой снова проверял всё заново.

Решение: Внедрили шлюз (XOR) — теперь после правок документ идёт только тому, кто их запросил, а не всем подряд. Срок сократился до 3 дней. 📉

📌 Кейс 2: «Потерянные заявки»

В службу поддержки поступали жалобы: заявки клиентов «исчезают». Аналитик построил BPMN-модель обработки заявок и нашёл «чёрную дыру»:

[Клиент отправляет заявку] → [Менеджер берёт в работу] → [Запрос доп. информации] → (ожидание ответа)

Но если клиент не отвечал 3 дня, процесс просто зависал — не было таймера и альтернативного пути. Заявка оставалась в статусе «ожидание» навсегда.

Решение: Добавили пограничное событие-таймер на 3 дня. Если ответа нет — заявка автоматически закрывается с уведомлением клиента. Исчезновения прекратились.

📌 Как BPMN связан с кодом?

Хорошая BPMN-модель — это основа для:

Написания user stories: Каждый шаг процесса — потенциальная задача в Jira.
Тест-кейсов: Можно автоматически генерировать сценарии для каждого пути.

Симуляции: Инструменты вроде Camuda позволяют «прогонять» модель и собирать метрики.
Пример симуляции на Python (упрощённо):

# Имитация процесса согласования
def simulate_approval(legal_ok, finance_ok):
if not legal_ok:
return "rejected"
if not finance_ok:
return "rework"
return "approved"

# Прогоняем 1000 сценариев
results = [simulate_approval(random.choice([True, False]), random.choice([True, False])) for _ in range(1000)]
print(Counter(results)) # Сколько раз утвердили, отправили на доработку, отклонили


Такая симуляция помогает оценить нагрузку на отделы ещё до внедрения. 📊

📌 Кейс 3: «Автоматизация по BPMN»

Банк решил автоматизировать процесс выдачи кредитов. Аналитик описал процесс в BPMN, выделив:

Автоматические шаги (проверка кредитной истории)
Ручные шаги (звонок клиенту)
Шлюзы (если скоринг < 300 → отказ)
BPMN-модель стала техническим заданием для разработчиков. Они реализовали workflow-движок (Camunda), который выполняет процесс строго по диаграмме. Любое изменение процесса теперь делается аналитиком (меняется BPMN), а не кодом. 🏗

🎯 ЧТО ДАЁТ BPMN АНАЛИТИКУ?

Наглядность — заказчик видит процесс и утверждает его.
Выявление узких мест — петли, лишние согласования, таймауты.
Основу для автоматизации — workflow-движки понимают BPMN.
Документирование — процесс не в тексте, а в исполняемой модели.

Совет: Не ограничивайтесь рисованием. Прогоняйте модель, считайте метрики, ищите аномалии. BPMN — это язык, на котором вы разговариваете с бизнесом и разработкой. 📈

#BPMN
ИИ меняет всё. Кто разбирается в трендах, тот управляет будущим.

Я собрал папку с экспертами. Здесь настоящие практики, инсайты и кейсы — всё в одном месте.

Добавляйте себе папку и оставайтесь на шаг впереди 💪🏻
🚀IT + ИИ: Мы живем в эпоху величайшего технологического сдвига ️

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

Быть в IT сейчас - значит быть на передовой этой революции. ИИ не заменяет разработчика, он дает ему «экзоскелет», увеличивая продуктивность в разы. Те, кто научится внедрять нейросети в свои рабочие процессы, станут самыми востребованными специалистами десятилетия.

📌Хотите разобраться, как работают LLM, как использовать AI-инструменты в разработке и какие навыки качать прямо сейчас?

Собрали всё самое важное в этой папке:
📎https://t.me/addlist/lsnqfK4rEqE1OTBi
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🔗 ИНТЕГРАЦИЯ: КАК НЕ ПОТЕРЯТЬ ЗАКАЗЫ И ДЕНЬГИ

Привет, коллеги! 👋 Интеграции — всегда боль. Данные теряются, сервисы падают, форматы не сходятся. Разберём реальные кейсы и покажем, как код помогает проектировать надёжные интеграции. 🚀

📌 Кейс 1: Потерянные заказы

Ситуация: Магазин передаёт заказы в CRM через REST API. При падении CRM заказы терялись.

Решение — ретраи и Dead Letter Queue:

def send_order(order, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post("https://crm/orders", json=order, timeout=5)
if response.status_code == 200:
return True
time.sleep(2 ** attempt)
except:
time.sleep(2 ** attempt)
save_to_dlq(order) # в отдельную очередь
return False

В требования: 3 попытки, экспоненциальная задержка, DLQ для упавших.

📌 Кейс 2: Двойные списания

Ситуация: Платёжный шлюз дублировал уведомления — деньги списывались дважды.

Решение — идемпотентность:

key = hashlib.sha256(f"{order_id}_{amount}".encode()).hexdigest()
if redis.exists(key):
return {"status": "duplicate"} # уже обработали
redis.setex(key, 86400, "processed")
process_payment(payload)

Требование: Все интеграции должны быть идемпотентными.

📌 Кейс 3: Разные форматы дат

Ситуация: CRM шлёт DD.MM.YYYY, бухгалтерия ждёт YYYY-MM-DD. Ошибки в отчётах.

Решение — тест контракта:

@pytest.mark.parametrize("date,format,ok", [
("15.03.2025", "%d.%m.%Y", True),
("2025-03-15", "%Y-%m-%d", True),
])
def test_date_format(date, format, ok):
assert validate_date(date, format) == ok

В требованиях: точные форматы и тесты в CI/CD.

📌 Кейс 4: Таймауты убивают производительность

Ситуация: Внешний сервис тормозил — вся система висла.

Решение — таймауты и fallback:

async with timeout(2):
result = await session.get(url)
if timeout:
return get_cached_data() # запасной вариант

Требование: Таймауты на все внешние вызовы + кэш/заглушки.

🎯 ИТОГ

Код помогает аналитику:

Проверить требования до разработки
Дать разработчикам чёткие примеры
Подготовить тесты для приёмки
Аналитик, который мыслит кодом, — золото для команды. 💰

#INTEGRATION
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
90% каналов не растут по одной причине.

Люди не понимают как продвигаться:
— где брать подписчиков
— как продавать через контент
— какие инструменты реально работают

Поэтому мы собрали полезную папку по продвижению

Внутри:
• маркетинг
• продвижение
• воронки
• трафик
• монетизация

Эта папка может заменить десятки курсов.

Забирайте и добавляйте себе https://t.me/addlist/qJ7u9BP_BS9iMjVi

Записывайся в подборку🫶
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет, друзья!
ИИ, нейросети и IT —
в одной папке

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

Внутри папки:
🔵нейросети: GPT, DeepSeek, OpenAI, LLaMA, Grok — практические кейсы и сравнения
🔵промпты и ИИ-агенты под конкретные задачи
🔵сборка ИИ-систем и автоматизация процессов
🔵ИИ-боты и ассистенты для бизнеса и экспертов
🔵ускорение работы и рост результатов ×2
🔵карьера в IT и AI, актуальные технологии и тренды

Все каналы про ИИ, нейросети и технологии — в одной папке по ссылке ниже

👉 https://t.me/addlist/UIH6U0ZP4yVjZjQ6

Хочу добавить свой канал в папку
Please open Telegram to view this post
VIEW IN TELEGRAM