Отдельные и независимые подсчеты из одной накапливающейся таблицы фактов

Итак, у меня есть таблица фактов продаж, основанная на модели жизненного цикла транзакции (или накопительной таблице моментальных снимков фактов), с очень большим количеством различных столбцов ключей даты (например, дата продажи, дата возврата и т. Д.). Я сделал разные измерения для каждого столбца даты, например, ключевой столбец даты непустых продаж - это [Количество продаж], а ключевой столбец суммы непустых возвращенных средств - это [Количество возвратов] и т. Д. столбцов ключей даты относятся к разным параметрам ключа даты. Измерение даты продажи и измерение даты возврата - это измерения для ролевой игры, основанные на одной и той же таблице DimDate. Есть и другие измерения, не основанные на дате, но для этого примера я буду упрощен - есть еще одно дополнительное измерение для storeType (розничная торговля, электронная торговля и т. Д.)

Когда я просматриваю куб (поскольку большинство пользователей просматривают и исследуют куб с помощью excel), я могу перетащить [Number of Sales] и [Number of Refunds] в раздел столбцов, а затем я могу перетащить измерение StoreType в раздел строк , и он правильно отображает данные как таковые:


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           10                8
eCommerce        5                 2

Это нормально, потому что я не применял никаких фильтров даты, поэтому он отображает все. Я подтвердил данные в таблице фактов, и действительно, цифры верные.

Но затем я хочу применить один и тот же фильтр даты как к [Количество продаж], так и к [Количество возвратов], поэтому я перетаскиваю оба этих измерения в область фильтра и применяю один и тот же фильтр даты к обоим - и, конечно же, числа одинаковы для обоих столбцов:


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           5                 4
eCommerce        5                 4

.. потому что я думаю, эффективно применяя одну дату к обоим измерениям даты, я фильтрую до одного и того же набора строк (поскольку они взяты из одной таблицы). Я знаю, что это неверно, потому что я могу запросить отдельные строки из таблицы фактов и увидеть, что они имеют разные значения.

По сути, я хочу показать две колонки вместе, но на самом деле у них нет ничего общего. Я мог бы даже иметь два разных фильтра дат в каждом столбце, то есть показывать все продажи за 2010 финансовый год и показывать все возмещения за 2011 финансовый год. Это снова полностью доступно для просмотра пользователем, поэтому меры должны быть доступны без необходимости выполнять сложные запросы многомерных выражений.

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

есть идеи как это сделать? помощь!!


person M.R.    schedule 12.09.2011    source источник


Ответы (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
person Rob Paller    schedule 25.09.2011