|
|
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Пусть есть мера M для нее нужно создать меру - сумма за последние 30 дней по всем клиентам, так чтобы она не сплитилась по клиентам потом, а всегда имела такое значение - сумма за последние 30 дней по всем клиента. Если делать так MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days], [Measures].[M]) + AGGREGATE([Last 30 Days], [Measures].[M]) то она сплитится в зависимости от контекста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 17:29 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Lord BritishПусть есть мера M для нее нужно создать меру - сумма за последние 30 дней по всем клиентам, так чтобы она не сплитилась по клиентам потом, а всегда имела такое значение - сумма за последние 30 дней по всем клиента. Если делать так MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days], [Measures].[M]) + AGGREGATE([Last 30 Days], [Measures].[M]) то она сплитится в зависимости от контекста MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days], ROOT([Измерение_клиентов]), [Measures].[M]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 17:38 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPLord BritishПусть есть мера M для нее нужно создать меру - сумма за последние 30 дней по всем клиентам, так чтобы она не сплитилась по клиентам потом, а всегда имела такое значение - сумма за последние 30 дней по всем клиента. Если делать так MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days], [Measures].[M]) + AGGREGATE([Last 30 Days], [Measures].[M]) то она сплитится в зависимости от контекста MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days], ROOT([Измерение_клиентов]), [Measures].[M]) огромное вам спасибо! то что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2018, 21:00 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Извините пожалуйста за нубские вопросы. В продолжение этой темы. Сейчас вот так (просто сумма за 30 дней) MEMBER [Measures].[M (last 30 days) TEST] AS AGGREGATE([Last 30 Days] * ROOT([Dim Client]) * ROOT([Dim Profile]) , [Measures].[M]) Measure M: Dim Profile Dim Client А как сделать так: 1) сагрегировать M по [Dim Profile] за последние 30 дней 2) и в [M (last 30 days) TEST] обрать только те (1) которые больше 1000? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 11:16 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Lord British, 1) x = сагрегировать M по ROOT([Dim Profile]) за последние 30 дней 2) scope( Filter([Dim Client].[Dim Client].[Dim Client].members, x <= 1000), x) this = null end scope 3) [M (last 30 days) TEST] = сагрегировать x по ROOT([Dim Client]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 13:12 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
поправка 3) [M (last 30 days) TEST] = сагрегировать x по [Dim Client].[Dim Client].[Dim Client].members ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 13:14 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
bideveloperLord British, 1) x = сагрегировать M по ROOT([Dim Profile]) за последние 30 дней 2) scope( Filter([Dim Client].[Dim Client].[Dim Client].members, x <= 1000), x) this = null end scope 3) [M (last 30 days) TEST] = сагрегировать x по ROOT([Dim Client]) Не надо так. Моша категорически не рекомендует filter. Делайте sum(измерение.элементы, iif (условие, x, null) ), так будет кошерно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 21:04 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP Моша категорически не рекомендует filter. Не напомните ссылку, где он такое писал? А может с тех пор уже что изменилось в SSAS или на это надежды нет? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 21:59 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
bideveloperAndy_OLAP Моша категорически не рекомендует filter. Не напомните ссылку, где он такое писал? А может с тех пор уже что изменилось в SSAS или на это надежды нет? ) Вот тут примерно про filter в сравнении с condition. Весьма показательно. А с тех пор многое поменялось - он переместился сначала в команду bing, а потом вовсе в гугл ушел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 22:08 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPНе надо так. Моша категорически не рекомендует filter. Делайте sum(измерение.элементы, iif (условие, x, null) ), так будет кошерно.вроде ведь не будет лучше, sum(filter(set,condition),measure) и sum(set,iif(condition,measure,null)) дают не существенно различающиеся результаты на последних версиях (2016/2017, в то время как Моша писал о 2005/2008), более того второй вариант (который с iif) примерно на 5% медленнее чем первый вариант (с filter), {оба всё равно работают в cell-by-cell, считая более 2 млн. ячеек} некоторая заметная разница будет только в случае если меру с логикой выносить за сумму, т.е. сначала определить меру X_1 как iif(condition,measure,null) а потом уже делать sum(set,X_1) проверялось на таких запросах: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2018, 23:25 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
vikkivнекоторая заметная разница будет только в случае если меру с логикой выносить за сумму, т.е. сначала определить меру X_1 как iif(condition,measure,null) а потом уже делать sum(set,X_1) Не понял этого момента. Это будет более оптимально? За счет чего здесь будет разница с sum(set,iif(condition,measure,null))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2018, 00:26 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
vikkivесли меру с логикой выносить за сумму, т.е. сначала определить меру X_1 как iif(condition,measure,null) а потом уже делать sum(set,X_1) А всегда так. Потому как обычно куча формул бывает, sum, avg и прочий комплект поверх X_1. И к тому же measure под X_1 может быть distinct count. Мне просто лень было этот момент подробно расписывать. Спасибо, Вы это уточнили для коллег и хороший пример привели для тестовой Adventure Works. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2018, 01:18 |
|
||
|
как создать меру SumLast30days
|
|||
|---|---|---|---|
|
#18+
некоторое улучшение производительности скорее всего связанно с тем как агрегирующие функции работают с null (что у Моши описанно в части {1}) - хоть для самой меры на set расчёт всё равно производится для каждой ячейки но пофакту обьём {лёгких} расчётов падает с вынесенной мерой (с незначительным снижением cells calculated но увеличением запросов к SE) кроме того если вынести и определить set отдельно то получим дополнительное улучшение (ещё несколько процентов) - хотя для ТС это почти без разницы т.к. реализуется на уровне MDX Script, т.е. scope (можно конечно динамический hidden set сделать, но придётся решать вопрос с неопределённостью о том какие атрубуты туда попадут) а если ещё и в ручную применить к этому set (отдельного или внутри filter) - nonempty, то производительность вырастит в 25~60 раз (reduce computational size для/over sum {set уменьшен в 90 раз, количество подсчитанных ячеек в 320 раз} о чём Моша пишет в части {2} - но как раз наоборот из-за того что в нашем случае всё равно cell-by-cell, на существенно меньшем наборе) это к тому что описанные оптимизации может и работают {-ли на предыдущих версиях} но относятся к частным случаям и не стоит их слепо применять как общий подход к каждой глобальной проблеме т.к. всё дело в деталях (а они часто теряются в процессе интерпретации). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2018, 06:41 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39606502&tid=1857970]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 498ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...