Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Так! Во-первых, без измерения "Магазин" не обойтись, т.к. надо считать их количество на лету. Во-вторых, все это реализовано и живет на AS2000. CM для подсчета магазинов (назовем ее ShopCount): Код: plaintext 1. 2. 3. 4. Далее надо получить общее число магазинов торговавших любой продукцией. Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll): Код: plaintext Теперь еще один CM в котором просто делим одно на другое и используем формат Percent: Код: plaintext 1. 2. 3. 4. Немного замечаний: 0. Все это можно сделать и в одном CM. 1. Чтоб считать дистрибуцию в регионе или типе магазина, или по классу продукта, надо выкинуть из CM ShopCountAll соответствующий All-член. 2. IIF(IsEmpty.... нужен только для того чтоб нули (0, не null) не появлялись у null ячеек. 3. При большом объеме данных считаться будет медленно особенно в Экселе. 4. Вместо CrossJoin(..., excludeempty) можно использовать NECJ (что быстрее), но только если в дальнейшем не будете делать CalculatedMembers (например рассчитать общую дистрибуцию по двум из общего количества регионов). По этой же причине я не использовал DistinctCount. Если еще чего вспомню - напишу. Или задавайте вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 10:20 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Давайте разберемся с Measures.[ProdCount]. Это физическая мера или CM? Скорее всего это СМ. Так как таблица фрктов представляет Periodic Snapshot, то Measures.[ProdCount] = LastNonEmptyChild(Measures.[ProdCount_Fact]) при аггрегации вдоль ост времени. Следующий вопрос магазин учитывается как имевший товар, если товар был в магазине на конец период или в выбранном периоде товар бывал в магазине? в формуле Count(CrossJoin(Descendants([Магазин].[All Магазин], [Магазин].[Магазин]), Measures.[ProdCount]}), excludeempty) стоит CrossJoin все таки зменить на NonEmptyCrossJoin (скорострельность) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 10:44 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 10:51 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
ShIgor Далее надо получить общее число магазинов торговавших любой продукцией. Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll): Код: plaintext Не могу согласится с г-ном ShIgor по расчету общего числа магазинов, в том случае если в измерении "Продукция" хранятся только наши продукты, без учета продукции конкурентов. Также использование приведенного CM для расчета общего к-ва магазинов при расчете дистрибуции, будет давать Вам всегда 100 % дистрибуции на уровнях All Level измерений. Скажите есть ли у Вас в хранилище информация о посещении точек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 10:56 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Mosha автор0. Все это можно сделать и в одном CM. Но для повышения производительнисти, лучше оставить в разных CM Пожалуйста, а можно про это по подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:17 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Ко всем, я просто привел, свое решение от которого можно оттолкнуться! 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. Информация о посещении есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:41 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
ShIgor 0 это не null, - Null для меня - отсутствие данных (например товар в регионе вообще не продается), а 0 означает, что магазин проверили, но товара в наличии не оказалось Это в SQL Server 100 пудовое и железобетонное различие между 0 и Null. В AS я бы на это полагатся не стал. Я хотел как и Вы различать, обжегся несколько раз. Так что лучше 0 и Null интерпретировать как одно и то же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 11:56 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Аналитик ShIgor Далее надо получить общее число магазинов торговавших любой продукцией. Для этого создадим еще один CM как тупл от всех измерений исключая измерения "время" и "магазин" (назовем ShopCountAll): Код: plaintext Не могу согласится с г-ном ShIgor по расчету общего числа магазинов, в том случае если в измерении "Продукция" хранятся только наши продукты, без учета продукции конкурентов. Также использование приведенного CM для расчета общего к-ва магазинов при расчете дистрибуции, будет давать Вам всегда 100 % дистрибуции на уровнях All Level измерений. Уточню: Результатом приведенного Вами тупла будет общее к-во торговых точек, в которых когда-либо встречался товар. А как же те магазины в которых не было товара, но они были посещены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:08 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
2 backfire Не могу, кроме дистрибуции есть еще несколько параметров, которые так же зависят от того что в ячейке 0 или null. Приведу простой пример: В моей системе есть такие измерения Дивизион Регион Город Точка. В силу обстоятельств (читай желания заказчика) они построены не как иерархическое измерение, а как независимые друг от друга. В связи с этим, при простом CrossJoine получаем в каждом Дивизионе все Регионы, а в каждом Регионе все Города, и если для такого запроса Считать CM - толку мало! 90%, а то и более будут 0, к тому же не имеющими смысла: город Москва в Санкт-Петербургском дивизионе. NON EMPTY BEHAVIOR (как нам недавно рассказал Моша) ничем не помогает, а даже ухудшает ситуацию... и еще Mosha Более того, даже написать Filter(..., NOT IsEmpty(measure)) будет намного быстрее чем Count(...,EXCLUDEEMPTY) Это для меня пройденный этап. Я создавал несколько версий такого типа CM, в том числе и с Filter. В некотоых случаях Filter работал быстрее, в некоторых медленнее, в каких точно сейчас уже не скажу (могу, конечно, провести эксперимент т.к. до сих пор в половине баз использую CJ в более ранних Filter). Но большой разницы в скорости я нигде у себя не заметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:24 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
АналитикУточню: Результатом приведенного Вами тупла будет общее к-во торговых точек, в которых когда-либо встречался товар. Не когда-либо, а только в запрошенный период. Если период не запрашивать (не выводить его ни на одну из осей и не ставить во WHERE) то да - когда-либо. АналитикА как же те магазины в которых не было товара, но они были посещены? Во-первых: представьте себе магазины без товара... значит како-то товар там все-таки будет Во-вторых: если нужно занести магазин без товара - заносятся продажи данного товара = 0 и остаток данного товара = 0. получается, что факт есть но отсутсвие в нем данного товара скажется на расчет дистрибуции по этому товару. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:32 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
в догонку... в этом случае только СМ для расчета надо все-таки менять на проверку 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:36 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо. Понял в каком направлении двигаться. [ProdCount] - это физическая мера, я уже писал. По поводу общего количества товара, то здесь несколько сложнее. Аналитик прав. Если мониторится какой-либо определенный продукт и конкуренты не заносятся, тогда эти магазины не будут учитываться. Здесь я не договорил. Еще есть мера с информацией кикие магазины кем посещались (отношение многие-ко-многим). Вдобавок эта мера SCD. Задача значительно усложняется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 12:49 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
SelfCoderЕсли мониторится какой-либо определенный продукт и конкуренты не заносятся, тогда эти магазины не будут учитываться. Поиграйте с 0 - см выше. SelfCoderЕще есть мера с информацией кикие магазины кем посещались (отношение многие-ко-многим). Вдобавок эта мера SCD. Задача значительно усложняется... т.е. сами себя перепроверяете? и извините, что такое SCD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 13:25 |
|
||
|
Помогите составить MDX
|
|||
|---|---|---|---|
|
#18+
SelfCoderВдобавок эта мера SCD. Задача значительно усложняется... Как может быть мера Slowly Changed Dimension? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 15:31 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=33480898&tid=1870662]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 387ms |

| 0 / 0 |
