سؤال

أحتاج إلى استعلام MDX الذي يعيد أعلى ن في المئة من الصفوف بناءً على مجموع تراكمي من التدبير. الجزء الصعب هو أنه يجب طلب المجموعة بناءً على مقياس مختلف عن المستخدم ، لذلك باستخدام 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               |

لذا ، للحصول على ما أريد ، أود أولاً الفرز بشكل مئوي من النسبة المئوية لتلبية أولويتي الأولى. ثم أود أن ألخص أوزان المنتجات بشكل تراكمي حتى أصل إلى حد 1000 غرام. يجب أن تكون النتيجة المنتج 2 والمنتج 4 والمنتج 5. هذا بسيط بما فيه الكفاية.

ولكن هل من الممكن القيام بذلك في MDX؟ TopPercent (أو في حالة المثال ، TopSum) سيكون مثاليًا ، لكنه لا يسمح لي باستخدام تدابير مختلفة للفرز والتلخيص. إذا أردت فقط المنتجات التي تزيد وزنها ، فستنجح. على حد تعبير الوثائق ، الوظيفة:

يقوم بتصنيف مجموعة في ترتيب تنازلي ، ويعيد مجموعة من tuples بأعلى القيم التي يكون مجموعها التراكمي مساوياً أو أكبر من النسبة المئوية المحددة.

ما أحتاجه أساسًا هو TopPercent الوظيفة التي لا تفرز المجموعة ، ولكن على حد علمي ، لا يوجد شيء. فهل من الممكن أن أفعل ما أريد أو هل يجب علي حساب هذا في رمز الخادم؟

هل كانت مفيدة؟

المحلول

ماذا عن الجمع بين الطلب () أولاً لتصنيف منتجاتك وفقًا لنسبةها المئوية من اللحوم ثم تصفية () وفقًا لوزنها التراكمي؟

في [Adventure Works] يعرض الرمز التالي أكثر الدراجات الجبلية المرتبة التي يكون مبلغ مبيعاتها التراكمي أقل إلى قيمة معينة:

with 

   set [mbikes] as order( [Product].[Product Categories].[mountain bikes].children, [order count], BDESC ) 

select 

    { [order count], [sales amount] } on 0,

    filter( [mbikes], sum( subset( [mbikes], 0, [mbikes].currentOrdinal ), [sales amount] ) < (8 * 1000 * 1000)  ) on 1 

from [adventure works]  

إعطاء ما يلي:

                          Order Count    Sales Amount
Mountain-200 Black, 38          743      $2,589,363.78
Mountain-200 Black, 42          671      $2,265,485.38
Mountain-200 Silver, 38         641      $2,160,981.60
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top