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

Таблица фактов, ключи:
TimeID

StoreID

ProductID

Меры:

[ProdCount] - Кол-во товара

другие

Измерения:

регион магазина

тип магазина

время

продукция

класс продукции

Получилась снежинка. MsSql2k. Требуется написать MDX, чтоб на выходе получилось примерно следующее: время - on columns, продукция - on rows, мера - дистрибуция - в скольких процентах магазинов есть соответствующий товар (по всей иерархии продукции и других измерений, связанных с продукцией (снежинка))
Код: plaintext
1.
2.
3.
4.
5.
           2004  2005
Брэнд1      38%   41%
    Товар1  15%   32%
    Товар2  19%   28%
    Товар3  31%   35%
И таким же образом не по названию товара, а к примеру по классу продукции.
Помогите зеленому чем сможете.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33474781
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли у Вас мера где хранится общее к-во посещаемых магазинов?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475031
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АналитикЕсть ли у Вас мера где хранится общее к-во посещаемых магазинов?
Нет. Причем есть мера актуальности информации (кол-во прошедших дней) по которой нужно фильтровать, например рассматривать данные которые устарели не более чем на 14 дней.

И еще вопрос по измерению [время]. Периодичность данных - неделя. Хотелось бы иметь иерархию (Год, Квартал, Месяц, Неделя) или хотябы (Год, Месяц, Неделя), но мастер создания измерения msas2k не дает подобного. Есть ли какие соображения?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475072
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала давайте определимся по какой формуле Вы будете считать дистрибуцию. Напишите ее пожалуйста.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475130
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Вас тип фактов periodic snapshot?
Какова гранулярность остатков по времени?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475340
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Информация собирается в течении недели в оперативную, в конце недели сбрасывается в хранилище.
Если по каким-то магазинам информация не собрана, то все равно сливается в хранилище и указывается актуальность. Это делается на случай сбоя в сборе информации, чтоб из за этого сильно не поменялась картина результатов отчетов.

Дистрибуция считается так:
Код: plaintext
кол-во магазинов, где есть продукт / кол-во магазинов всего
в процентах естественно. Магазины рассматриваются отфильтрованные.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475706
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала создайте меру: общее к-во посещаемых магазинов.

Информация детализируется до уровня дня и до уровня торговые точки?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475803
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АналитикДля начала создайте меру: общее к-во посещаемых магазинов.

Информация детализируется до уровня дня и до уровня торговые точки?

А что такое посещенный магазин?
Может вы имели ввиду магазин, в котором товар в наличии ?

По-моему именно такие магазины хочет считать автор.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33475844
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю задача состоит в расчете дистрибуции, это означает что необходимо учитывать все магазины: те в которых был товар и те в которых должен быть товар, но его там нет.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33476364
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АналитикНасколько я понимаю задача состоит в расчете дистрибуции, это означает что необходимо учитывать все магазины: те в которых был товар и те в которых должен быть товар, но его там нет.

А по-моему задачка поставлена предельно чётко. И задачка - непростая. Здесь пахнет многопроходовым скриптом или вложенными подзапросами. И, боюсь, что задачка не для MS AS.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33476515
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю её решить вполне возможно. Главное нужно уяснить некоторые уточняющие моменты.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33476519
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор Сакович АналитикНасколько я понимаю задача состоит в расчете дистрибуции, это означает что необходимо учитывать все магазины: те в которых был товар и те в которых должен быть товар, но его там нет.

А по-моему задачка поставлена предельно чётко. И задачка - непростая. Здесь пахнет многопроходовым скриптом или вложенными подзапросами. И, боюсь, что задачка не для MS AS.

Непростая она для AS (в том смыле, что тормозить будет), потому что много Cell Level калькуляций (а что же вы хотели)
В написании же MDX вычислений ничего особенного нет.

Все упирается в написание СM, для подсчета количества магазинов, в которых
есть товар (или товары группы).
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33476644
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолютно согласен с г-ном Backfire.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33477450
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что же делать?
Упрощенно, насколько я себе представляю, нужно посчитать кол-во магазинов в которых есть товар и разделить на количество всех магазинов.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33477460
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Информация детализируется до уровня дня и до уровня торговая точка?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33477520
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АналитикИнформация детализируется до уровня дня и до уровня торговая точка?
до уровня неделя (до дней нет необходимости).
StoreID в таблице фактов указывает на конкретную торговую точку.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478080
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первое создайте меру: общее к-во магазинов.

[ProdCount] - это мера в которой вы используете SUM или COUNT?

Что у вас хранится в таблице фактов наличие товара в магазине либо же к-во товара в магазине?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478219
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АналитикПервое создайте меру: общее к-во магазинов.

[ProdCount] - это мера в которой вы используете SUM или COUNT?

Что у вас хранится в таблице фактов наличие товара в магазине либо же к-во товара в магазине?
В таблице фактов хранится количество товара в магазине ([ProdCount])
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478265
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[ProdCount] - это мера в которой вы используете SUM или COUNT?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478759
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналитик[ProdCount] - это мера в которой вы используете SUM или COUNT?Это мера не вычисляемая, она заполняется вручную со всей остальной информацией
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478776
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Тогда Вам нужно создать меру, в которой необходимо считать торговые точки в которых есть товар.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478820
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приведите пожалуйста пример, как считать эту меру и что с ней дальше делать.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33478838
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в таблице фактов у Вас есть поле - к-во товара в магазине с разбивкой по неделям. То в кубе Вам неообходимо создать меру в которой осуществлять
Count от к-ва товара в магазине.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480274
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чувствую себя ...ком, который не может в экселе сложить 2 ячейки, но всеже можно MDX?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480580
Виктор Сакович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelfCoderЧувствую себя ...ком, который не может в экселе сложить 2 ячейки, но всеже можно MDX?

Не дождётесь. CM получится сложный, возни с ним много, даже для гуру по MDX, а они люди занятые. Хотите SQL?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480587
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так!
Во-первых, без измерения "Магазин" не обойтись, т.к. надо считать их количество на лету.
Во-вторых, все это реализовано и живет на AS2000.

CM для подсчета магазинов (назовем ее ShopCount):
Код: plaintext
1.
2.
3.
4.
IIF(
  IsEmpty(Measures.[ProdCount]), 
  null, 
  Count(CrossJoin(Descendants([Магазин].[All Магазин], [Магазин].[Магазин]), Measures.[ProdCount]}), excludeempty)
)

Далее надо получить общее число магазинов торговавших любой продукцией.
Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll):
Код: plaintext
(Measures.[ShopCount], [All Регион магазина], [All Тип магазина], [All Продукция], [All Класс продукции])

Теперь еще один CM в котором просто делим одно на другое и используем формат Percent:
Код: plaintext
1.
2.
3.
4.
IIF(
  IsEmpty(Measures.[ProdCount]), 
  null, 
  Measures.[ShopCount] / Measures.[ShopCountAll]
)

Немного замечаний:
0. Все это можно сделать и в одном CM.
1. Чтоб считать дистрибуцию в регионе или типе магазина, или по классу продукта, надо выкинуть из CM ShopCountAll соответствующий All-член.
2. IIF(IsEmpty.... нужен только для того чтоб нули (0, не null) не появлялись у null ячеек.
3. При большом объеме данных считаться будет медленно особенно в Экселе.
4. Вместо CrossJoin(..., excludeempty) можно использовать NECJ (что быстрее), но только если в дальнейшем не будете делать CalculatedMembers (например рассчитать общую дистрибуцию по двум из общего количества регионов). По этой же причине я не использовал DistinctCount.

Если еще чего вспомню - напишу. Или задавайте вопросы.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480662
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте разберемся с Measures.[ProdCount]. Это физическая мера или CM?

Скорее всего это СМ. Так как таблица фрктов представляет Periodic Snapshot, то Measures.[ProdCount] = LastNonEmptyChild(Measures.[ProdCount_Fact]) при аггрегации вдоль ост времени.

Следующий вопрос магазин учитывается как имевший товар, если товар был в магазине на конец период или в выбранном периоде товар бывал в магазине?

в формуле

Count(CrossJoin(Descendants([Магазин].[All Магазин], [Магазин].[Магазин]), Measures.[ProdCount]}), excludeempty)

стоит CrossJoin все таки зменить на NonEmptyCrossJoin (скорострельность)
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480693
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShIgorНемного замечаний:
Позволю себе откомментировать эти замечания, хотя я и не следил за всей дискуссией.

автор0. Все это можно сделать и в одном CM.
Но для повышения производительнисти, лучше оставить в разных CM

ShIgor2. IIF(IsEmpty.... нужен только для того чтоб нули (0, не null) не появлялись у null ячеек.
Это не совсем правильно. Правильная проверка именно на 0 = Measures.ShopCount. Вот здесь я об этом писал подробнее - http://www.sqljunkies.com/WebLog/mosha/archive/2005/06/30/mdx_is_empty.aspx

ShIgor3. При большом объеме данных считаться будет медленно особенно в Экселе.
А что такого особенного в Экселе что там будет считаться особенно медленно ?

ShIgor4. Вместо CrossJoin(..., excludeempty) можно использовать NECJ (что быстрее), но только если в дальнейшем не будете делать CalculatedMembers (например рассчитать общую дистрибуцию по двум из общего количества регионов). По этой же причине я не использовал DistinctCount.
Полностью согласен. В AS2005 наиболее оптимально это можно написать используя функцию NonEmpty которая работает так же быстро как и NECJ если нет CMs, а если они есть, то дает правильный результат. Более того, даже написать Filter(..., NOT IsEmpty(measure)) будет намного быстрее чем Count(...,EXCLUDEEMPTY)

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480721
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor
Далее надо получить общее число магазинов торговавших любой продукцией.
Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll):
Код: plaintext
(Measures.[ShopCount], [All Регион магазина], [All Тип магазина], [All Продукция], [All Класс продукции])


Не могу согласится с г-ном ShIgor по расчету общего числа магазинов, в том случае если в измерении "Продукция" хранятся только наши продукты, без учета продукции конкурентов.

Также использование приведенного CM для расчета общего к-ва магазинов при расчете дистрибуции, будет давать Вам всегда 100 % дистрибуции на уровнях All Level измерений.

Скажите есть ли у Вас в хранилище информация о посещении точек?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480790
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha автор0. Все это можно сделать и в одном CM.
Но для повышения производительнисти, лучше оставить в разных CM


Пожалуйста, а можно про это по подробнее.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480898
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ко всем, я просто привел, свое решение от которого можно оттолкнуться!
2 backfire
Measures.[ProdCount] как написало:
SelfCoderВ таблице фактов хранится количество товара в магазине ([ProdCount]) здесь надо просто перенести ее в AS в качестве меры с любой (SUM, COUNT) функцией.
Следующий вопрос магазин учитывается как имевший товар, если товар был в магазине на конец период или в выбранном периоде товар бывал в магазине? если мы хотим считать distribution значит надо чтоб товар был в остатке на момент проверки. иначе это handling.
авторСледующий вопрос магазин учитывается как имевший товар, если товар был в магазине на конец период или в выбранном периоде товар бывал в магазине?читай примечание 4 моего поста - скорострельность - да, но уменьшаем функционал.
2 Mosha
Да, я читал Вашу статью, но 0 меня в этом случае не устраивает, т.к. 0 это не null, - Null для меня - отсутствие данных (например товар в регионе вообще не продается), а 0 означает, что магазин проверили, но товара в наличии не оказалось.
Про Эксель: Все мои (и моих коллег) эксперименты с ним приводили к тому, что запрос в экселе примерно на порядок дольше (не в секундах, в минутах и часах :)) ) чем например через MDX Sample Application.
2 Аналитик
1. Продукция конкурентов никак не влияет на дистрибуцию нашего продукта. Я с трудом представляю узконаправленные магазины, ориентированные только на одного производителя.
2. замечание верно, т.к. любые товары есть в любом магазине в любое время
3. Информация о посещении есть.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33480959
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor 0 это не null, - Null для меня - отсутствие данных (например товар в регионе вообще не продается), а 0 означает, что магазин проверили, но товара в наличии не оказалось

Это в SQL Server 100 пудовое и железобетонное различие между 0 и Null.
В AS я бы на это полагатся не стал. Я хотел как и Вы различать, обжегся несколько раз. Так что лучше 0 и Null интерпретировать как одно и то же.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481019
Аналитик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аналитик ShIgor
Далее надо получить общее число магазинов торговавших любой продукцией.
Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll):
Код: plaintext
(Measures.[ShopCount], [All Регион магазина], [All Тип магазина], [All Продукция], [All Класс продукции])


Не могу согласится с г-ном ShIgor по расчету общего числа магазинов, в том случае если в измерении "Продукция" хранятся только наши продукты, без учета продукции конкурентов.

Также использование приведенного CM для расчета общего к-ва магазинов при расчете дистрибуции, будет давать Вам всегда 100 % дистрибуции на уровнях All Level измерений.


Уточню: Результатом приведенного Вами тупла будет общее к-во торговых точек, в которых когда-либо встречался товар.

А как же те магазины в которых не было товара, но они были посещены?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481092
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 backfire
Не могу, кроме дистрибуции есть еще несколько параметров, которые так же зависят от того что в ячейке 0 или null.
Приведу простой пример: В моей системе есть такие измерения Дивизион Регион Город Точка. В силу обстоятельств (читай желания заказчика) они построены не как иерархическое измерение, а как независимые друг от друга. В связи с этим, при простом CrossJoine получаем в каждом Дивизионе все Регионы, а в каждом Регионе все Города, и если для такого запроса Считать CM - толку мало! 90%, а то и более будут 0, к тому же не имеющими смысла: город Москва в Санкт-Петербургском дивизионе. NON EMPTY BEHAVIOR (как нам недавно рассказал Моша) ничем не помогает, а даже ухудшает ситуацию...

и еще Mosha Более того, даже написать Filter(..., NOT IsEmpty(measure)) будет намного быстрее чем Count(...,EXCLUDEEMPTY)
Это для меня пройденный этап. Я создавал несколько версий такого типа CM, в том числе и с Filter. В некотоых случаях Filter работал быстрее, в некоторых медленнее, в каких точно сейчас уже не скажу (могу, конечно, провести эксперимент т.к. до сих пор в половине баз использую CJ в более ранних Filter). Но большой разницы в скорости я нигде у себя не заметил.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481126
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АналитикУточню: Результатом приведенного Вами тупла будет общее к-во торговых точек, в которых когда-либо встречался товар.
Не когда-либо, а только в запрошенный период. Если период не запрашивать (не выводить его ни на одну из осей и не ставить во WHERE) то да - когда-либо.
АналитикА как же те магазины в которых не было товара, но они были посещены?
Во-первых: представьте себе магазины без товара... значит како-то товар там все-таки будет
Во-вторых: если нужно занести магазин без товара - заносятся продажи данного товара = 0 и остаток данного товара = 0. получается, что факт есть но отсутсвие в нем данного товара скажется на расчет дистрибуции по этому товару.
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481145
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в догонку... в этом случае только СМ для расчета надо все-таки менять на проверку 0
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481220
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо. Понял в каком направлении двигаться.
[ProdCount] - это физическая мера, я уже писал.
По поводу общего количества товара, то здесь несколько сложнее. Аналитик прав. Если мониторится какой-либо определенный продукт и конкуренты не заносятся, тогда эти магазины не будут учитываться.
Здесь я не договорил. Еще есть мера с информацией кикие магазины кем посещались (отношение многие-ко-многим). Вдобавок эта мера SCD. Задача значительно усложняется...
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481380
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelfCoderЕсли мониторится какой-либо определенный продукт и конкуренты не заносятся, тогда эти магазины не будут учитываться.
Поиграйте с 0 - см выше.
SelfCoderЕще есть мера с информацией кикие магазины кем посещались (отношение многие-ко-многим). Вдобавок эта мера SCD. Задача значительно усложняется...
т.е. сами себя перепроверяете? и извините, что такое SCD?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33481773
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SelfCoderВдобавок эта мера SCD. Задача значительно усложняется...

Как может быть мера Slowly Changed Dimension?
...
Рейтинг: 0 / 0
Помогите составить MDX
    #33482454
SelfCoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения, опечатался, не мера - измерение.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Помогите составить MDX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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