powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Хитрая иерархия (классификатор)
31 сообщений из 31, показаны все 2 страниц
Хитрая иерархия (классификатор)
    #32856560
Guest_321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!

Есть таблица с полями ID, Klassificator_Type, Name, Parent_ID. Реально это несколько классификаторов товаров в одной таблице. У одного кода товара (ID) может быть несколько Parent_ID, например:
1, 1, Пиво Балтика, 7
1, 2, Пиво Балтика, 62
1, 3, Пиво Балтика, 184
2, 2, Пиво Fosters, 63

(7 - Пиво Российское, 62 - Пиво Дешевое, 63 - Пиво Дорогое, 184 - Пиво Светлое).
Также разумеется есть таблица фактов с полями Date, Item_ID, Qty, Price.

Поддерживает ли какой-нибудь аналитический программный продукт (OLAP, Query & Reporting) возможность работы с подобной таблицей? Особенно интересны мнения специалистов по MS AS, BusinessObjects, Cognos и Microstrategy. В данном примере нужно сделать 3 независимых иерархических измерения.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32856584
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Programmer_Ortodox,

если не можете ответить на вопрос, потрудитесь писать в другой форум.
Здесь таким сообщениям не место.


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32856620
На мой взгляд независимо от OLAP инструмента структуру справочника товаров придется привести к виду: ID, Klassificator_Type, Name, Parent_ID, Hierarchy1_ID, Hierarchy2_ID, Hierarchy3_ID.
Сделать это можно либо с помощью view, либо физически перестроив таблицу справочника товаров. Я бы рекомендовал последний способ.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32856645
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Описание задачи выглядит как классическое many-to-many relationship между аттрибутами, и главная тонкость здесь не столько в том чтобы промоделировать это в OLAP кубе без дупликации членов измерений, а в том чтобы это аггрегировалось как DISTINCT SUM. Делать many-to-many и DISTINCT SUM может Analysis Services 2005. Подробнее об этом например здесь:
http://sqljunkies.com/WebLog/sqlbi/archive/2004/10/04/4447.aspx

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32856712
Guest_321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Андрей Прохоров:

Сделать это можно либо с помощью view, либо физически перестроив таблицу справочника товаров.

Этот справочник с иерархией является таблицей в учетной системе, и разработчики системы не позволяют менять ее структуру. Вьюшку тоже не сделать - используется экзотическая СУБД Progess. Есть только доступ через ODBC.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32856937
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используется экзотическая СУБД Progess. Есть только доступ через ODBC

Наверное, на Gestori работаете или на чём-то подобном?

Тогда, в любом случае, всё равно придётся данные выгружать в выделенное хранилище на нормальной СУБД. В таком случае, можно спроектировать под любое средство OLAP.


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32857266
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в чём проблема?
в MS AS 2k можно создать три parent-child измерения, у каждого свой Source Table Filter.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860119
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Константин ЛисянскийВ таком случае, можно спроектировать под любое средство OLAP.

Dmitry Biryukovв MS AS 2k можно создать три parent-child измерения, у каждого свой Source Table Filter.

Мне кажется что Вы все таки упускаете из виду вопрос правильного аггрегирования. В предложенном Вами решениях Балтика будет фигурировать в 3-х разных измерениях и соответсвенно не будет аггрегироваться как DISTINCT SUM.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860132
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МошаМне кажется что Вы все таки упускаете из виду вопрос правильного аггрегирования. В предложенном Вами решениях Балтика будет фигурировать в 3-х разных измерениях и соответсвенно не будет аггрегироваться как DISTINCT SUM.

Не совсем так. Я имел в виду одно измерение товар, в котором три точки входа (три верхних уровня) и один общий уровень - товар.
Для Microstrategy это будет одно измерение, поскольку в таблице фактов внешний ключ будет только один (ID товара). В таблице товаров будет три внешних ключа, ссылающихся на три разных таблицы (или иерархии таблиц).
Ну, а агрегация в этом случае будет просто SUM. Если вам надо посчитать, сколько продали дешёвого российского пива, делаете фильтр на два атрибута-родителя товара (ценовой диапазон и страна производителя), третье не трогаете. SQL получится тривиальный.
По крайней мере так я имел в виду. Очевидно, ошибся по поводу "любого" OLAP-средства. Однако в Cognos и в BO будет то же самое.

При чём тут DISTINCT SUM я не понял. Может, объясните вкратце?
Да, и неужели AS не умеет работать с разветвляющимися измерениями?


С уважением,
Константин Лисянский
http://lissianski.narod.ru
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860146
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Константин ЛисянскийВ таблице товаров будет три внешних ключа, ссылающихся на три разных таблицы (или иерархии таблиц).
Если бы было 3 разных аттрибута, то конечно проблем нет. Но Guest_321 в своем примере указал, что аттрибут только один. Я правда упустил что в таблице есть еще поле Klassificator_Type, которое в известной мере упрощает задачу. Когда я говорил что есть проблема DISTINCT SUM и double counting, то я имел в виду что если просто наивно создать иерархию с членами "Дешевое", "Российское", "Светлое" - то тогда будет double-counting на уровне All, т.к. пиво может быть и дешевым и светлым и российским. Интересно как Microstrategy решает такую задачу. Впрочем я за Microstrategy не волнуюсь - это ROLAP tool, и у нее не должно быть проблем генерить правильный SQL, даже если выбран multi-select "Дешевое" или "Светлое". А вот как с этим справляется Cognos - действительно интересно.
Константин ЛисянскийДа, и неужели AS не умеет работать с разветвляющимися измерениями?
Откровенно говоря, AS2K действительно не очень хорошо справляется с такими моделями. Можно конечно сделать, но надо будет сильно постараться. А вот AS2005 - без проблем.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860189
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_3212 Андрей Прохоров:

Сделать это можно либо с помощью view, либо физически перестроив таблицу справочника товаров.

Этот справочник с иерархией является таблицей в учетной системе, и разработчики системы не позволяют менять ее структуру. Вьюшку тоже не сделать - используется экзотическая СУБД Progess. Есть только доступ через ODBC.

Если строить кубы прямо на оперативной системе, то да, а если иметь все это в хранилище, то там можно сделать все как надо вам, а не разработчикам OLTP.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860192
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha
Откровенно говоря, AS2K действительно не очень хорошо справляется с такими моделями. Можно конечно сделать, но надо будет сильно постараться. А вот AS2005 - без проблем.

Имел я с AS2K как раз почти такую задачу. Деиствительно пришлось попотеть. Достаточно нетривиальный дизайн измерения, посему с тривиальным клиентом в том кубе делать нечего.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860194
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoshaОписание задачи выглядит как классическое many-to-many relationship между аттрибутами, и главная тонкость здесь не столько в том чтобы промоделировать это в OLAP кубе без дупликации членов измерений, а в том чтобы это аггрегировалось как DISTINCT SUM. Делать many-to-many и DISTINCT SUM может Analysis Services 2005. Подробнее об этом например здесь:
http://sqljunkies.com/WebLog/sqlbi/archive/2004/10/04/4447.aspx

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

Тоже самое могу вам продемострировать и в AS2K.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860379
Константин Лисянский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МошаА вот как с этим справляется Cognos - действительно интересно

В Cognos тоже, на самом деле, не так уж всё гладко. Там создать разветвляющееся измерение можно легко (правда, ограничение таково, что общий уровень может быть только один). Однако есть проблемы с наложением фильтров сразу на несколько веток в клиенте PowerPlay (то есть, дешёвое и светлое в нашем примере). Юрий меня поправит, если это не так.

С уважением,
Константин Лисянский
http://lissianski.narod.ru

P.S. Так уж получилось, что орфография заимствованных слов агрегация и атрибут такова, что в них по одной букве г и т. Впрочем, даже многие люди, постоянно говорящие на русском языке тоже делают такую ошибку.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860469
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfireТоже самое могу вам продемострировать и в AS2K.
Тем самым осчастливите не одного участника форума.
Можно на примере двух измерений времени:
Год-неделя-день и год-месяц-день
отношение неделя:месяц - many-to-many
Либо регион-город-магазин и регион-територия-магазин. отношение город:територия - many-to-many, остальные one-to-many.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860675
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно на примере двух измерений времени:
Год-неделя-день и год-месяц-день
отношение неделя:месяц - many-to-many.


Тут не только неделя к месяцу many-to-many, но и год из одной иерархии не совпадает с годом из другой иерархии.


Либо регион-город-магазин и регион-територия-магазин. отношение город:територия - many-to-many, остальные one-to-many.

А как звучит постановка вопроса? Что на выходе вам желательно?
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32860776
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfire Можно на примере двух измерений времени:
Год-неделя-день и год-месяц-день
отношение неделя:месяц - many-to-many.


Тут не только неделя к месяцу many-to-many, но и год из одной иерархии не совпадает с годом из другой иерархии.

Почему?
Давайте для простоты считать что год начинается и заканчивается неполной неделей. т.е. года совпадают.

backfire
Либо регион-город-магазин и регион-територия-магазин. отношение город:територия - many-to-many, остальные one-to-many.

А как звучит постановка вопроса? Что на выходе вам желательно?

Например, продажи по териториальным единицам. Естественно без дублирования продаж магазинов.

Moshaесли просто наивно создать иерархию с членами "Дешевое", "Российское", "Светлое" - то тогда будет double-counting на уровне All, т.к. пиво может быть и дешевым и светлым и российским
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32862201
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, продажи по териториальным единицам. Естественно без дублирования продаж магазинов.

А у вас, что один магазин в нескольких территориях находится?
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32862651
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня как и у Guest_321 магазины классифицируются по нескольким классификаторам: города и територии. Естественно, что каждый магазин строго в одном городе и строго в одной территории. Но територии к городам - многие ко многим. Есть територии, которые объединяют мелкие города, и есть територии, которые делят крупные города.
А теперь берём запрос: територии, города, магазины on rows, Measures.Продажи on columns. В результате не смотря на то, что в каждой строке сумма продаж правильная, Grand Total больше, чем есть на самом деле, т.к. один и тот же магазин появляется в нескольких строках.
Судя по ссылке с этим справляется 2005, а решение для 2000?

backfire MoshaОписание задачи выглядит как классическое many-to-many relationship между аттрибутами, и главная тонкость здесь не столько в том чтобы промоделировать это в OLAP кубе без дупликации членов измерений, а в том чтобы это аггрегировалось как DISTINCT SUM. Делать many-to-many и DISTINCT SUM может Analysis Services 2005. Подробнее об этом например здесь:
http://sqljunkies.com/WebLog/sqlbi/archive/2004/10/04/4447.aspx

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

Тоже самое могу вам продемострировать и в AS2K.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32862746
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще то я пытался разделить две разные проблемы, но они почему то все время путаются :) Когда внутри измерения у атрибутов отношение many to many, как например недели к месяцам, то это более простая задача. Все равно они 1-to-many к ключу измерения (дни), который фигурирует в fact table. А вот когда атрибут одного измерения имеет many-to-many relationship к атрибуту другого измерения, и не связан напрямую с fact table, вот тогда дело сложнее. Например в fact table есть ключ по продукту (пиво) и measure "Продажи", но характеристики продукта (светлое, дешевое и т.д.) в fact table не хранятся, потому что им там не место - им место в другой таблице, где продаж нету, а есть только характеристики продукта.
С первой проблемой Константин Лисянский описал как справляются OLAP продукты - строят "разветвляюшуюся иерархию". А вот про вторую проблему, которая решается в AS2005 при помощи many-to-many dimensions, никто почему то не говорит, хотя она на мой взгляд гораздо более интересная.
backfire - когда Вы говорили что решали это на AS2K, Вы имели в виду первую или вторую проблему ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32862919
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня, например, - вторая.

Измерения: города и територии. Отношение между ними многие ко многим. В таблице фактов - только ключ измерения магазины. А в таблице магазинов уже хранятся его атрибуты: город и територия.

В любом случае хотелось бы видеть решения г-на backfire по любой из двух проблем.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863003
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry BiryukovУ меня, например, - вторая.

Измерения: города и територии. Отношение между ними многие ко многим. В таблице фактов - только ключ измерения магазины. А в таблице магазинов уже хранятся его атрибуты: город и територия.

В любом случае хотелось бы видеть решения г-на backfire по любой из двух проблем.


Тогда я что то не пойму в вашем дизайне.
Вы же писали, что у вас 2 измерения (одно измерение с 2 мя иерархиями)

1. Регион-Город-Магазин
2. Регион-Територия-Магазин

Обе иерархии (измерения) имеют одинаковый листовой уровень. Правильно?

в любом случае у вас таблица фактов связана с таблицей магазинов по одному полю в одношении один-к-многим. Так что это подпадает под случай 1. (по Моше)

Во вторых. Что такое Grand Totals? В MDX нет такой функции. (Приведите лучше MDX запрос, который возвращает вам неправильные суммы)
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863015
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moshabackfire - когда Вы говорили что решали это на AS2K, Вы имели в виду первую или вторую проблему ?

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights

Я имел ввиду вторую проблему. В двух словах ее не изложить. Напишу более подробно на выходных. Сейчас времени нет даже 15 минут.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863085
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 плоских измерения: регион,город,територия,магазин
Grand Total - это то, что выводит Excel в последней строке(колонке)

MDX
SELECT HIERARCHIZE({[Measures].[Sales]}) DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON COLUMNS , CROSSJOIN(HIERARCHIZE({DrillDownLevel({[Area].[All Area]})}), HIERARCHIZE({DrillDownLevel({[City].[All City]})})) DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Sales] WHERE ([Region].[Region].&[1])
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863145
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запустив этот mdx в MDX Sample Application увидел, что Grand Total - это первая строчка, т.е. ([All Area], [All City], [Sales], [Region].&[1])
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863573
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukov4 плоских измерения: регион,город,територия,магазин
Grand Total - это то, что выводит Excel в последней строке(колонке)

MDX
SELECT HIERARCHIZE({[Measures].[Sales]}) DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON COLUMNS , CROSSJOIN(HIERARCHIZE({DrillDownLevel({[Area].[All Area]})}), HIERARCHIZE({DrillDownLevel({[City].[All City]})})) DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM [Sales] WHERE ([Region].[Region].&[1])


Правильно ли я понимаю, что регион,город,територия это виртуальные измерения и в схеме куба они связаны только с таблицей магазин?

Если это так, то ваш запрос ни при каком раскладе не вернет "двойной" счет. Если Excel сам там ничего не напортачит.
У меня таких use case навалом и даже в Excel все правильно. Только что проверил
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863587
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
backfireПравильно ли я понимаю, что регион,город,територия это виртуальные измерения и в схеме куба они связаны только с таблицей магазин?

Если это так, то ваш запрос ни при каком раскладе не вернет "двойной" счет. Если Excel сам там ничего не напортачит.
У меня таких use case навалом и даже в Excel все правильно. Только что проверил

Ваша феноменальная способность видеть дизайн куба на расстоянии меня поражает! Всё верно. И у меня двойного счёта нет. Раньше был, сейчас избавился путём создания многоуровневого измерения (листья - магазины) и виртуальных измерений на каждый уровень.

Меня сейчас интересуют возможные решения в других более сложных ситуациях. Проблемы описаны Мошей, а вашего решения придётся ждать аж до понедельника.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863668
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry BiryukovИ у меня двойного счёта нет. Раньше был,

А кто ж тогда сегодня писал о двойном счете не далее чем сегодня несколько часов назад?

Dmitry BiryukovВ результате не смотря на то, что в каждой строке сумма продаж правильная, Grand Total больше, чем есть на самом деле, т.к. один и тот же магазин появляется в нескольких строках.

Тень отца Гамлета?
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32863800
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я рассказывал о том, что было и о том что может быть
так где же всё-таки обещанный рассказ?
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #32867233
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Biryukovя рассказывал о том, что было и о том что может быть
так где же всё-таки обещанный рассказ?


Вариантов решения может быть 2.

1. Вводим "избыточное измерение". На нашем примере "признаки пива". У него должен быть мембер "все пиво", на том же уровне, что и другие признаки (или Data_Member в Parent/Child измерении). Этот мембер является default member измерения.
При таком подходе
+ аггрегаты рассчитаны.
- количество строк в кубе больше чем количество строк в таблице фактов
- multiple select на данном измерении не работает.

2. Подход.
Построить куб с таблицей фактов "признаки пива". Затем свести его в виртуальный с основным. В этом случае запрося с "признакам пива" на Axes получать одним из нескольких способов:
- с помощью MDX (стандартные клиенты a la Excel тогда отпадают)
- Cell Calculation (работает только в AS EE, который есть далеко не у всех :-(
- .... ну кто еще что придумает.
...
Рейтинг: 0 / 0
Хитрая иерархия (классификатор)
    #33049064
Jurii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Mosha:

В данном примере нужно сделать 3 независимых иерархических измерения.
А вот как с этим справляется Cognos - действительно интересно.

В Cognos эта задача решается следующим образом:
1) Создается 3 алиаса к справочнику товаров
2) Между таблицей фактов и каждым из алиасов к таблице справочника товаров делается связь, например: T1.Item_ID = T2.ID and Klassificator_Type = 1. То есть связь - не поле к полю, а более сложная.
3) Поля этих алиасов используются для создания трех независимых измерений в OLAP-кубе.
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Хитрая иерархия (классификатор)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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