Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
MSAS2000 помогите написать CM.. Хочу найти по конкретной оси первого мембера с интересующим меня непустым значением measure. Что-то типа ([Дата].PrevMember.datamember, [Measures].[Price]) только вместо PrevMember - незнаемое мне :) сейчас выкручиваюсь CoalesceEmpty(Price, ([Дата].Lag(1),Price), ([Дата].Lag(2),Price), ([Дата].Lag(3),Price), ([Дата].Lag(4),Price), ([Дата].Lag(5),Price), ([Дата].Lag(6),Price), ([Дата].Lag(7),Price), ([Дата].Lag(8),Price), ([Дата].Lag(9),Price), ([Дата].Lag(10),Price)) но поиск распространяется соотвественно только на 10 дней вниз, да и хотелось попроще структуру поиска (если возможно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 12:54 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
TopCount( NonEmptyCrossJoin( Дата.Level(1).Members ,{Price}), 1 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 14:53 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Дмитрий, а почему TopCount, а не Tail (или Head, зависит откуда считать первого мембера) ? Кроме того, NonEmptyCrossJoin несколько опасная функция если в кубе есть другие вычисления. Т.к. измерение время не очень большое, то надежнее авторFilter(Time.Members, NOT IsEmpty(Price)) cherox - можно и с PrevMember, что-то типа Код: plaintext Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 06:11 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
к сожалению, у меня не функционирует ни TopCount( NonEmptyCrossJoin( Дата.Levels(3).Members ,{Price}), 1 ) в СM отказывается записываться, а если запросом MDX смотреть, то эта формула возвращает просто 1-й член измерения с заполненной Price. А это совсем не то, что требуется Может плохо сформулировал, что хотелось? Есть временнОе измерение, пусть с ним связаны факты с ценами (Price), напр. 01.01.05 - 12.00 10.01.05 - 17.00 15.01.05 - 20.00 хотелось, чтобы напротив скажем 05.01.05 было число 12.00(Т.е. первая нижестоящая по дате цена). Соответственно, 14.01.05 = 17.00, 31.01.05=20.00 т.к. разрывы между заполненными фактами по датам непредсказуемы (от отсутсвия разыва, до скажем года), то моя формула CoalesceEmpty(Price, ([Дата].Lag(1),Price), ([Дата].Lag(2),Price), ([Дата].Lag(3),Price), ([Дата].Lag(4),Price), ([Дата].Lag(5),Price), ([Дата].Lag(6),Price), ([Дата].Lag(7),Price), ([Дата].Lag(8),Price), ([Дата].Lag(9),Price), ([Дата].Lag(10),Price)) некорректна для пустот с 10 дня формулу Моши не пропускает MDX (ни в оригинальном формате, ни в "расширенном") with member [Measures].[Price3] as 'iif(IsEmpty([Price), ([Дата].PrevMember.datamember, [Measures].[Price]), Price)' Может есть еще идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 08:35 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Что за расширенный формат ? :) Формула Моши Вам поможет, только не торопитесь, скобки не теряйте и MEMBER правильно пишите CREATE MEMBER [Measures].[Price3] AS ' iif(IsEmpty([Measures].[Price]), [Дата].PrevMember, [Measures].[Price]) ' Владислав Беляев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 09:12 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
спсибо, к моему стыду, именно скобку и потерял при тестировании :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 09:28 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
cheroxХочу найти по конкретной оси первого мембера с интересующим меня непустым значением measure cheroxэта формула возвращает просто 1-й член измерения с заполненной Price как говорится, за что боролись... Это уже потом стало понятно, что "интересующий меня" = "предыдущий" А работает ли эта формула? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 10:41 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Я кстати не агитирую за рекурсивный подход, я просто предложил его как альтернативу. Если данные по времени dense, то рекурсия работать будет хорошо, а если данные по времени sparse, то стоит попробовать подход Дмитрия. Вообще тема рекурсивных против итеративных подходов это интересная тема (например посмотрите дискуссию с backfire про Парето/ABC анализ неколько дней назад). Я включил обсуждение этой темы во вторую редакцию книги "Fast track to MDX". Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 10:51 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
to Dmitry Biryukov А работает ли эта формула? работает.. только если предыдущей даты с ценой вообще не существует, то выскакивает ошибка "An unexpected internal error has occurred" (в Excel2003, SP1), в самом Analysis Manager не падает, #ERR пишет в таком случае в CM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 12:07 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
всё равно не догоняю как работает эта формула... если цена не пустая, то её же и возвращаем - тут всё ок. если же цена пустая - возвращаем предыдущую ДАТУ???? ну допустим вместо [Дата].PrevMember надо написать ([Дата].PrevMember, [Measures].[Price]). Ну тогда же вернётся цена на предыщую дату даже если она пустая! Допустим, что Price - это СМ, формула которого тут приведена. Но тогда для вычисления Price надо знать этот же самый Price - infinite recursion. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 15:45 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Дмитрий - формула приведена для другого CM - с именем LastPrice. Вот как это выглядело несколько постов наверх: Код: plaintext Т.е. нет бесконечной рекурсии. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 20:51 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
ну тогда если цена пустая - возвращаем предыдущую ДАТУ???? ну допустим вместо [Дата].PrevMember надо написать ([Дата].PrevMember, [Measures].[Price]). Ну тогда же вернётся цена на предыщую дату даже если она пустая! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 21:45 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukovну тогда если цена пустая - возвращаем предыдущую ДАТУ???? ну допустим вместо [Дата].PrevMember надо написать ([Дата].PrevMember, [Measures].[Price]). Ну тогда же вернётся цена на предыщую дату даже если она пустая! Нет, написать надо именно так как написал я - т.е. вернуть предыдушую дату. Я советую Вам попробовать эту формулу и посмотреть как она работает. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2005, 23:15 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
MoshaВообще тема рекурсивных против итеративных подходов это интересная тема (например посмотрите дискуссию с backfire про Парето/ABC анализ неколько дней назад). Я включил обсуждение этой темы во вторую редакцию книги "Fast track to MDX". А на рецензию книгу дадите? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 00:13 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
я вижу что она работает но как??? непонятен результат такого запроса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 00:16 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 00:16 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
to cherox Простите, что позно вмешиваюсь в дискуссию, но вопрос по бизнес стороне проблемы. У вас периодические цены используются только для показа или еще в последующих вычислениях тоже? Я сам сталкивался с подобной проблемой, где периодические цены (параметры) использовались для последующих вычислений и только их конечный результат использовался для показа пользователю. Не знаю с каками размерами таблиц фактов вы имеете дело, но у меня ваш подход не прошел из соображений производительности, так как вычисления надо было применять на листовых уровнях, а результат интересовал аггрегированый. Я пошел по другому пути, а именно - все расчеты на стороне DWH и помещение их в таблицу фактов (у меня порядок десятка милионов в таблице фактов), пользователю показаваются уже аггрегированые меры, посему время отклика минимально (OLAP как ни как, а не Reporting). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 00:26 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Dmitry Biryukov LastSales <> LastSales2, хотя, по-моему они одинаковые Тут я с Вами не согласен - они совсем не одинаковые, а очень даже разные. Самое главное для определения значений формул многомерном пространстве - это координаты. А эти две формулы передвигаут координаты совершенно по разному. Моя формула - сдвигает координату по времени, оставляя координату по measures - тем самым обеспечивая что формула вызовется рекурсивно. Ваша формула, сдвигает measures, тем самым ломая рекурсивность и после этого переклучается на довольно бесполезную формулу Time.PrevMember, которая двигается назад по времени, пока не выпадает за границу куба и возвращает NULL. Более подробно - во второй редакции Fast track to MDX . P.S. Тут backfire намекнул в другом thread, что мол я собираю ценную информацию в конфе, а потом печатаю книги и наживаю на этом миллионы. Но поверьте, что эту главу я написал задолго до того как эта тема здесь обсуждалась. Да и проблему как рекурсивно находить LastNonEmptyChild, я впервые решал еще в 1996 году в Панораме, до того как MDX существовал в том виде в каком мы его знаем. И что на выпуске книг можно заработать деньги - так может думать только тот кто сам книг не выпускал. Денег заработать на книге нельзя, ну не считая разве что Harry Potter или там Code DaVinci - но никак на книге про MDX :) Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 08:22 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
MoshaСамое главное для определения значений формул многомерном пространстве - это координаты Это конечно понятно и безспорно, но если не затруднит может проясните такую вещь. Тут особо указывалось, что при расчете предыдущего надо изобразить Код: plaintext 1. Более того если изобразить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Так вот вопрос КАК ЭТО ТАК ПРАВИЛЬНО ПОЛУЧАЕТСЯ? Каким таким хитрым образом разруливается что в одном случае по Time.PrevMember берётся [Measures].[Unit Sales], а в другом [Measures].[Store Cost]? Имхо default measure тут не причём. Крутил в разные стороны - ничего не меняется. Не сочтите за труд. Поясните безтолковому. Ибо от закипающего чердака экран запотевает.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 17:58 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Time.PrevMember здесь эквивалентно (Time.PrevMember, Measures.CurrentMember) а Measures.CurrentMember это по ходу тот calculated member который мы определяем формулой т е LastSales, LastCost, etc рекурсия, панимаишь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 18:15 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Mosha P.S. Тут backfire намекнул в другом thread, что мол я собираю ценную информацию в конфе, а потом печатаю книги и наживаю на этом миллионы. Но поверьте, что эту главу я написал задолго до того как эта тема здесь обсуждалась. Да и проблему как рекурсивно находить LastNonEmptyChild, я впервые решал еще в 1996 году в Панораме, до того как MDX существовал в том виде в каком мы его знаем. И что на выпуске книг можно заработать деньги - так может думать только тот кто сам книг не выпускал. Денег заработать на книге нельзя, ну не считая разве что Harry Potter или там Code DaVinci - но никак на книге про MDX :) Моша, почтеннейше прошу прощения, если мой юмор в чем то перешел границы приличия. Сожалею, что Вас это чем то задело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 18:18 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Ага... Понятно. По немногу проясняется. Пасибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 19:40 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
backfireКАК ЭТО ТАК ПРАВИЛЬНО ПОЛУЧАЕТСЯ? Не сочтите за труд. Поясните безтолковому. Ибо от закипающего чердака экран запотевает.... ну вот и backfire подключился :-) А я думал я один торможу... олапистTime.PrevMember здесь эквивалентно (Time.PrevMember, Measures.CurrentMember)совсем не очевидно смотрите: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 21:45 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Дмитрий! Я так думаю у backfire все в порядке с пониманием. Это не он тормозит, а другие представители э-э-э... ну неважно чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 22:56 |
|
||
|
написание CM (MSAS) поиск непустого значения..
|
|||
|---|---|---|---|
|
#18+
Дмитрий - олапист сказал прямо в точку: олапистTime.PrevMember здесь эквивалентно (Time.PrevMember, Measures.CurrentMember) Я бы даже уточнил - не только здесь эквивалентно, но и всегда. Ведь если в tuple не указаны все координаты, то их надо откуда-то взять чтобы определить в какой cell мы попадаем. Ну берутся естественно текучие координаты по всем измерениям. По поводу вашего примера, я уже обьяснил, что меняются разные координаты. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2005, 23:33 |
|
||
|
|

start [/forum/search_topic.php?author=Spender&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 1123ms |
| total: | 1305ms |

| 0 / 0 |
