Вопрос от новичка, но сломал всю голову.
Есть таблица с фактическим данными продаж в разрезе дней, то в ней есть поле "Дата проводки" для каждого акта.
Есть вторая таблица с плановыми данными, в ней поле - "Дата", которая делит плановые данные по продажам по месяцам.
Обе таблицы связаны через ID Клиента
Задача сделать план-факт, в котором в столбцах будут месяцы/кварталы, в строке "Клиенты"
Для агрегации дней в кварталы добавил "Календарь" и связал его с таблицей фактических данных, то есть факт в разрезе квартала я сформировал.
Но если я добавляю еще одну связь "Календарь"- "Плановые данные", то создается синтетический ключ и перестаёт работать связь "План"-"Факт" через ID клиента.
Как вообще агрегировать разные таблицы с их локальными датами событий под общую агрегацию "Квартал"?
Необходимо объединить все таблицы в одну, чтобы была только одна связь с Календарем?
Потенциально нужно будет добавить еще таблицу по "ретро-бонусам" в разрезе месяцев, и также учесть их в обшей таблице.
Покажите таблицы
Приложил
Для удобства (лично моего) поле "Месяц" во второй таблице (планы) я принял в формате даты (DD.MM.YYYY).
Т.е. будет написано не "январь", а "31.01.2021". Во-первых есть ГОД (это важно), во-вторых для авторов таблицы с планами наверное не составит большого труда вместо "январь" проставить "31.01.2021".
В принципе рекомендую использовать для построения кликовских таблиц конкретную дату, потом меньше гемороя с преобразованиями и подсчетами.
Но это дело личное, как говорится - каждый сам себе художник.
NoConcatenate
ФАКТ:
LOAD
ПРОТОКОЛ AS Ф_ПРОТОКОЛ,
DATE(ДАТА_ПРОВ) AS Ф_ДАТА_ПРОВ,
СУММА AS Ф_СУММА,
ВД AS Ф_ВД,
КОНТРАГЕНТ AS Ф_КОНТРАГЕНТ,
ВД & КОНТРАГЕНТ & MONTHNAME(DATE(ДАТА_ПРОВ)) AS PLAN_FLAG
FROM...;
NoConcatenate
ПЛАН:
LOAD
ПРОТОКОЛ AS П_ПРОТОКОЛ,
DATE(МЕСЯЦ) AS П_МЕСЯЦ,
СУММА AS П_СУММА,
ВД AS П_ВД,
КОНТРАГЕНТ AS П_КОНТРАГЕНТ,
ВД & КОНТРАГЕНТ & MONTHNAME(DATE(МЕСЯЦ)) AS PLAN_FLAG
FROM...;
Для построения 3-ей и 4-ой таблиц в качестве измерений используйте поля таблицы "План" (факта может и не быть, а если нет плана - то и факт не нужен).
В четвертой таблице в полях месяцев (январь, февраль...) пишем:
SUM(
IF(SUM(Ф_СУММА) > 0, SUM(Ф_СУММА), SUM(П_СУММА))
)
Если есть необходимость, таблицу с Фактом можно привязать к календарю.
Вроде должно получится.
Не понял, есть ли прямая связь поля ПРОТОКОЛ с другими полями.