Здравствуйте, господа!
В эфире наша постоянная рубрика "Они хотят странного"
Есть продукты, поделенные на типы и категории, есть отклики.
Собственно, форулировка задания
автор |
---|
С целью агрегации информации по звонку клиента учитываются следующие приоритеты: - если проставлено несколько типов отклика, и один из них «Согласен», то учитывается тип «Согласен» и не учитываются типы «Отказ» и «Подумает» - если не проставлен тип отклика «Согласен», но проставлены типы «Подумает» и «Отказ», то учитывается тип «Подумает» и не учитывается тип «Отказ» - тип «Отказ» имеет приоритет только над типом «Не озвучено» Значения флагов: С = Согласился, П = Подумает, О = Отказ, Н = Не озвучено Для одного звонка учитывается max из откликов, для агрегации по оператору учитывается сумма звонков (по max)
|
Вроде бы всё просто и в такой формулировке я задачу решил путём создания пяти дополнительных полей, заполняемых примерно так
iif(row_number() over (partition by t.call_id,t.employee_id,p.[product_name] order by resp_id)=1,1,0) as sumpr
и далее подставляемых в скоупы так, как получилось
SCOPE(Descendants([Product].[Product Name],,LEAVES),[Measures].[Cnt Act Offers]);
this=[Measures].[Sumpr];
end scope;
Всё работает как описано, но оказалось, что ОНИ хотели не этого, а динамических итогов в зависимости от того, что вытащено в отчёт, т.е. для примера (один звонок одного оператора)
Type | Name | Chan | Флаг | А | A1 | X | С | А | A1 | Y | О | А | A2 | X | П | А | A2 | Y | О | B | B1 | X | С | B | B1 | Y | Н | B | B2 | X | О | B | B2 | Y | Н | C | C1 | X | С | D | D1 | X | П |
|
Нужны такие результаты:
Type | Name | Chan | С | П | О | Н | Итог | A | A1 | X | 1 | 0 | 0 | 0 | 1 | A | A1 | Y | 0 | 0 | 1 | 0 | 1 | A | A2 | X | 0 | 1 | 0 | 0 | 1 | A | A2 | Y | 0 | 0 | 1 | 0 | 1 | B | B1 | X | 1 | 0 | 0 | 0 | 1 | B | B1 | Y | 0 | 0 | 0 | 1 | 1 | B | B2 | X | 0 | 0 | 1 | 0 | 1 | B | B2 | Y | 0 | 0 | 0 | 1 | 1 | C | C1 | X | 1 | 0 | 0 | 0 | 1 | D | D1 | X | 0 | 1 | 0 | 0 | 1 | Итог | | | 3 | 2 | 3 | 2 | 10 |
|
Type | Name | С | П | О | Н | Итог | А | A1 | 1 | 0 | 0 | 0 | 1 | А | A2 | 0 | 1 | 0 | 0 | 1 | B | B1 | 1 | 0 | 0 | 0 | 1 | B | B2 | 0 | 0 | 1 | 0 | 1 | C | C1 | 1 | 0 | 0 | 0 | 1 | D | D1 | 0 | 1 | 0 | 0 | 1 | Итог | | 3 | 2 | 1 | 0 | 6 |
|
Type | Chan | С | П | О | Н | Итог | A | X | 1 | 0 | 0 | 0 | 1 | A | Y | 0 | 0 | 1 | 0 | 1 | B | X | 1 | 0 | 0 | 0 | 1 | B | Y | 0 | 0 | 0 | 1 | 1 | C | X | 1 | 0 | 0 | 0 | 1 | D | X | 0 | 1 | 0 | 0 | 1 | Итог | | 3 | 1 | 1 | 1 | 6 |
|
Type | С | П | О | Н | Итог | А | 1 | 0 | 0 | 0 | 1 | B | 1 | 0 | 0 | 0 | 1 | C | 1 | 0 | 0 | 0 | 1 | D | 0 | 1 | 0 | 0 | 1 | Итог | 3 | 1 | 0 | 0 | 4 |
|
Chan | С | П | О | Н | Итог | X | 1 | 0 | 0 | 0 | 1 | Y | 0 | 0 | 1 | 0 | 1 | Итог | 1 | 0 | 1 | 0 | 2 |
|
Как это можно реализовать на MDX?
То есть ещё раз проблема в том, что нужны динамические итоги для других измерений в зависимости от того, какие из этих измерений используются в раскладке куба.
Помогите, пожалуйста