2017-01-23 3 views
0

У меня есть код RANK от WEBI и вам нужно написать аналогичный код в DAX или MDX. Оба могут работать. Но DAX будет более полезен.DAX - RANK Функция

=Rank([OrderCount];([Category1];[Category2];[Category3])) 

Я пробовал код ниже в DAX, но это не то, что мне нужно.

=RANK.EQ(table1[OrderCount];table1[OrderCount]) 

Можете ли вы мне помочь написать?

Grouping by Count. This is extra.

ответ

1

Я не очень хорошо DAX, но MDX способ заключается в следующем:

with 
Dynamic Set OrderedSet as 
Order(
    NonEmptyCrossJoin(
     [Dim Product].[Subcategory Name].[Subcategory Name].Members, 
     [Dim Product].[Category Name].[Category Name].Members 
     [Measures].[Order Quantity], 
     2 
    ), 
    [Measures].[Order Quantity], 
    BDESC 
) 

Member [Measures].[Rank] as 
Rank(

     ([Dim Product].[Subcategory Name].Currentmember, 
     [Dim Product].[Category Name].Currentmember), 
     OrderedSet 
) 

select 
{[Measures].[Order Quantity],[Measures].[Rank]} on 0, 
non empty OrderedSet on 1 
from 
[Adventure Works DW2016CTP3] 

DENSERANK:

with 
Dynamic Set OrderedSet as 
Order(
    NonEmptyCrossJoin(
     [Dim Product].[Subcategory Name].[Subcategory Name].Members, 
     [Dim Product].[Category Name].[Category Name].Members, 
     [Measures].[Order Quantity], 
     2 
    ), 
    [Measures].[Order Quantity], 
    BDESC 
) 

Dynamic Set DenseOrderedSet as 
Order(
    NonEmpty(
     OrderedSet, 
     [Measures].[RankFirstMatch] 
    ), 
    [Measures].[Order Quantity], 
    BDESC 
) 

Member [Measures].[Rank] as 
Rank(
    ([Dim Product].[Subcategory Name].Currentmember,[Dim Product].[Category Name].CurrentMember), 
    OrderedSet 
) 

Member [Measures].[RankFirstMatch] as 
IIF(
    [Measures].[Order Quantity] 
    = 
    (
     OrderedSet.Item([Measures].[Rank] -2), 
     [Measures].[Order Quantity] 
    ), 
    NULL, 
    [Measures].[Rank] 
) 

Member [Measures].[RankDenseSet] as 
Rank(
    ([Dim Product].[Subcategory Name].Currentmember,[Dim Product].[Category Name].CurrentMember), 
    DenseOrderedSet 
) 


Member [Measures].[DenseRank] as 
IIF(
    [Measures].[RankDenseSet] = 0, 
    (OrderedSet.Item([Measures].[Rank] -2),[Measures].[DenseRank]), 
    [Measures].[RankDenseSet] 
) 


select {[Measures].[Order Quantity],[Measures].[Rank],[Measures].[RankFirstMatch],[Measures].[RankDenseSet],[Measures].[DenseRank]} on 0, 
non empty OrderedSet on 1 
from [Adventure Works DW2016CTP3] 
+0

по этому коду; это упорядочение только по размерности категории? И тогда я могу добавить дополнительные размеры после '[Order]. [Category]. [Category] .Members'? –

+0

Конечно, вы можете добавить столько, сколько хотите. Если бы вы могли более подробно описать структуру вашего куба и что вы хотите достичь, я бы мог написать код, который вам нужен. –

+0

Давайте построим код на Adventure Works db. Я также не уверен в достижении результата, потому что мне просто нужно сделать то, что делает этот код WEBI: 'int RANK (measure [; ranking_dims] [; top | bottom] [; reset_dims])'. Необходимо создать то же самое с DAX или MDX. Но я думаю, эта формула говорит что-то вроде; ранжирование [Заказ Количество] по категории товаров и подкатегории –

Смежные вопросы