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

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

Дата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
Архитектура для Oracle BI
    #39515428
Be or not to be...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в чем именно проблема и почему нельзя сделать так как вы нарисовали? Только зачем отдельное поле с месяцем хранить?

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

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

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

Вам, конечно, виднее о сути ваших сущностей, но кажется, что партиционирование по дате как раз таки вполне классическое. А если нужны и дневные, и месячные факты, то строятся месячные агрегаты. Но, опять же, это зависит от приходящих запросов. Для таблиц типа операций, платежей и всего прочего чаще всего вообще не уместно партиционирование, так как запросы могут спрашивать данные как за день, так и за месяц, 20 дней, "дату последнего погашения", "дата первой выдачи" и т.п., что все-равно приведет к полному сканированию таблицы. Сколько данных у вас, скажите? Может, там 100к строк всего навсего...
...
Рейтинг: 0 / 0
Архитектура для Oracle BI
    #39519972
Nenormalka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Архитектура для Oracle BI
    #39519995
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
~
Код: 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
Архитектура для Oracle BI
    #39520101
Nenormalka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish,

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

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


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