Отдельные и независимые подсчеты из одной и той же таблицы накопления фактов - PullRequest
0 голосов
/ 12 сентября 2011

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

Когда я просматриваю куб(так как большинство пользователей будут просматривать и исследовать куб с помощью Excel), я могу перетащить [Количество продаж] и [Количество возвратов] в раздел столбцов, а затем перетащить измерение 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 финансовый год. Это снова полностью просматривается пользователем, поэтому меры должны быть доступны без необходимостиделать сложные запросы MDX.

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

Есть идеи, как это сделать?помогите !!

1 Ответ

0 голосов
/ 25 сентября 2011

Похоже, вам может понадобиться применить оператор 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
...