Мы столкнулись со странной, но объяснимой проблемой с вычислениями в нашем кубе SSAS. Чтобы объяснить проблему, мы отрезали маленький образец куба. У нас по физическим меркам «выручка» пришла 1: 1 из источника данных. Мы вводим некоторую логику в расчет, чтобы вычесть сумму кредита из суммы счета. Все значения находятся в «доходе», измерение разделяет типы транзакций. Это все работает нормально, пока мы не установим фильтр элемента en в свойстве измерения «тип транзакции», мы предполагаем, что общий результат будет уменьшен фильтром, но на него не влияет, как вы можете видеть на скриншоте.
Цель состоит в том, чтобы фильтр, который мы применяем с помощью Excel, также влиял на общий результат. Между прочим, в SSMS это не только превосходно, но и то же поведение.
Excel без фильтра: Excel без фильтра
После фильтрации «тип транзакции» и удаления «Кредит» итоговые значения остаются прежними:
после фильтрации по типу транзакции
На вкладке вычисления куба мы производим следующие вычисления:
CALCULATE;
(MEASUREGROUPMEASURES('revenues'),[Accounting component].[Transaction type].[All])
=
([Accounting component].[Transaction type].&[-], [Measures].CURRENTMEMBER)+
([Accounting component].[Transaction type].&[Invoice], [Measures].CURRENTMEMBER)-
([Accounting component].[Transaction type].&[Credit], [Measures].CURRENTMEMBER)-
([Accounting component].[Transaction type].&[Payment], [Measures].CURRENTMEMBER);
(MEASUREGROUPMEASURES('revenues'), [Accounting component].[Charge type].&[Agreed fees])
=
([Accounting component].[Transaction type].&[Invoice], [Measures].CURRENTMEMBER)-
([Accounting component].[Transaction type].&[Credit], [Measures].CURRENTMEMBER);
(MEASUREGROUPMEASURES('revenues'), [Accounting component].[Charge type].&[Fees collected])
=
([Accounting component].[Transaction type].&[Payment], [Measures].CURRENTMEMBER);
(MEASUREGROUPMEASURES('revenues'), [Accounting component].[Charge type].&[-])
=
([Accounting component].[Transaction type].&[-], [Measures].CURRENTMEMBER);
(MEASUREGROUPMEASURES('revenues'), [Accounting component].[Charge type].[All])
=
([Accounting component].[Charge type].&[Agreed fees], [Measures].CURRENTMEMBER)+
([Accounting component].[Charge type].&[-], [Measures].CURRENTMEMBER)-
([Accounting component].[Charge type].&[Fees collected], [Measures].CURRENTMEMBER);
В нашем тестовом кубе у нас есть только одно измерение и один факт: обзор куба
Само измерение имеет иерархию с двумя уровнями: измерение
Как мы понимаем, элемент [All] не зависит от запроса субкуба, но как мы можем добиться такого поведения?
Мы также пытались изменить вычисления на функцию «Унарные операторы» с тем же результатом.
У вас есть идеи, чтобы решить эту проблему?