powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Дистрибуция по категориям
18 сообщений из 18, страница 1 из 1
Дистрибуция по категориям
    #33737958
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, помогите, пожалуйста, начинающему.

Имеется измерение "Категории" по типу parent-child

-> Office Automation
->Printers
->High-End
->Low-end
->Scanners
->....
-> Photo-Video
->Digital photos
->Camcoders
->.......

Мера - наличие категории в точке.

Стоит задача видеть дистрибуцию по всем уровням. Я рассчитаывал ее по формуле (К-во точек, где была данная категория)/(Все к-во точек).Все считается правильно, но в данном проекте подходит только для нижних уровней.

Потому что, в данном проекте категории не-нижнего уровня считаются немного по другому.

Например, Photo-Video считается в наличии ("1"), если в данной точке была хотя б одна категория из Photo-Video -Camcoders, Digital photos...
Данную формулу надо считать для всех не-нижних уровней.
Формулу можно сформулировать так:
Категория есть в точке (1), если есть хотя б одна из ее подкатегрий. Если подкатегорий нет, то реальное наличие данной категории.

Резюме:

Сейчас считается так:
-> Office Automation 11,5%
->Printers 14,2%
->High-End 18 %
->Low-end 25 %
->Scanners 20%
->....


Нижние категрии (High-End,Low-end,Scanners) - считаются правильно.
А верхние должны быть другими (намного большими, например, 80%), если брать в учет нашу формулу, которую надо применить.

Спасибо за возможную помощь.
Андрей
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738028
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно это посчитать через CM?
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738203
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, но для более полного ответа хотелось бы узнать:
Серверный продукт (если есть), который вы используете и его номер версии.
Клиентское приложение тоже с номером версии..
дальше вопросов будет больше или меньше, в зависимости от ответов на первые 2.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738281
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgorМожно, но для более полного ответа хотелось бы узнать:
Серверный продукт (если есть), который вы используете и его номер версии.
Клиентское приложение тоже с номером версии..
дальше вопросов будет больше или меньше, в зависимости от ответов на первые 2.


Конечно!
MS Analysis Server 8.0 sp3
Windows 2003 sp1, усе права есть.
Сейчас не использую клиентское приложение, так как хотелось бы сначала создать "правильный" куб.
Может что-то не написал.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738365
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что из себя представляют и как расчитываются
К-во точек, где была данная категория
и
Все к-во точек
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738475
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgorчто из себя представляют и как расчитываются
К-во точек, где была данная категория
и
Все к-во точек



Приведу пример, так мне легче, а может и Вам.


Например, есть такая структура категорий.


->Вся техника
-> Офисная техника
->Printers
->Scanners
->Photo Video
->Digital photo
->Analogue photo

Есть 10 точек, котрые надо посетить ( это и есть "Все к-во точек")

Результаты таковы (1- была продукция данной категории, 0 -не было)

Точка | Printers | Scanners | Digital photo | Analogue photo
№1 1 1 0 1
№2 1 1 0 0
№3 1 0 1 0
№4 0 0 0 0
№5 0 0 0 1
№6 1 1 1 1
№7 1 0 1 0
№8 0 0 0 1
№9 1 0 1 1
№10 1 1 1 0

Дистрибуция по категории считается легко: к-во "1" (присутсвий) / на к-во точек всего (10).
по кат. Printers = 7/10=70%
по кат. Scanners = 4/10=40%
по кат. Digital photo = 5/10=50%
по кат. Analogue photo= 5/10=50%

Категории Printers и Scanners входят в большую категорию "Офисная техника".
Но MS AS посчитает дистрибуцию по данной кат. (Офисная техника) так:
(7 + 4) / 20= 55%

А нам надо:
SUM(max(Printers and Scanners)) / 10 = 7/10 = 70%
- значит в 70% точек была оф. техника, и это правда.

где, max(Printers and Scanners) это "1" , если есть либо Printers , либо Scanners , либо и то и другое и 0 - если нет ничего.



Я очень надеюсь, что объяснил правильно..... Задача может простая для Вас, но для меня сложная, так как я только начинаю учится, ине знаю всех ньюансов. Спасибо за ответ.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33738551
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fact-таблица имеет поля:
IDCategory - измерение category, описанное выше.
IDTime
......
Val
Num

____
В AS MS - 2 меры: Val и Num
Val - sum значений
Num -все единицы (count)

СМ distr=Val/Num
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739067
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВАУ-У! (у Задорнова хорошо получается)
даже не знаю что Вам порекомендовать....
если данных немного - легче посчитать все в реляционной базе
если же цель все-таки OLAP то
сначала, наверное, таблицу фактов надо привести к виду
idDate, idProduct, idStore, Val
собрать в нее все существующие факты (несуществующие выкинуть)
создать таблицу SubCategory (для начала забудем про parent-child) примерно такого вида
idProduct, idCategory, idSubCategory
создать 2 измерения
Продукт (c 2 уровнями Категория, Подкатегория) и Дата
создать куб из этих измерений
создать DistinctCount меру по полю idStore - КолТочек
создать Calculated Measure: iif([Продукт].CurrentMember.Level.Ordinal = 0, 1, Measures.[КолТочек] / (Measures.[КолТочек], [Продукт].CurrentMember.Parent))

примерно так
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739077
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка "создать таблицу SubCategory" не SubCategory, а Product
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739132
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgorВАУ-У! (у Задорнова хорошо получается)
даже не знаю что Вам порекомендовать....
если данных немного - легче посчитать все в реляционной базе
если же цель все-таки OLAP то
сначала, наверное, таблицу фактов надо привести к виду
idDate, idProduct, idStore, Val
собрать в нее все существующие факты (несуществующие выкинуть)
создать таблицу SubCategory (для начала забудем про parent-child) примерно такого вида
idProduct, idCategory, idSubCategory
создать 2 измерения
Продукт (c 2 уровнями Категория, Подкатегория) и Дата
создать куб из этих измерений
создать DistinctCount меру по полю idStore - КолТочек
создать Calculated Measure: iif([Продукт].CurrentMember.Level.Ordinal = 0, 1, Measures.[КолТочек] / (Measures.[КолТочек], [Продукт].CurrentMember.Parent))

примерно так

Спасибо за ответ!
Факт в таком виде и есть: просто я опустил некоторые поля.
Если мы выкинем несуществ. факты. Будем отталкиватся от к-ва точек, я так понял?

И по формуле посл. вопрос: Measures.[КолТочек] / (Measures.[КолТочек]
Сие есть опечатка? Спасибо
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739135
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой! и еще. А если уровней станет больше, то для каждого создавать отдельную таблицу? В принципе, больше 4 - быть не должно.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739137
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lebed ShIgorВАУ-У! (у Задорнова хорошо получается)
даже не знаю что Вам порекомендовать....
если данных немного - легче посчитать все в реляционной базе
если же цель все-таки OLAP то
сначала, наверное, таблицу фактов надо привести к виду
idDate, idProduct, idStore, Val
собрать в нее все существующие факты (несуществующие выкинуть)
создать таблицу SubCategory (для начала забудем про parent-child) примерно такого вида
idProduct, idCategory, idSubCategory
создать 2 измерения
Продукт (c 2 уровнями Категория, Подкатегория) и Дата
создать куб из этих измерений
создать DistinctCount меру по полю idStore - КолТочек
создать Calculated Measure: iif([Продукт].CurrentMember.Level.Ordinal = 0, 1, Measures.[КолТочек] / (Measures.[КолТочек], [Продукт].CurrentMember.Parent))

примерно так

Спасибо за ответ!
Факт в таком виде и есть: просто я опустил некоторые поля.
Если мы выкинем несуществ. факты. Будем отталкиватся от к-ва точек, я так понял?

И по формуле посл. вопрос: Measures.[КолТочек] / (Measures.[КолТочек]
Сие есть опечатка? Спасибо


Пардон, скобку не увидел!!! Не опечатка. Это я слепой.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739161
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lebedой! и еще. А если уровней станет больше, то для каждого создавать отдельную таблицу? В принципе, больше 4 - быть не должно.
в примере аж для 3 уровней только 1 таблица
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739192
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LebedЕсли мы выкинем несуществ. факты. Будем отталкиватся от к-ва точек, я так понял?

если у вас есть такие точки, в которых вообще продукта не было на момент проверки, то тогда и решение будет другое
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739370
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял. В вашем примере - 1 таблица с соответствующим уровнем полей.

На самом деле есть точки, в которых может быть только 1 категория (т.е., одна из высших категорий - без ничего). Это не должно помешать?

Скажите, а данное решение применимо и для n-уровней?
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739442
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LebedСкажите, а данное решение применимо и для n-уровней?
я привел пример именно для 2-х уровней, больше будеет зависеть от того что вы подразумеваете под дистрибуцией (меня иногда просят считать дистрибуцию не от категории, а от 3 уровня в иерархии например, или на 3 уровне от категории) но это уже другой подход
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739504
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgor , огромное спасибо. Что-то получилось.
т.е., вроде бы и цифры правильны, но они не совпадают с теми, которые были до этого (для нижних категорий).

Вообще супер. Только, по формуле не совсем понял.

Делится к-во "1" на к-во точек в родительской категории? Если да, то что мешает нам сделать больше уровней. Пойду пробовать. еще раз спасибо.
...
Рейтинг: 0 / 0
Дистрибуция по категориям
    #33739559
Lebed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да Вы на самом деле посчитали вложенную дистрибуцию!

Т.е. это правильно. Для вложенной категории в учет берется только то к-во точек, в которых есть хотя б одно наименование данной суперкатегории.

Пример - супер и рабочий. Спасибо.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Дистрибуция по категориям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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