Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Архитектура для Oracle BI / 9 сообщений из 9, страница 1 из 1
05.09.2017, 00:27
    #39515400
Nenormalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
День добрый!

Хочу посоветоваться с опытными коллегами, как лучше сделать архитектуру для таблицы типа:

Дата1 Месяц1 Сумма1 Статус1 Пользователь1
Дата2 Месяц1 Сумма2 Статус2 Пользователь1
Дата3 Месяц2 Сумма3 Статус1 Пользователь2
Дата4 Месяц2 Сумма4 Статус1 Пользователь2
И тд

Сложность(?) в том что суммы по пользователю складывать нельзя, но хочется решать вопросы вроде:
1. Получить последнюю сумму по статусу1 для каждого пользователя и сложить их суммы.
В таком случае я думала использовать разную группировку по dimension, я как понимаю если есть календарь иерархичный это сработает как если бы искать аналитически максимальную дату и потом сумму к ней. Но я еще не проверяла. Какие могут быть нюансы при такой структуре? Просто таких статусов много и почти по каждому высчитывать отдельный показатель, а там не только сумма, а еще количество и тд, мне кажется не круто.

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

Тут мне в голову пришло только именно отдельно держать поле по необходимым пред. Статусам, но это конечно далеко неидеальный вариант:)


Буду рада любой помощи, может есть какие-то статьи на подобную тему, я к сожалению не смогла найти. Ну и вообще если имели опыт с подобными решениями, как не собрать все грабли?
...
Рейтинг: 0 / 0
05.09.2017, 06:26
    #39515428
Be or not to be...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
А в чем именно проблема и почему нельзя сделать так как вы нарисовали? Только зачем отдельное поле с месяцем хранить?

Я так понимаю, что ваша табличка вполне может выглядеть как фактовая без партиционирования по дате, так как нужно будет сканировать вашими запросами точно не одну, две партиции в таком случае. Проиндексируете поле с ссылкой на измерение с пользователем, статусом и все по большому счету. Если думаете о том, что ID пользователя в _F таблице будет меняться, то у него есть должен быть неизменный идентификатор в самом dimension, который и будете использовать.
...
Рейтинг: 0 / 0
05.09.2017, 19:09
    #39515968
Nenormalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
Be or not to be...,

Просто я такое решение не проверяла, и боюсь что что-то упустила, либо будет слишком медленно считаться. Я конечно потестирую, но хотелось бы послушать тех у кого это используется в бою. Месяц нужен для партиций по периоду, и в рамках него будет искаться последняя дата по статусу, а не по всей таблице. А вообще мне просто непривычно делать хранилище по датам, а не по месяцам, причом именно в формате "лога", а не на конец месяца, думала может посоветуют что почитать с подобными примерами.
...
Рейтинг: 0 / 0
06.09.2017, 13:50
    #39516449
Sintetik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
не нужно хранить месяц в фактовой таблице только ради партишенинга, его можно и по дате сделать
верхние уровни иерархий хранят отдельно обычно если показатель неаддитвен (как у вас с пользователями получилось) т.е. если сумма за все дни месяца не равна данным за месяц и их нужно хранить отдельно, редко но бывает

сделайте нормальный dimension даты и свяжите его с фактом,
имеет смысл подумать об отдельном dimension с пользователем и статусом, по пользователю факт неаддитивен, может получится его аттрибутом сделать? нужно собрать все пожелания по запросам и покрутить их, на основе одного запроса много выводов не сделаешь
...
Рейтинг: 0 / 0
07.09.2017, 06:39
    #39516875
Be or not to be...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
Nenormalka,

Вам, конечно, виднее о сути ваших сущностей, но кажется, что партиционирование по дате как раз таки вполне классическое. А если нужны и дневные, и месячные факты, то строятся месячные агрегаты. Но, опять же, это зависит от приходящих запросов. Для таблиц типа операций, платежей и всего прочего чаще всего вообще не уместно партиционирование, так как запросы могут спрашивать данные как за день, так и за месяц, 20 дней, "дату последнего погашения", "дата первой выдачи" и т.п., что все-равно приведет к полному сканированию таблицы. Сколько данных у вас, скажите? Может, там 100к строк всего навсего...
...
Рейтинг: 0 / 0
12.09.2017, 16:23
    #39519972
Nenormalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
Be or not to be...,
попробовала в итоге на примере и не работает это:(

Dimension...Formula
Other............SUM("ModelName"."F actTableName".Sales)
Date.............LAST("ModelName"." FactTableName".Sales)

То есть он берет последнюю сумму в периоде, например за два месяца, но не учитывает пользователя, всячески пыталась ему подсунуть пользователя, но не получилось:( Может быть кто-то знает как это сделать?

Хочу из такого набора данных:

Дата1 Месяц1 Сумма1 Статус1 Пользователь1
Дата2 Месяц1 Сумма2 Статус2 Пользователь1
Дата5 Месяц2 Сумма5 Статус1 Пользователь1
Дата3 Месяц2 Сумма3 Статус1 Пользователь2
Дата4 Месяц2 Сумма4 Статус1 Пользователь2

Получить при выборе Месяца1 и Месяц2, где статус=Статус1:

Сумма5+Сумма4


Можно вообще такое сделать?
...
Рейтинг: 0 / 0
12.09.2017, 17:06
    #39519995
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
~
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
      select 'Дата1'a, 'Месяц1'b, 1 c, 'Статус1'd, 'Пользователь1'e from dual
union select 'Дата2', 'Месяц1', 2, 'Статус2' ,'Пользователь1' from dual
union select 'Дата5', 'Месяц2', 5, 'Статус1' ,'Пользователь1' from dual
union select 'Дата3', 'Месяц2', 3, 'Статус1' ,'Пользователь2' from dual
union select 'Дата4', 'Месяц2', 4, 'Статус1' ,'Пользователь2' from dual
), t2 as (
select e,last_value (c) over ( partition by e order by c) c
  from t
)
  select e, sum( c )
    from t2
group by e;
...
Рейтинг: 0 / 0
12.09.2017, 20:44
    #39520101
Nenormalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
orawish,

Замечательный запрос, я такие тоже писать умею:) но вопрос то как это сделать в OBIEE?
...
Рейтинг: 0 / 0
13.09.2017, 13:04
    #39520403
Nenormalka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура для Oracle BI
Nenormalka,

самый лучший ответ, самой себе видимо:) Вдруг кому пригодится, ибо мне порядок показался странным.
Чтобы би именно сложил суммы по пользователю, потом взял их по последней дате и потом опять сложил порядок нужно указать такой -> Others sum(), dim_calendar last(), dim_пользователь sum()
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Архитектура для Oracle BI / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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