Я работаю над витриной для наших отделов продаж и маркетинга и столкнулся с проблемой моделирования. Наша ERP хранит данные о ценах несколькими способами:
- Перечислите цены для каждого товара
- Процент скидки от прейскурантных цен для линейки продуктов для групп клиентов или для конкретной учетной записи.
- Специальная цена на товар для групп клиентов или для конкретной учетной записи.
Отдел ценообразования в первую очередь использует эти данные в оперативных целях, а не в аналитических целях. Например, они создают отчеты для клиентов («Какая у меня специальная цена /% скидки?») И определяют, какие товары / группы товаров необходимо изменить, когда они используют новую стратегию ценообразования.
Ценовые изменения происходят довольно регулярно и в небольшом масштабе, обычно для каждого покупателя или для каждой отдельной позиции. Нечасто в дополнение к скидкам на уровне клиента вносятся крупномасштабные корректировки в списки цен и групповые цены (скидки и отдельные товары).
Моя голова была в создании одной или нескольких таблиц фактов для представления этого процесса. К сожалению, уже не существует бизнес-ключа для ценообразования. Также не существует конкретной «даты транзакции», поскольку ERP не ведет (точно) записи об изменении цен. По сути, «ценовое событие» будет представлять собой комбинацию:
- Дата вступления в силу
- Дата окончания
- Товар ИЛИ продуктовая линейка
- (Не требуется для прейскурантной цены) клиент или группа клиентов
- Сумма цены ИЛИ процент скидки
Единая таблица фактов кажется проблематичной, поскольку мне придется иметь дело с множеством недопустимых комбинаций измерений и фактов. Во-первых, в записи никогда не будет ни суммы цены, не равной NULL, ни процентной ставки скидки, отличной от NULL; ценовые события - либо-либо. Во-вторых, для каждого факта действительны только определенные комбинации измерений. Например, процент скидки всегда будет иметь только линейку продуктов, а не отдельный товар.
Имеет ли смысл моделировать ценообразование в виде таблицы фактов? Если да, то сколько столов мне следует рассмотреть? Моя интуиция состоит в том, чтобы использовать по крайней мере два, один для процентов и один для сумм цен, но это все равно оставляет проблему, когда каждая запись будет иметь либо действительную группу клиентов, либо действительного покупателя (или ни одного, для прейскурантных цен), поскольку нам необходимо поддерживать ценообразование для конкретного клиента отдельно от любых групповых цен, которые могут быть у клиента.