Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
Имеется следующая информация о визитах клиентов:
Объект, Город, Страна, Время начала визита, время конца визита, Доход.
Требуется создать куб на основе этих данных.
И если я правильно понимаю, всё было бы хорошо и просто:
Измерение времени (дата - месяц - квартал - год - имя месяца - месяц года - номер квартала года),
измерение объект (ID Объекта - Имя объекта),
измерение город (Id Города - Имя города - Имя Страны),
и меры Число визитов, Число визитов без оплаты, и ДоходПолученный.
Но... Но число визитов и доход надо разбить ещё и по продолжительности визитов (до 15 минут, до часа, до двух часов, до трёх часов, до 4 часов, более 4 часов).
Продолжительность визита вычисляется как
case datediff(minute,[Время начала  визита], [время конца визита])/60.0 
when <=0.25 then 0.25
when >0.25 and <=1 then 1
when >1  and <=2 then 2
when >2  and <=3  then 3
when >3  and <=4  then 4
when >4 then 5
end as 'ВремяВизита'


И вопрос вот в чём - создавать дополнительное измерение ВремяВизита или дополнительные меры для числа визитов и дохода? Что правильнее? И поправьте меня в остальных мерах и измерениях, если в чём ошибся. imho, правильнее создать измерение.
3 июн 17, 12:23    [20536753]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
DaniilSeryi
Но число визитов и доход надо разбить ещё и по продолжительности визитов
создавать дополнительное измерение ВремяВизита или дополнительные меры для числа визитов и дохода?
измерение удобно если фокус на функционале фильтрации
меры удобнее если фокус на самих значениях и сравнении их друг с другом
4 июн 17, 01:01    [20537585]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
DaniilSeryi,

определитесь с гранулярностью Факта.
Самое простое --
ФактВизит
(ДимДатаВизитаФК инт -- YYYYMMDD начало
ДимВремяВизитаФК инт -- HHMMSS начало
ДлительностьВизита инт -- минуты ------мера
DimПериодДлительностиФК инт -- ссылка на дименшн
Доход нумерик(18,2) -----------мера
ДимОбьектФК инт
ДимЛокейшнФК инт
)

DimПериодДлительности
(DimПериодДлительностиПК инт -- ключ
ПериодКод
ПериодНазвание_РУС
ПериодНазвание_ENG
)

-1 'Неопределено''Неопределено''Unknown'
1 'М15' '0-15 минут''0-15 minutes'
2 'М30' '15-30 минут''15-30 minutes'
3 'H01' '30-60 минут''30-60 minutes'
4 'H99' '>4 часов''>4 hours'



...судя по продолжительности , похоже на ескорт сервис.
4 июн 17, 03:00    [20537624]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
javajdbc,
Представил себе продвинутый эскорт-сервис с базами данных, отчетностью и кубами для аналитиков. Посмеялся.
4 июн 17, 15:41    [20538001]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
javajdbc,

Что касается гранулярности - то в моём случае это совокупность визитов за день, а то и за месяц, а не отдельный визит.
При этом один из срезов, который сейчас делается - как раз по объектам и продолжительности визитов .
4 июн 17, 15:56    [20538014]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
DaniilSeryi
javajdbc,

Что касается гранулярности - то в моём случае это совокупность визитов за день, а то и за месяц, а не отдельный визит.
При этом один из срезов, который сейчас делается - как раз по объектам и продолжительности визитов .


....ок, но полезнее сделать сначала DWH (или куб) с гранулярностью
одного визита. Тогда конкретная продолжительность и доход будет мерой.
и к каждому визиту можно будет подсоединить срез DimPeriod.
Такой подход, по идее, закрывает все ваши задачи.
4 июн 17, 17:17    [20538086]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2091
javajdbc,

не закроет, ибо "совокупность визитов за день, а то и за месяц, а не отдельный визит"
не позволит создать полноценную связь с измерением "Продолжительность"
5 июн 17, 09:55    [20539201]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
ShIgor
javajdbc,

не закроет, ибо "совокупность визитов за день, а то и за месяц, а не отдельный визит"
не позволит создать полноценную связь с измерением "Продолжительность"



Если что-то нельзя связать через САМЫЙ гранулярный факт,
то это уже не связывается вообще. По описанию логической модели: Визит --
самый мелкий факт.

....конечно, можно до-придумать что
Визит состоит из нескольких (ескорт) Сервисов, тогда можно
еще мельче факт сделать...

...ставьте задачу полнее и будет точнее решение...
5 июн 17, 14:03    [20540238]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
javajdbc,

Вопрос интересный появился: раз у меня зависимость объект - Локация, то делать Снежинку
create table dwh.DimObject
(DimObjectID int identity (1,1),
ObjectShortName varchar(4),
ObjectFullName varchar(40),
LocationID int
)

create table dwh.DimLocation
(LocationID int identity (1,1),
CityName varchar(40),
CountryName varchar(40),
)

или всё-таки Звезду

create table dwh.DimObject
(DimObjectID int identity (1,1),
ObjectShortName varchar(4),
ObjectFullName varchar(40)
)

create table dwh.DimLocation
(LocationID int identity (1,1),
CityName varchar(40),
CountryName varchar(40),
)

?
Пока иду по первому варианту.
5 июн 17, 16:21    [20540880]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17715
DaniilSeryi,

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

На небольших обьемах, без SCD, и/или если дименшн нужно использовать
без фактов, то двух-етажная снежинка вполне приемлима.
6 июн 17, 02:33    [20541896]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
По итогам размышлений у меня получается две таблицы фактов.
Первая - с измерение "Объект - Город - Страна" и измерением времени.
Вторая - с измерением "Объект - Город - Страна", измерением времени и измерением "Длительность визита на объект", предложенным javajdbc.

Причина в том, что к ряду мер применение измерения "Длительность визита на объект" невозможно (пример таких мер - число звонков или число людей, прошедших мимо объекта или число сорвавшихся заказов).
Как я понимаю, обе таблицы фактов можно засунуть в один и тот же куб.
А вот что делать потом, когда засунул в куб вторую таблицу фактов? Связывать их между собой, не связывать, добавлять в куб дополнительные копии таблиц измерений, или привязывать к таблицам фактов одни и те же копии таблиц измерений? Или надо сделать что-то ещё?
И будет ли возможность в один отчёт засунуть меры из обоих таблиц, или нет?

В запросе на основе данных OLTP фигурируют агрегированные данные, которые потом распадаются на эти две таблицы фактов, и хочется генерировать максимально похожий по набору данных отчёт, отсюда и вопросы.
8 июн 17, 10:24    [20549105]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
Коллеги, возвращаемся к нашим "эскорт-сервисам".

Вопрос первый: данные до доходам теперь требуется хранить в трёх валютах. То есть число строк с доходами утраивается. А данные по числу визитов от валюты не зависит. Как правильно хранить данные?
В двух таблицах фактов, связанных друг с другом по ID "эскорт-сервиса" и дате? Или оставить как есть - в большой таблице, а в отчётах по посещаемости ставить фильтр по коду одной из валют? Второй вариант мне не нравится из-за разбухания данных, а первый ещё не пробовал никогда.

И второй вопрос - требуется добавить в куб данные по плану и прогнозу посещаемости и дохода. Здесь доход тоже будет пересчитываться в три валюты, но проблема в другом. Проблема в том, что здесь данные свёрнуты по месяцам, а не по дням. Как их правильно связать с основными данными (основные данные свёрнуты по дням)?
30 янв 18, 17:21    [21152032]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
vikkiv
Member

Откуда: London
Сообщений: 1477
DaniilSeryi,

по валютам - можно ещё вариант хранения каждой валюты в своей колонне (даже хранить для каждой строки все 3 валюты по курсу на тот день) плюс колонна в какой валюте собственно была сделка (или три колонны некоторые пустые - плюс отдельная колонна в какой-бы небыло валюте, плюс колонна - идентификатор валюты) .. в общем как намекает javajdbc - зависит от воображения, требований/архитектуры/опыта/планов и лучших практик..

данные прогноз/факт:
1) тянутся из разных групп мер в одну меру
2) сливаются в одну меру которая внутри переключает (прогноз/факт) в зависимости от текущей даты между прогнозом/фактом (уровнями ниже месяца - нужна дополнительная логика чтобы не брал целый месяц прогноза плюс несколько дней факта)
3) эта новая мера для прогноза существует только на уровне гранулярности атрибута иерархии месяц (выше считается из children) - факта можно оставить дни - для прогноза - месяц и выше (т.к. алгоритм разбивки в задании пока не задан), делается через scope, хотя можно и материализовать.
30 янв 18, 18:25    [21152217]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
vikkiv,

Я правильно понимаю, что для группы мер прогнозов надо будет делать отдельное измерение дат? Или привязывать существующее, но по столбцу месяцев?
30 янв 18, 18:33    [21152238]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
vikkiv
Member

Откуда: London
Сообщений: 1477
DaniilSeryi,

да в принципе на том-же измерении дат привязка на другой гранулярности (месяц) вместо ключа измерения (дата) вполне подходит для большинства решений
30 янв 18, 18:39    [21152259]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
vikkiv
DaniilSeryi,

да в принципе на том-же измерении дат привязка на другой гранулярности (месяц) вместо ключа измерения (дата) вполне подходит для большинства решений


Спасибо. Буду завтра пробовать.
30 янв 18, 19:07    [21152325]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
И ещё один дополнительный вопрос:
Для некоторых расчётов в отчётах нужно использовать редко меняющиеся (раз в год или реже) переменные, как плановое "время работы".
Как эти данные хранить в кубе и подтягивать в отчёты?
Вариант с столбцом данных в мерах - тут избыточность данных, но минимум трудностей с использованием.
А какие ещё варианты?
31 янв 18, 10:42    [21153447]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 447
DaniilSeryi
Коллеги, возвращаемся к нашим "эскорт-сервисам".

Вопрос первый: данные до доходам теперь требуется хранить в трёх валютах. То есть число строк с доходами утраивается. А данные по числу визитов от валюты не зависит. Как правильно хранить данные?
В двух таблицах фактов, связанных друг с другом по ID "эскорт-сервиса" и дате? Или оставить как есть - в большой таблице, а в отчётах по посещаемости ставить фильтр по коду одной из валют? Второй вариант мне не нравится из-за разбухания данных, а первый ещё не пробовал никогда.


Можете реализовать подход "Велозавода" - когда в операции указывается сумма в валюте операции и ее код, и есть таблицы кросс-курсов. Есть измерение валют, и для мер с суммами используется DirectSlice.
Достаточно классическая методика, хотя возможно, что на
31 янв 18, 11:46    [21153718]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 1852
DaniilSeryi
И вопрос вот в чём - создавать дополнительное измерение ВремяВизита или дополнительные меры

зависит только от хотелок бизнеса. иногда просят одновременно то и то

[quot DaniilSeryi]И ещё один дополнительный вопрос:
Для некоторых расчётов в отчётах нужно использовать редко меняющиеся (раз в год или реже) переменные, как плановое "время работы". [quot]
отдельная группа мер и эту партицию пересчитывать редко.
но обычно такие вещи маленькие (пересчет партиции в минуту если укладывается), и даже смысла нет заморачиваться на способе
31 янв 18, 11:59    [21153758]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
StarikNavy,

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

Как это можно сделать?
6 фев 18, 12:40    [21169568]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
Нашёл и сделал.
6 фев 18, 12:50    [21169608]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
Возник другой вопрос - в настройках проекта стоит DeployChangesOnly. При этом после внесения изменений в куб (добавление новой меры) выбираю Build куб, затем Deploy куба, и оп-па - база данных будет rewritten! Соответственно, все созданные роли уничтожаются, надо давать права заново.
Вопрос - как избежать перезаписи базы данных куба на SSAS?
6 фев 18, 13:02    [21169650]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 2091
DaniilSeryi,

создать новый проект на основе существующей базы.
или править сразу базу без создания проекта.
6 фев 18, 13:46    [21169828]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1063
vikkiv
DaniilSeryi,

да в принципе на том-же измерении дат привязка на другой гранулярности (месяц) вместо ключа измерения (дата) вполне подходит для большинства решений


Как понимаю, у меня единая таблица измерения (где ключ даты, сама дата, месяц_года, квартал_года, год) для такого маневра должна быть распилена на четыре (дата-месяц-квартал-год) с соответствующими ключами, изменениями в иерархиях и кубе?
8 фев 18, 16:01    [21176981]     Ответить | Цитировать Сообщить модератору
 Re: Создать дополнительные меры или дополнительное измерение?  [new]
bideveloper
Member

Откуда:
Сообщений: 331
DaniilSeryi
Как понимаю, у меня единая таблица измерения (где ключ даты, сама дата, месяц_года, квартал_года, год) для такого маневра должна быть распилена на четыре (дата-месяц-квартал-год) с соответствующими ключами, изменениями в иерархиях и кубе?

Зачем? Просто в привязке измерения дата к группе мер выбрать атрибут месяц.
8 фев 18, 16:30    [21177199]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить