Отдельные и независимые подсчеты из одной и той же таблицы накопления фактов
Итак, у меня есть таблица "Факты продаж", основанная на модели жизненного цикла транзакции (или накапливающей таблицы моментальных снимков фактов), с очень многими различными столбцами ключей даты (например, дата продажи, дата возврата и т. Д.). Я сделал разные измерения для каждого из столбцов даты, т. Е. Ключевой столбец суммы непустой даты продажи - это [Количество продаж], а ключевой столбец суммы непустой даты возврата - [количество возвратов] и т. Д. Каждый столбцы ключа даты связаны с различными измерениями ключа даты. Измерение даты продажи и возвращаемое измерение являются ролевыми измерениями, основанными на одной и той же таблице DimDate. Существуют и другие измерения, не основанные на датах, но для примера я оставлю это простым - есть еще одно дополнительное измерение для storeType (розничная торговля, электронная торговля и т. Д.).
Когда я просматриваю куб (так как большинство пользователей просматривают и исследуют куб через Excel), я могу перетащить [Количество продаж] и [Количество возвратов] в раздел столбцов, а затем перетащить измерение StoreType в раздел строк и он правильно отображает данные как таковые:
Number of Sales Number of Refunds
----------------------------------------------------
Retail 10 8
eCommerce 5 2
Это хорошо, потому что я не применял никаких фильтров даты, поэтому он отображает все. Я подтвердил данные в таблице фактов, и, действительно, цифры верны.
Но затем я хочу применить один и тот же фильтр даты к [Number of Sales] и [Number of Refunds] - поэтому я перетащил оба эти измерения в область фильтра и применил один и тот же фильтр даты к обоим - и, конечно, к числа одинаковы для обоих столбцов:
Number of Sales Number of Refunds
----------------------------------------------------
Retail 5 4
eCommerce 5 4
.. потому что я думаю, эффективно применяя одну дату к обоим измерениям даты, я фильтрую до одного и того же набора строк (поскольку они принадлежат одной и той же таблице). Я знаю, что это неверно, потому что я могу запросить отдельные строки из таблицы фактов и увидеть, что они имеют разные значения.
По сути, я хочу показать две колонки вместе, но на самом деле они не имеют ничего общего. Я мог бы даже иметь два разных фильтра даты в каждом столбце, то есть показывать все продажи за 2010 финансовый год и показывать все возмещения за 2011 финансовый год. Это снова полностью просматривается пользователем, поэтому меры должны быть доступны без необходимости делать сложные запросы MDX.
Я предполагаю, что я могу создать другую таблицу фактов для размещения тех же данных в таблице фактов транзакций, и затем я могу подсчитать их по отдельности - но нет смысла иметь две отдельные таблицы фактов, чтобы более или менее рассчитывать одно и то же.
есть идеи как это сделать? Помогите!!
1 ответ
Похоже, что вам может потребоваться применить оператор case к вашим агрегатным столбцам. Что-то вроде этого:
SELECT StoreType
, SUM(CASE WHEN SalesCol IS NOT NULL THEN 1 ELSE NULL END) AS NumSales
, SUM(CASE WHEN RefundCol IS NOT NULL THEN 1 ELSE NULL END) AS NumRefunds
FROM FactTable
WHERE SaleDate BETWEEN Date1 AND Date2
GROUP BY 1