|
|
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
Коллеги, есть задача добавить в хранилище данных неаддитивные факты в виде долей (%) в виде нескольких разрезов: Дата-Товар-Доля Квартал-Товар-Доля Дата-Товарная группа-Доля Квартал-Товарная группа-Доля Товары входят в товарные группы, а месяца в кварталы, но доли друг с другом никак не связаны и высчитать квартал из месяцев и товарную группу из товаров не получится. Как лучше реализовать это в хранилище? У меня 2 варианта решения-они в конце поста. 1). сделать таблицу в виде:( Дата; Квартал; Товар ID; Товар; Товарная группа; Индекс Дистрибуции SKU/Дата; Индекс Дистрибуции Товарная группа/Дата; Индекс Дистрибуции Товарная группа/Квартал; Индекс Дистрибуции SKU/Квартал) но данные в разрезе квартала и товарных групп будут дублироваться. 2). сделать таблицу в виде:( Период; Тип периода; Товар/Группа; Тип группы; Индекс дистрибуции), добавив еще 2 справочника : тип периода-месяц/квартал и тип товара -Тип группы. Строки дублироваться не будут, но сложнее будет писать представления для OLAP. Как лучше поступить? Факты для загрузки берутся из внешних систем и ничего с ними сделать нельзя: Примеры данных для загрузки: Квартал-Товарная группа-Доля Квартал Товарная группа Индекс Дистрибуции Товарная группа/Квартал 1Q2017 Фрукты 20% 2Q2017 Фрукты 30% 1Q2017 Фрукты 40% 2Q2017 Фрукты 50% 1Q2017 Овощи 60% 2Q2017 Овощи 70% 1Q2017 Овощи 80% 2Q2017 Овощи 90% --------------------------------------------------------- Дата-Товарная группа-Доля Дата Товарная группа Индекс Дистрибуции Товарная группа/Дата 01.01.2017 Фрукты 15% 01.02.2017 Фрукты 20% 01.03.2017 Фрукты 25% 01.04.2017 Фрукты 30% 01.05.2017 Фрукты 35% 01.06.2017 Фрукты 40% 01.01.2017 Фрукты 45% 01.02.2017 Фрукты 50% 01.03.2017 Фрукты 55% 01.04.2017 Фрукты 60% 01.05.2017 Фрукты 65% 01.06.2017 Фрукты 70% 01.01.2017 Овощи 3% 01.02.2017 Овощи 5% 01.03.2017 Овощи 7% 01.04.2017 Овощи 9% 01.05.2017 Овощи 11% 01.06.2017 Овощи 13% 01.01.2017 Овощи 15% 01.02.2017 Овощи 17% 01.03.2017 Овощи 19% 01.04.2017 Овощи 21% 01.05.2017 Овощи 23% 01.06.2017 Овощи 25% ------------------------------------------------------------------------------ Квартал-Товар-Доля Квартал Товар ID Товар Индекс Дистрибуции SKU/Квартал 1Q2017 1 Яблоко 25% 2Q2017 1 Яблоко 35% 2Q2017 2 Груша 35% 1Q2017 2 Груша 45% 2Q2017 2 Груша 55% 1Q2017 3 Кабачек 65% 2Q2017 3 Кабачек 75% 1Q2017 4 Морковь 85% 2Q2017 4 Морковь 95% Дата-Товар-Доля Дата Товар ID Товар Индекс Дистрибуции SKU/Дата 01.01.2017 1 Яблоко 10% 01.02.2017 1 Яблоко 11% 01.03.2017 1 Яблоко 12% 01.04.2017 1 Яблоко 13% 01.05.2017 1 Яблоко 14% 01.06.2017 2 Груша 15% 01.01.2017 2 Груша 16% 01.02.2017 2 Груша 17% 01.03.2017 2 Груша 18% 01.04.2017 2 Груша 19% 01.05.2017 2 Груша 20% 01.06.2017 2 Груша 21% 01.01.2017 3 Кабачек 22% 01.02.2017 3 Кабачек 23% 01.03.2017 3 Кабачек 24% 01.04.2017 3 Кабачек 25% 01.05.2017 3 Кабачек 26% 01.06.2017 3 Кабачек 27% 01.01.2017 4 Морковь 28% 01.02.2017 4 Морковь 29% 01.03.2017 4 Морковь 30% 01.04.2017 4 Морковь 31% 01.05.2017 4 Морковь 32% 01.06.2017 4 Морковь 33% ---------------------------------------------------------------------------- Должно получится: Вариант 1 Дата Квартал Товар ID Товар Товарная группа Индекс Дистрибуции SKU/Дата Индекс Дистрибуции Товарная группа/Дата Индекс Дистрибуции Товарная группа/Квартал Индекс Дистрибуции SKU/Квартал 01.01.2017 1Q2017 1 Яблоко Фрукты 10% 15% 20% 25% 01.02.2017 1Q2017 1 Яблоко Фрукты 11% 20% 20% 25% 01.03.2017 1Q2017 1 Яблоко Фрукты 12% 25% 20% 25% 01.04.2017 2Q2017 1 Яблоко Фрукты 13% 30% 30% 35% 01.05.2017 2Q2017 1 Яблоко Фрукты 14% 35% 30% 35% 01.06.2017 2Q2017 2 Груша Фрукты 15% 40% 30% 35% 01.01.2017 1Q2017 2 Груша Фрукты 16% 45% 40% 45% 01.02.2017 1Q2017 2 Груша Фрукты 17% 50% 40% 45% 01.03.2017 1Q2017 2 Груша Фрукты 18% 55% 40% 45% 01.04.2017 2Q2017 2 Груша Фрукты 19% 60% 50% 55% 01.05.2017 2Q2017 2 Груша Фрукты 20% 65% 50% 55% 01.06.2017 2Q2017 2 Груша Фрукты 21% 70% 50% 55% 01.01.2017 1Q2017 3 Кабачек Овощи 22% 3% 60% 65% 01.02.2017 1Q2017 3 Кабачек Овощи 23% 5% 60% 65% 01.03.2017 1Q2017 3 Кабачек Овощи 24% 7% 60% 65% 01.04.2017 2Q2017 3 Кабачек Овощи 25% 9% 70% 75% 01.05.2017 2Q2017 3 Кабачек Овощи 26% 11% 70% 75% 01.06.2017 2Q2017 3 Кабачек Овощи 27% 13% 70% 75% 01.01.2017 1Q2017 4 Морковь Овощи 28% 15% 80% 85% 01.02.2017 1Q2017 4 Морковь Овощи 29% 17% 80% 85% 01.03.2017 1Q2017 4 Морковь Овощи 30% 19% 80% 85% 01.04.2017 2Q2017 4 Морковь Овощи 31% 21% 90% 95% 01.05.2017 2Q2017 4 Морковь Овощи 32% 23% 90% 95% 01.06.2017 2Q2017 4 Морковь Овощи 33% 25% 90% 95% ------------------------------------------- Или Вариант2 Период Тип периода Товар/Группа Тип группы Индекс дистрибуции 1Q2017 Квартал Фрукты Группа 20% 2Q2017 Квартал Фрукты Группа 30% 1Q2017 Квартал Фрукты Группа 40% 2Q2017 Квартал Фрукты Группа 50% 1Q2017 Квартал Овощи Группа 60% 2Q2017 Квартал Овощи Группа 70% 1Q2017 Квартал Овощи Группа 80% 2Q2017 Квартал Овощи Группа 90% 01.01.2017 Месяц Фрукты Группа 15% 01.02.2017 Месяц Фрукты Группа 20% 01.03.2017 Месяц Фрукты Группа 25% 01.04.2017 Месяц Фрукты Группа 30% 01.05.2017 Месяц Фрукты Группа 35% 01.06.2017 Месяц Фрукты Группа 40% 01.01.2017 Месяц Фрукты Группа 45% 01.02.2017 Месяц Фрукты Группа 50% 01.03.2017 Месяц Фрукты Группа 55% 01.04.2017 Месяц Фрукты Группа 60% 01.05.2017 Месяц Фрукты Группа 65% 01.06.2017 Месяц Фрукты Группа 70% 01.01.2017 Месяц Овощи Группа 3% 01.02.2017 Месяц Овощи Группа 5% 01.03.2017 Месяц Овощи Группа 7% 01.04.2017 Месяц Овощи Группа 9% 01.05.2017 Месяц Овощи Группа 11% 01.06.2017 Месяц Овощи Группа 13% 01.01.2017 Месяц Овощи Группа 15% 01.02.2017 Месяц Овощи Группа 17% 01.03.2017 Месяц Овощи Группа 19% 01.04.2017 Месяц Овощи Группа 21% 01.05.2017 Месяц Овощи Группа 23% 01.06.2017 Месяц Овощи Группа 25% 1Q2017 Квартал Яблоко Товар 25% 2Q2017 Квартал Яблоко Товар 35% 2Q2017 Квартал Груша Товар 35% 1Q2017 Квартал Груша Товар 45% 2Q2017 Квартал Груша Товар 55% 1Q2017 Квартал Кабачек Товар 65% 2Q2017 Квартал Кабачек Товар 75% 1Q2017 Квартал Морковь Товар 85% 2Q2017 Квартал Морковь Товар 95% 01.01.2017 Месяц Яблоко Товар 10% 01.02.2017 Месяц Яблоко Товар 11% 01.03.2017 Месяц Яблоко Товар 12% 01.04.2017 Месяц Яблоко Товар 13% 01.05.2017 Месяц Яблоко Товар 14% 01.06.2017 Месяц Груша Товар 15% 01.01.2017 Месяц Груша Товар 16% 01.02.2017 Месяц Груша Товар 17% 01.03.2017 Месяц Груша Товар 18% 01.04.2017 Месяц Груша Товар 19% 01.05.2017 Месяц Груша Товар 20% 01.06.2017 Месяц Груша Товар 21% 01.01.2017 Месяц Кабачек Товар 22% 01.02.2017 Месяц Кабачек Товар 23% 01.03.2017 Месяц Кабачек Товар 24% 01.04.2017 Месяц Кабачек Товар 25% 01.05.2017 Месяц Кабачек Товар 26% 01.06.2017 Месяц Кабачек Товар 27% 01.01.2017 Месяц Морковь Товар 28% 01.02.2017 Месяц Морковь Товар 29% 01.03.2017 Месяц Морковь Товар 30% 01.04.2017 Месяц Морковь Товар 31% 01.05.2017 Месяц Морковь Товар 32% 01.06.2017 Месяц Морковь Товар 33% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:06 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
P.S. Таких фактов в хранилище будет ~30 млн. строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:11 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
подумайте над тем, чтобы сделать это в кубе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:15 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
Критик, Эти данные потом и будут использоваться в кубе SSAS и в SAP BI. А мне для начала надо придумать как грамотно их закачать в хранилище, чтобы потом добавить в куб и SAP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 14:20 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsal, А в чем смысл делать это в хранилище? Доли прекрасно и быстро считаются в MDX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 15:32 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
bideveloper, Эти неаддитивные меры-только часть хранилища. Уже добавлены меры в упаковках и деньгах - с ними проблем нет, но требуется строить отчеты и с учетом индекса дистрибуции из единого хранилища данных. Индексы дистрибуции загружаются из внешнего поставщика данных в уже рассчитанном виде, и там наверняка рассчитываются на основе нормальных аддитивных фактов, но доступа к исходным данным у меня нет-вот и приходится выкручиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 15:44 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsal, просто так будет невозможно ответить, например, на вопрос, какой процент дистрибуции фруктов за период от начала квартала до текущей даты. Если же говорить про хранилище, то я бы хранил в том виде, в котором они пришли, только наименования товаров, групп, кварталов, дат заменил на соответствующие id, которые, я так понимаю уже у вас должны быть в хранилище. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 15:55 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
bideveloper, Доли прекрасно и быстро считаются в MDX. Да, в моем кубе доли продаж, например, города в регионе считаются на MDX, но расчет идет на основе аддитивных фактов. А здесь, чтобы что-то посчитать-надо это "что-то" сперва осмысленно добавить в хранилище. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:01 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
bideveloper,просто так будет невозможно ответить, например, на вопрос, какой процент дистрибуции фруктов за период от начала квартала до текущей даты. На этот вопрос отвечать не нужно. Нужно данные смотреть только в этих разрезах: Дата-Товар-Доля Квартал-Товар-Доля Дата-Товарная группа-Доля Квартал-Товарная группа-Доля ID есть только у товара, у товарной группы ID нет- только название. Связь Товарная группа-Товар-ID товара можно посмотреть только в самой подробной выгрузке, так как там есть все эти поля. Но в эту выгрузку нельзя сразу добавить индекс по кварталу и товарной группе, чтобы выгружать всё сразу, поэтому приходится делать дополнительные, а затем join-ить к товарной группе(по названию) и кварталу процентные факты из дополнительных выгрузок по кварталам/товарным группам. Но тогда факты долей по кварталам будут затраиваться, так как гранулярность месяц (3 месяца в квартале), а факты долей по товарным группам будут дублироваться столько раз сколько товаров в соответствующей группе. так как гранулярность товар. В принципе, не вижу ничего плохого в дублировании строк для долей по кварталам и группам, кроме увеличения занимаемого места в БД-можно взять среднее значение по кварталу и/или группе и все будет верно. Основной вопрос как лучше сделать? Вариант 1-дублирующиеся строки и брать среднее по доле. Вариант 2-без дублирующихся строк, но с 2мя дополнительными справочниками : тип периода-месяц/квартал и тип товара -Тип группы. Сложнее будет представление для OLAP куба. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:26 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
Критикподумайте над тем, чтобы сделать это в кубе Или в отчёте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 16:42 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsalНо тогда факты долей по кварталам будут затраиваться, так как гранулярность месяц (3 месяца в квартале), а факты долей по товарным группам будут дублироваться столько раз сколько товаров в соответствующей группе. так как гранулярность товар. В SSAS не обязательно факт связывать с измерением по ключевому атрибуту. Данные по кварталам можно связать по атрибуту квартал из измерения дата. Данные по товарным группам - по атрибуту товарная группа из измерения товаров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:20 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
Таблица фактов Квартал-Товарная группа-Доля Связывается с измерением Дата по атрибуту Квартал и с измерением Товары по атрибуту Товарная группа Дата-Товарная группа-Доля Связывается с измерением Дата по атрибуту Дата и с измерением Товары по атрибуту Товарная группа Квартал-Товар-Доля Связывается с измерением Дата по атрибуту Квартал и с измерением Товары по атрибуту Товар (id товара) Дата-Товар-Доля Связывается с измерение Дата по атрибуту Дата и с измерением Товары по атрибуту Товар (id товара) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:26 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
bideveloperondorsalНо тогда факты долей по кварталам будут затраиваться, так как гранулярность месяц (3 месяца в квартале), а факты долей по товарным группам будут дублироваться столько раз сколько товаров в соответствующей группе. так как гранулярность товар. В SSAS не обязательно факт связывать с измерением по ключевому атрибуту. Данные по кварталам можно связать по атрибуту квартал из измерения дата. Данные по товарным группам - по атрибуту товарная группа из измерения товаров. Я так и хочу связать по ID товара и Дате. Склоняюсь к варианту: 4 выгрузки в 4 таблицы фактов+представление, объединяющее их в одну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:37 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsal+представление, объединяющее их в одну. Зачем? Если сделаете как я написал выше, то уже в одном отчете сможете вывести все показатели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:44 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
А из 4-х мер долей в разных разрезах (Товар, Дата), (Товар, Квартал), (Товарная группа, Дата), (Товарная группа, Квартал) можно для удобства сделать одну вычисляемую меру Индекс дистрибуции. Которая будет показывать нужный индекс в зависимости от атрибутов измерений, выбранных в отчете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2018, 17:48 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsal .Индексы дистрибуции загружаются из внешнего поставщика данных в уже рассчитанном виде, и там наверняка рассчитываются на основе нормальных аддитивных фактов, но доступа к исходным данным у меня нет-вот и приходится выкручиваться. так "Индексы" или "доли"? Хотя не важно, на вашем месте из неаддитивных сделал аддективные, и хранил бы именно их. как показывает практика, так будет проще в работе с ними ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 10:15 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsalКоллеги, есть задача добавить в хранилище данных неаддитивные факты в Квартал Товарная группа Индекс Дистрибуции Товарная группа/Квартал 1Q2017 Фрукты 20% 1Q2017 Овощи 80% --------------------------------------------------------- а может у вас данные все таки вполне себе аддективные? и тогда храним как есть, а не морочим голову коллегам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 10:25 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
StarikNavyтак "Индексы" или "доли"? Да, путаница вышла - это доли. Индексы дистрибуции - это термин, который дает название этим долям, измеряющийся в процентах. StarikNavyХотя не важно, на вашем месте из неаддитивных сделал аддективные, и хранил бы именно их. как показывает практика, так будет проще в работе с ними Согласен, но выгрузить аддитивные исходники и посчитать доли (Индексы дистрибуции) на их основе не представляется возможным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 10:27 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
bideveloperА из 4-х мер долей в разных разрезах (Товар, Дата), (Товар, Квартал), (Товарная группа, Дата), (Товарная группа, Квартал) можно для удобства сделать одну вычисляемую меру Индекс дистрибуции. Которая будет показывать нужный индекс в зависимости от атрибутов измерений, выбранных в отчете. bideveloperЕсли сделаете как я написал выше, то уже в одном отчете сможете вывести все показатели. Спасибо, попробую так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 10:37 |
|
||
|
Неаддитивные меры в хранилище
|
|||
|---|---|---|---|
|
#18+
ondorsal, были похожие решения, финансовые показатели расчитываемые другой системой (корреляции, ковариации длинных цепей между чёрт знает чем, и пр. статистика за периоды которую SQL/VBA/MDX функциями не посчитаешь, или ну очень медленно расчёт в живую будет). Т.е. куб использоволся только ради быстрого доступа - из UI запрос поступал в виде нужного набора системы координат в многомерном пространстве. Меры в nonagregatable (aggrregation usage = none , null processing = preserve - т.к. много мер было, некоторые поставлялись а некоторые нет, иначе null станет = 0 что не верно), ключ на измерение по дате и храним тоже как дату- первое число квартала а не сам квартал, только добавляем ещё одно поле которое у тебя как тип периода (лучше сделать tinyint индикатор - уровень) потом scope где на даты пишем уровень 0, на месяцы уровень 1, на кварталы уровень 2 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 12:37 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39605019&tid=1857972]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 284ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...