MACRO

Отчёт по реализации квартир

Месторасположение: Отчёты → Ассортимент → Отчёт по реализации квартир

Отчёт показывает, как продаются квартиры в выбранных домах. Квартиры сгруппированы по типу и площади. По каждой группе видно, сколько квартир всего, сколько из них продано, в сделке, в брони и свободно. Также показаны средние цены и суммы. Отдельные столбцы показывают, по каким программам покупки оформлены сделки. Отчёт помогает оценить темп продаж и остаток квартир по домам.

#Работа с отчётом

#Фильтры

Чтобы сформировать отчёт, выберите дом и нажмите Сформировать. Чтобы сбросить фильтры, нажмите Сбросить фильтр.

  • Дом — дома, по которым строится отчёт. Можно выбрать несколько. Фильтр обязательный: без него отчёт не сформируется. В списке — дома компании и дома партнёров, к которым открыт доступ. Архивных домов в списке нет.
  • Город — город, в котором находится дом. Можно выбрать несколько. В списке — рабочие города из настроек компании. Список домов от выбранного города не зависит. Если выбранный дом находится в другом городе, он не попадёт в отчёт.
  • Дата проведения сделки (с — по) — период по дате сделки. Название фильтра — это выпадающий список, в котором выбирается тип даты:
    • Дата начала сделки — выбрана по умолчанию;
    • Дата ДДУ;
    • Дата сдачи в росреестр;
    • Дата регистрации;
    • Дата проведения сделки.

Можно заполнить только одну границу периода. Если даты не заполнены, отчёт показывает текущее состояние. На какие столбцы влияет период, описано в разделе «Структура отчёта».

#Опции

В поле Опции можно включить одну или несколько опций:

  • Учитывать неактив как проданные — квартиры в статусе Неактив учитываются в столбце «Сделок проведено».

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

    • Маркетинговый резерв — в столбце «Бронь»;
    • Сделка в работе* — в столбце «Сделок в работе»;
    • Маркетинговая сделка — в столбце «Сделок проведено».

    Стоимость маркетинговых сделок по прайсу добавляется к столбцу «Сумма проведённых сделок».

  • Учитывать сделки в работе как свободные — квартиры в статусе Сделка в работе учитываются в столбце «Свободно», а не в «Сделок в работе».

  • Учитывать брони как свободные — квартиры в статусе Бронь учитываются в столбце «Свободно», а не в «Бронь».

  • Учитывать студии отдельно — дополнительно разделяет квартиры по типу планировки: классическая (например, 1К, 2К), студия (1С) и европланировка (1Е, 2Е) учитываются отдельными строками. Остальные условия группировки сохраняются. Квартира с комнатностью 2+ и типом планировки «Студия» попадут в отчёт как 2Е, 3Е и т.п.

  • Группировать по кол-ву комнат — строки формируются только по типу квартиры, без разбивки по площади.

  • Использовать классы в качестве типов квартир — в столбце «Тип квартиры» выводится класс квартиры из карточки объекта. Если класс не указан, выводится обычный тип. При этой опции «Группировать по кол-ву комнат» не действует.

Опции, которые переносят квартиры в «Свободно», меняют и столбцы, которые от него зависят: «Свободно с учётом брони», «Средн. прайс» и «Сумма свободных».

Чтобы выгрузить отчёт в Excel, нажмите → XLS. В файл попадает та же таблица, что на экране, вместе с итоговыми строками.

#Структура отчёта

Строки сгруппированы по домам. В заголовке группы — название дома и срок сдачи. По клику на название дома открывается его карточка. Каждая строка внутри дома — квартиры одного типа и одной площади.

(1) Тип квартиры — количество комнат и буква:

  • К — обычная квартира, например «2К»;
  • С — студия, например «1С»;
  • Е — квартира с признаком студии и двумя или более комнатами, например «2Е».

С опцией классов здесь выводится класс квартиры.

(2) S, м² — общая площадь квартиры из карточки объекта.

(3) Кол-во, шт. — все квартиры группы в любом статусе.

(4) Сделок проведено, шт. — квартиры в статусе Сделка проведена.

(5) Сделок в работе, шт. — квартиры в статусе Сделка в работе.

(6) Свободно с учётом брони, шт. — сумма столбцов «Бронь» и «Свободно».

(7) Бронь, шт. — квартиры в статусе Бронь.

(8) Свободно, шт. — квартиры в статусе Подбор.

(9) М. резерв, шт. — квартиры в статусе Маркетинговый резерв.

(10) М. сделка, шт. — квартиры в статусах Сделка в работе* и Маркетинговая сделка.

(11) Средн. прайс, ₽/м² — средняя цена за м² из карточек свободных квартир (столбец «Свободно»), округлённая до рубля.

(12) Средн. по договору проведённых сделок, ₽/м² — средняя цена за м² по договору. Для каждой проведённой сделки сумма договора делится на площадь по договору, затем по группе считается среднее.

(13) Сумма свободных, ₽ — сумма прайсовых цен свободных квартир. Квартиры в брони сюда не входят, если не включена опция «Учитывать брони как свободные».

(14) Сумма М. резервов, ₽ — сумма прайсовых цен квартир в статусе Маркетинговый резерв.

(15) Сумма М. сделок, ₽ — сумма прайсовых цен квартир в маркетинговых сделках. Берётся прайс, а не сумма договора.

(16) Сумма проведённых сделок, ₽ — сумма договоров по проведённым сделкам.

(17) Прогр. «…» — по столбцу на каждую программу покупки компании. В ячейке — количество квартир, у которых в сделке выбрана эта программа. Учитываются квартиры в статусах Сделка в работе и Сделка проведена. Столбцы выводятся для всех программ, даже если сделок по ним нет.

Как период влияет на столбцы

  • Учитывают период: «Сделок проведено», «Сделок в работе», «М. сделка», «Средн. по договору проведённых сделок», «Сумма проведённых сделок» и столбцы программ. В них попадают только квартиры, у которых выбранная дата сделки входит в период. Квартиры с пустой датой не учитываются.
  • Всегда показывают текущее состояние: «Кол-во», «Свободно с учётом брони», «Бронь», «Свободно», «М. резерв», «Средн. прайс», «Сумма свободных» и «Сумма М. резервов».

Поэтому при заданном периоде сумма столбцов со статусами может не совпадать с «Кол-во». Расхождение бывает и без периода: «Кол-во» включает квартиры в статусах, которых нет в отдельных столбцах, например В архиве. Об этом же напоминает подсказка справа от фильтров.

Итоговые строки. После каждого дома выводятся три строки:

  • Итого — количество квартир и суммы по столбцам;
  • Итого S — суммарная площадь квартир, учтённых в каждом столбце;
  • Итого % — доля от столбца «Кол-во».

В конце отчёта выводятся такие же три строки по всем объектам. Средние цены в итоговых строках не рассчитываются.

#Технический паспорт отчёта

#Условия попадания в отчёт

Квартира (estate_sells) попадает в отчёт, если выполнены все условия:

  • категория объекта — квартира: estate_sells.estate_sell_category = 'flat';
  • объект выставлен на продажу: estate_sells.activity = 'sell';
  • объект не удалён: estate_sells.estate_sell_status > 0. Архивные квартиры (статус 1) попадают в отчёт;
  • дом (estate_sells.house_id → estate_houses.house_id) не удалён и не в архиве: estate_houses.status > 0 и estate_houses.status <> 1;
  • дом входит в фильтр «Дом» и принадлежит компании или открыт ей через партнёрский доступ. Данные о партнёрском доступе не выгружаются в MacroData, поэтому запросы ниже строятся только по домам компании.

Фильтр «Город» сравнивается с городом дома — estate_houses.geo_city_name.

Сделка квартиры — текущая сделка объекта: estate_sells.deal_id → estate_deals.deal_id.

Коды статусов объекта (справочник estate_statuses):

КодСтатусСтолбец по умолчаниюС опцией
20Подбор(8) Свободно—
30Бронь(7) Бронь«Брони как свободные» → (8)
32Маркетинговый резерв(9) М. резерв«Маркетинговые…» → (7)
50Сделка в работе(5) Сделок в работе«Сделки в работе как свободные» → (8)
53Сделка в работе*(10) М. сделка«Маркетинговые…» → (5)
52Маркетинговая сделка(10) М. сделка«Маркетинговые…» → (4)
100Сделка проведена(4) Сделок проведено—
3Нецелевойтолько (3) Кол-во«Неактив как проданные» → (4)

Поля дат для фильтра по периоду:

Тип датыПоле
Дата начала сделкиestate_deals.deal_date_start
Дата ДДУestate_deals.agreement_date
Дата сдачи в росреестрestate_deals.justice_date_send
Дата регистрацииestate_deals.justice_date
Дата проведения сделкиestate_deals.deal_date

Ключ строки:

  • по умолчанию — дом + тип квартиры + площадь;
  • с опцией «Группировать по кол-ву комнат» — дом + тип квартиры;
  • с опцией «Учитывать студии отдельно» к ключу добавляется признак студии estate_sells.estate_studia.

#Данные в системе

Дом — заголовок группы

ЭлементПолеЛогика
Название домаestate_houses.name—
Срок сдачиestate_houses.inServiceDate—
Город (фильтр)estate_houses.geo_city_name—
SELECT
    h.house_id                                      AS `ID дома`,
    h.name                                          AS `Дом`,
    FROM_UNIXTIME(h.inServiceDate, '%d.%m.%Y')      AS `Срок сдачи`,
    h.geo_city_name                                 AS `Город`
FROM estate_houses h
WHERE h.status > 0
  AND h.status <> 1;

Квартира — текущее состояние: (1) Тип квартиры, (2) S, м², (3) Кол-во, (6) Свободно с учётом брони, (7) Бронь, (8) Свободно, (9) М. резерв, (13) Сумма свободных, (14) Сумма М. резервов, (15) Сумма М. сделок

СтолбецПолеЛогика
(1) Тип квартирыestate_sells.estate_rooms, estate_sells.estate_studia«NК» — обычная квартира. При признаке студии и одной комнате — «1С», при двух и более комнатах — «NЕ». С опцией классов — estate_sells.flatClass, если он заполнен.
(2) S, м²estate_sells.estate_areaОбщая площадь, округление до 0,01.
(3) Кол-воestate_sells.estate_sell_idВсе квартиры группы в любом статусе.
(7), (8), (9)estate_sells.estate_sell_statusКоды — в таблице статусов.
(13), (14), (15)estate_sells.estate_priceПрайсовая цена из карточки объекта, скидки и спецпредложения не учитываются.
SELECT
    h.name                                          AS `Дом`,
    CASE
        WHEN s.estate_studia = 1 AND IFNULL(s.estate_rooms, 0) <= 1 THEN '1С'
        WHEN s.estate_studia = 1 THEN CONCAT(s.estate_rooms, 'Е')
        ELSE CONCAT(IFNULL(s.estate_rooms, 0), 'К')
    END                                             AS `Тип квартиры`,
    ROUND(s.estate_area, 2)                         AS `S, м²`,
    COUNT(s.estate_sell_id)                         AS `Кол-во, шт.`,
    SUM(s.estate_sell_status IN (20, 30))           AS `Свободно с учётом брони, шт.`,
    SUM(s.estate_sell_status = 30)                  AS `Бронь, шт.`,
    SUM(s.estate_sell_status = 20)                  AS `Свободно, шт.`,
    SUM(s.estate_sell_status = 32)                  AS `М. резерв, шт.`,
    SUM(CASE WHEN s.estate_sell_status = 20
        THEN s.estate_price ELSE 0 END)             AS `Сумма свободных, ₽`,
    SUM(CASE WHEN s.estate_sell_status = 32
        THEN s.estate_price ELSE 0 END)             AS `Сумма М. резервов, ₽`,
    SUM(CASE WHEN s.estate_sell_status IN (52, 53)
        THEN s.estate_price ELSE 0 END)             AS `Сумма М. сделок, ₽`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status > 0
  AND h.status > 0
  AND h.status <> 1
GROUP BY h.house_id, h.name, `Тип квартиры`, `S, м²`
ORDER BY h.name, `Тип квартиры`, `S, м²`;

С опцией «Использовать классы в качестве типов квартир» используйте этот запрос вместо предыдущего:

SELECT
    h.name                                          AS `Дом`,
    IF(s.flatClass IS NULL OR s.flatClass = '',
        CASE
            WHEN s.estate_studia = 1 AND IFNULL(s.estate_rooms, 0) <= 1 THEN '1С'
            WHEN s.estate_studia = 1 THEN CONCAT(s.estate_rooms, 'Е')
            ELSE CONCAT(IFNULL(s.estate_rooms, 0), 'К')
        END,
        s.flatClass)                                AS `Тип квартиры`,
    ROUND(s.estate_area, 2)                         AS `S, м²`,
    COUNT(s.estate_sell_id)                         AS `Кол-во, шт.`,
    SUM(s.estate_sell_status IN (20, 30))           AS `Свободно с учётом брони, шт.`,
    SUM(s.estate_sell_status = 30)                  AS `Бронь, шт.`,
    SUM(s.estate_sell_status = 20)                  AS `Свободно, шт.`,
    SUM(s.estate_sell_status = 32)                  AS `М. резерв, шт.`,
    SUM(CASE WHEN s.estate_sell_status = 20
        THEN s.estate_price ELSE 0 END)             AS `Сумма свободных, ₽`,
    SUM(CASE WHEN s.estate_sell_status = 32
        THEN s.estate_price ELSE 0 END)             AS `Сумма М. резервов, ₽`,
    SUM(CASE WHEN s.estate_sell_status IN (52, 53)
        THEN s.estate_price ELSE 0 END)             AS `Сумма М. сделок, ₽`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status > 0
  AND h.status > 0
  AND h.status <> 1
GROUP BY h.house_id, h.name, `Тип квартиры`, `S, м²`
ORDER BY h.name, `Тип квартиры`, `S, м²`;

Сделка — столбцы с учётом периода: (4) Сделок проведено, (5) Сделок в работе, (10) М. сделка, (16) Сумма проведённых сделок

СтолбецПолеЛогика
(4) Сделок проведеноestate_sells.estate_sell_statusКод 100.
(5) Сделок в работеestate_sells.estate_sell_statusКод 50.
(10) М. сделкаestate_sells.estate_sell_statusКоды 52 и 53.
(16) Сумма проведённых сделокestate_deals.deal_sumСумма договора по квартирам со статусом 100.
Периодполе даты из таблицы датКвартира учитывается, если дата её текущей сделки входит в период. Квартиры с пустой датой не учитываются.
SELECT
    h.name                                          AS `Дом`,
    CASE
        WHEN s.estate_studia = 1 AND IFNULL(s.estate_rooms, 0) <= 1 THEN '1С'
        WHEN s.estate_studia = 1 THEN CONCAT(s.estate_rooms, 'Е')
        ELSE CONCAT(IFNULL(s.estate_rooms, 0), 'К')
    END                                             AS `Тип квартиры`,
    ROUND(s.estate_area, 2)                         AS `S, м²`,
    SUM(s.estate_sell_status = 100)                 AS `Сделок проведено, шт.`,
    SUM(s.estate_sell_status = 50)                  AS `Сделок в работе, шт.`,
    SUM(s.estate_sell_status IN (52, 53))           AS `М. сделка, шт.`,
    SUM(CASE WHEN s.estate_sell_status = 100
        THEN d.deal_sum ELSE 0 END)                 AS `Сумма проведённых сделок, ₽`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
INNER JOIN estate_deals d ON d.deal_id = s.deal_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status IN (50, 52, 53, 100)
  AND h.status > 0
  AND h.status <> 1
  AND d.deal_date BETWEEN DATE('{{start_date}}') AND DATE('{{end_date}}')
GROUP BY h.house_id, h.name, `Тип квартиры`, `S, м²`
ORDER BY h.name, `Тип квартиры`, `S, м²`;

Программы покупки — (17) Прогр. «…»

СтолбецПолеЛогика
(17) Прогр. «…»estate_deals.deal_program_nameКоличество квартир со статусами 50 и 100, у которых в текущей сделке выбрана программа. Учитывается период.
SELECT
    h.name                                          AS `Дом`,
    CASE
        WHEN s.estate_studia = 1 AND IFNULL(s.estate_rooms, 0) <= 1 THEN '1С'
        WHEN s.estate_studia = 1 THEN CONCAT(s.estate_rooms, 'Е')
        ELSE CONCAT(IFNULL(s.estate_rooms, 0), 'К')
    END                                             AS `Тип квартиры`,
    ROUND(s.estate_area, 2)                         AS `S, м²`,
    d.deal_program_name                             AS `Программа покупки`,
    COUNT(s.estate_sell_id)                         AS `Квартир, шт.`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
INNER JOIN estate_deals d ON d.deal_id = s.deal_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status IN (50, 100)
  AND h.status > 0
  AND h.status <> 1
  AND d.deal_program_name IS NOT NULL
  AND d.deal_program_name <> ''
  AND d.deal_date BETWEEN DATE('{{start_date}}') AND DATE('{{end_date}}')
GROUP BY h.house_id, h.name, `Тип квартиры`, `S, м²`, d.deal_program_name
ORDER BY h.name, `Тип квартиры`, `S, м²`, d.deal_program_name;

#Расчётные данные

  • (6) Свободно с учётом брони = (7) Бронь + (8) Свободно.
  • (11) Средн. прайс, ₽/м² = ROUND(AVG(estate_sells.estate_price_m2)) по квартирам столбца (8). Это простое среднее: квартиры с разной площадью весят одинаково.
  • (12) Средн. по договору проведённых сделок, ₽/м² = AVG(estate_deals.deal_sum / estate_deals.deal_area) по квартирам столбца (4) с учётом периода. Это тоже простое среднее по сделкам.
  • Итого — суммы количества и сумм по квартирам дома или всего отчёта. Средние цены не рассчитываются.
  • Итого S — сумма estate_sells.estate_area по квартирам, учтённым в столбце.
  • Итого % = значение столбца в строке «Итого» / «Кол-во» в строке «Итого» × 100.

Средние цены по группам:

SELECT
    h.name                                          AS `Дом`,
    CASE
        WHEN s.estate_studia = 1 AND IFNULL(s.estate_rooms, 0) <= 1 THEN '1С'
        WHEN s.estate_studia = 1 THEN CONCAT(s.estate_rooms, 'Е')
        ELSE CONCAT(IFNULL(s.estate_rooms, 0), 'К')
    END                                             AS `Тип квартиры`,
    ROUND(s.estate_area, 2)                         AS `S, м²`,
    ROUND(AVG(CASE WHEN s.estate_sell_status = 20
        THEN s.estate_price_m2 END))                AS `Средн. прайс, ₽/м²`,
    ROUND(AVG(CASE WHEN s.estate_sell_status = 100
        AND d.deal_area > 0
        AND d.deal_date BETWEEN DATE('{{start_date}}') AND DATE('{{end_date}}')
        THEN d.deal_sum / d.deal_area END))         AS `Средн. по договору проведённых сделок, ₽/м²`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
LEFT JOIN estate_deals d ON d.deal_id = s.deal_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status > 0
  AND h.status > 0
  AND h.status <> 1
GROUP BY h.house_id, h.name, `Тип квартиры`, `S, м²`;

Итого S и Итого % по дому (пример для столбцов текущего состояния):

SELECT
    h.name                                          AS `Дом`,
    COUNT(s.estate_sell_id)                         AS `Кол-во, шт.`,
    SUM(s.estate_area)                              AS `Итого S: Кол-во, м²`,
    SUM(CASE WHEN s.estate_sell_status = 30
        THEN s.estate_area ELSE 0 END)              AS `Итого S: Бронь, м²`,
    SUM(CASE WHEN s.estate_sell_status = 20
        THEN s.estate_area ELSE 0 END)              AS `Итого S: Свободно, м²`,
    SUM(s.estate_sell_status = 30) * 100
        / COUNT(s.estate_sell_id)                   AS `Итого %: Бронь`,
    SUM(s.estate_sell_status = 20) * 100
        / COUNT(s.estate_sell_id)                   AS `Итого %: Свободно`
FROM estate_sells s
INNER JOIN estate_houses h ON h.house_id = s.house_id
WHERE s.estate_sell_category = 'flat'
  AND s.activity = 'sell'
  AND s.estate_sell_status > 0
  AND h.status > 0
  AND h.status <> 1
GROUP BY h.house_id, h.name WITH ROLLUP;

Строка с пустым домом — итоги по всем объектам.