Мне нужен запрос MDX, который возвращает верхние N процентов строк на основе совокупной суммы меры. Сложность в том, что набор должен быть упорядочен на основе меры, отличной от той, которая используется для суммы, поэтому использование функции TopPercent
невозможно.
Чтобы уточнить, что мне нужно, вот пример. Я хочу купить как минимум 1000 граммов мяса в как можно меньшем количестве упаковок. Тем не менее, речь идет не только о весе упаковки, я хочу качество, поэтому я хочу отдавать приоритет продуктам, которые содержат самый высокий процент мяса. Доступны следующие продукты:
|| Name || Weight || PercentageOfMeat ||
| Product 1 | 500 | 20 |
| Product 2 | 250 | 60 |
| Product 3 | 1000 | 25 |
| Product 4 | 400 | 50 |
| Product 5 | 400 | 40 |
Итак, чтобы получить то, что я хочу, я сначала отсортировал бы по убыванию по PercentageOfMeat, чтобы удовлетворить свой первый приоритет. Затем я бы суммировал веса продуктов кумулятивно, пока не достигну предела в 1000 грамм. Результатом должны быть продукт 2, продукт 4 и продукт 5. Это достаточно просто.
Но возможно ли это сделать в MDX? TopPercent
(или в случае с примером TopSum
) в противном случае было бы идеально, но это не позволяет мне использовать различные меры для сортировки и суммирования. Если бы я хотел только продукты, которые весят больше всего, это сработало бы. Чтобы процитировать документацию, функция:
Сортирует набор в порядке убывания и возвращает набор кортежей с наивысшими значениями, совокупная сумма которых равна или превышает указанный процент.
Что мне в основном нужно, так это TopPercent
функция, которая не сортирует множество, но, насколько я знаю, ее нет. Так можно ли делать то, что я хочу, или мне нужно рассчитать это в коде сервера?