powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Использование разряженных таблиц в Microstrategy
10 сообщений из 10, страница 1 из 1
Использование разряженных таблиц в Microstrategy
    #33777244
infoman2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Уже разочаровался в поисках решения, поэтому обращаюсь к специалистам с таким вопросом:
в хранилище есть таблица остатков в разряженном виде (из-за количества записей около 100 миллионов записей в свернутом виде такой способ хранения является единственным воплотимым в хранилище). Столбцы таблицы n_daily_rests :
Код: plaintext
Shop, Artikul, DateBegin, DateEnd, Amount
Как пример, если по одному магазину по определенному артикулу в течение трех месяцев не было продаж и остаток оставался одинаковым, то в этой таблице будет всего одна строчка (а не 92 штуки на каждый день):

Код: plaintext
1.
2.
  Shop     Artikul     DateBegin    DateEnd   Amount
Магазин1  Телевизор    01 . 01 . 2006     01 . 03 . 2006     15 

Итак, теперь у меня стоит задача предоставить доступ к этой таблице через Microstrategy. Как известно, перед добавлением такой таблицы в MSTR, необходимо ее развернуть . Конечно, можно сделать простой View , но тогда, по словам создателей хранилища, если количество желающих обратиться к такой View по всем магазинам за весь период превысит одного пользователя, сервер зависнет.
Со стороны создателей хранилища были предложены два варианта решения, однако как реализовать из в Microstrategy, мне пока не понятно:
Вариант 1. Параметризованные View. В хранилище создается параметризованная View V_MSTR_OST . Перед тем, как обратиться к V_MSTR_OST , Microstrategy должна запустить строку инициализации этой View по установленному пользователем фильтру.
Например, если пользователь выбрал в фильтре отчета или через Promt два магазина Shop IN (43,44) , а так же выбрал фильтр по времени с 02.10.2005 по 16.10.2005 , то перед обращением к V_MSTR_OST должен выполниться следующий код:
Код: plaintext
1.
2.
exec mstr_ost_week.set_param(date_beg_in => TO_DATE('02.10.2005', 'dd.mm.yyyy'),
                             date_end_in => TO_DATE('16.10.2005', 'dd.mm.yyyy'),
                             type_calendar_in =>  1 , shop_in => '43,44');
А потом уже смело можно обращаться к V_MSTR_OST , там лежат уже только необходимые данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  Shop     Artikul      Date        Amount
    43      Телевизор1  02 . 10 . 2005         15 
    43      Телевизор1  03 . 10 . 2005         8 
		...
    44      Телевизор5  10 . 10 . 2005         84 
    44      Телевизор5  11 . 10 . 2005         83 
    44      Телевизор5  11 . 10 . 2005         82 
		...

Есть ли у кого идеи или опыт работы с такими случаями в Microstrategy. Есть ли шансы реализовать такую схему через Microstrategy? Есть ли вариант еще до генерации финального SQL произвести инициализацию фильтра остатков по выбранному фильтру?


Вариант 2. Разворачивающие SELECT. Производим прямое обращение к таблице остатков, пересекая её с сгенерированным по фильтру пользователя календарем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT c.date_, ost.art, ost.shop, ost.amount
  FROM n_daily_rests ost,
       -- создаем таблицу-календарь для ускорения выполнения запроса
       -- и просто пересекаем таблицу остатков n_daily_rests c этим календарем
          (SELECT date_ FROM
             TABLE (tm_util.calendar (TO_DATE ('02.10.2005','dd.mm.yyyy'),
                                      TO_DATE ('16.10.2005', 'dd.mm.yyyy'),  1 ) ) ) c
 WHERE SIGN(ost.amount) =  1   -- отрезаем нулевые остатки 
   AND ost.shop IN ( 47 , 48 )
   AND (c.date_ >= ost.datebegin AND c.date_ < ost.dateend)

В этом случае сложность состоит в передаче в этот запрос фильтра по времени для генерации таблицы-календаря.


Итак вопрос, сталкивался кто-нибудь из Вас с такой задачей, и какие здесь могут быть пути реализации доступа к остаткам? Принимаются любые идеи. Заранее большое спасибо.

P.S. Все решения по созданию такой сложной структуры в ИХ примались исходя из того, что в таблице N_DAILY_RESTS порядка 100 миллионов записей. Поэтому для оптимизации запросов были придуманы различные методы ускорения работы, такие как вспомогательные календари и прочее.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33777316
MSTR Fan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идею с инициализацией view для каждого отчета советую сразу отклонить - это не промышленное решение. Затем все пользователям объяснять последовательность действий при создании отчета с одной определенной метрикой...

Советую пойти по классическому решению - хранить остаток неаддитивным способом на каждую дату изменения.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33777357
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то хорошо бы назвать версию MSTR и на чём сделано хранилище.
Пробовали истользовать разбиения, от СУБД или MSTR? Если да, то даёт ли это какой-то выйгрыш?
Задача с остатками неоднократно разбиралась на этом форуме, может быть не в приложении к MicroStrategy. Вы смотрели эти топики7
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33777375
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSTR FanСоветую пойти по классическому решению - хранить остаток неаддитивным способом на каждую дату изменения.

А это разве даст значение остатка на дату, когда он не меняется.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33777785
MSTR Fan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор СаковичА это разве даст значение остатка на дату, когда он не меняется.

Используя view легко извлекается.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33777972
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSTR FanИспользуя view легко извлекается.

Если view, то конечно. Я так и не понял, пробовал ли автор топика просто сделать такой view. Это же проще всего. Вопрос в том, что получится по производительности.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33778058
MSTR Fan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Виктор, я тоже считаю что view это проще всего.

2 infoman2001:

Вот пример для простейшей таблицы с остатками на каждую дату изменения:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE test_dep(
amt_dt DATE, -- дата модификации остатка
amt_val DECIMAL( 12 , 0 ) -- значение остатка
) PRIMARY INDEX (amt_dt);

Sys_calendar.calendar -- просто список дат

CREATE VIEW test_dep_mod AS -- view показывающее остатки на каждый день календаря
SELECT
tmp_tbl.amt_dt,dp.amt_val
FROM (
	SELECT cal.calendar_date,
	MAX((CASE WHEN dp.amt_val IS NULL THEN  0  ELSE  1  END)*cal.calendar_date)
OVER (ORDER BY cal.calendar_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
	FROM test_dep dp
	RIGHT OUTER JOIN sys_calendar.calendar cal
	ON dp.amt_dt=cal.calendar_date
) tmp_tbl(amt_dt,ref_dt)
INNER JOIN test_dep dp
ON tmp_tbl.ref_dt=dp.amt_dt;
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33778060
infoman2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Системы: Oracle10g, MSTR 8.01.
Тестируем снова. В прошлый раз ничем хорошим это не кончилось. Спасибо, вскоре отпишусь как успехи.
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33778176
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
infoman2001Системы: Oracle10g, MSTR 8.01.
Тестируем снова. В прошлый раз ничем хорошим это не кончилось. Спасибо, вскоре отпишусь как успехи.

А чем плохим закончилось?

А если так?

CREATE VIEW n_daily_rest_all AS
SELECT

A1.Articul,
A1.Shop,
A2.calendar_date,
A1.REM
FROM n_daily_rest A1, calendar A2
WHERE A2.calendar_date < A1.DateEnd AND A2.calendar_date>=A1.DateBegin
...
Рейтинг: 0 / 0
Использование разряженных таблиц в Microstrategy
    #33790005
infoman2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо. Вопрос именно так и решили.
Дело только за оптимизацией сложных запросов и проталкиванием в оптимизатор сложных условий.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Использование разряженных таблиц в Microstrategy
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]