MDX - Как пропустить 0 значений в согласовании MIN и как исключить несколько процентов результатов? - PullRequest
0 голосов
/ 03 января 2019

В моем кубе у меня есть

  • Доход как мера с MIN агрегированием
  • Размер: [Локализация]. [Тип]. & [Центр]
  • Размер: {[Дата]. [Год]. & [2017], [Дата]. [Год]. & [2018]}

Мой запрос:

What are the minimum earnings of the person who decides to buy
apartments in the city center, excluding 5% of the lowest, within
last 2 years?

Теперь мой MDX-запрос выглядит так:

SELECT
[Measures].[MinEarnings] ON COLUMNS
FROM [cube]
WHERE
(
    BottomCount ([Localization].[Type].&[center], 95, [Measures].[MinEarnings]),
    {[Date].[Year].&[2017], [Date].[Year].&[2018]}
)

У меня две проблемы:

  1. Некоторые заработки равны 0 - как я могу пропустить их в расчетах?
  2. Если мой запрос правильно исключает 5% самого низкого заработка?

1 Ответ

0 голосов
/ 04 января 2019

Прежде всего вы должны использовать toppercent, а не bottomcount.Вы хотите, чтобы минимальная заработная плата человека, который не находится в последних 5%, не была последней 5. Toppercent даст вам верхние 95%.

Во-вторых, для фильтрации 0 вы можете использовать следующий синтаксис

toppercent (
filter([Localization].[Type].&[center], [Measures].[MinEarnings]>0)
, 95, [Measures].[MinEarnings])

Даже сейчас размещение кода в предложении where может не сработать, но попробуйте.Я бы посоветовал вам переместить топперцентр в строки, затем заказать его, а затем взять top1

topcount(
order(
toppercent (
filter([Localization].[Type].&[center], [Measures].[MinEarnings]>0)
,95, [Measures].[MinEarnings])
,[Measures].[MinEarnings],asc)
,1)

У меня есть пример, который дает минимальный объем продаж городов, обратите внимание, что я заменил нули на 0, чтобы сделатькак можно ближе к вашему случаю

с участником [Меры]. [Сумма Интернет-продаж2], как случай, когда ([Меры]. [Сумма Интернет-продаж]) = ноль, а затем 0, еще [Меры]. [ИнтернетСумма продаж] end

select [Measures].[Internet Sales Amount2]
on columns ,
topcount(order(toppercent(filter([Customer].[City].[City],[Measures].[Internet Sales Amount2]>0),95,[Measures].[Internet Sales Amount2]),[Measures].[Internet Sales Amount2],asc),1)
 on rows 
from [Adventure Works]
where [Customer].[Country].&[Canada]

на рисунке ниже - результат перед topcount 1 enter image description here

...