Forum Discussion

HariBPujari's avatar
HariBPujari
Frequent Visitor
3 years ago
Solved

RANKX with multiple Dimension tables

I have three tables as below:

1) DimGroup

S N  GroupCode  GroupName  
1G1Red
2G2Green
3G3Blue
4G4Yellow
5G5Black

 

2) DimUser

S NUserCode  UserName  GroupCode  
1U1HarryG1
2U2SarryG2
3U3ParryG3
4U4BarryG1
5U5GarryG5
6U6DarryG4
7U7TarryG1
8U8ZarryG2
9U9HurryG3
10U10KurryG1
11U11BurryG5
12U12XurryG4
13U13IurryG1
14U14LurryG2
15U15MurrtG3
16U16NurryG1
17U17OurryG5
18U18PurryG4
19U19QurryG4
20U20RurryG1
21U21SurryG2

 

3) FactTransaction

S NTrnCode  UserCode  Amount  
1T1U55636
2T2U63661
3T3U610955
4T4U14243
5T5U34069
6T6U27593
7T7U41468
8T8U15359
9T9U5715
10T10U811616
11T11U92468
12T12U10895
13T13U118790
14T14U122767
15T15U145649
16T16U156739
17T17U1612020
18T18U178494
19T19U184015
20T20U1808
21T21U27768
22T22U31996
23T23U412103
24T24U54825

 

Relationships:

1) DimGroup[GroupCode] 1->* DimUser[GroupCode]

2) DimUser[UserCode] 1->* FactTransaction[UserCode]

Here, I am trying to create a measure RANKX by FactTransaction[Amount] and put it in the matrix visual with GroupName from DimGroup and UserName from DimUser. But the matrix shows all UserName for each GroupName. But if I put GroupCode from DimUser, it works as expected but i want GroupName from DimGroup.

My Measure:

RANKX(
    ALL(DimUser[UserName]),
    SUMX(RELATEDTABLE(FactTransaction),FactTransaction[Amount])
    ,,DESC,Dense
)

 

 

Correct one by need GroupName from DimGroup instead GroupCode from DimUser

Help please.....

  • HariBPujari Try this:

     

    Rank X by User Transaction 2 = 
        VAR __Group = MAX('DimGroup'[GroupCode])
        VAR __User = MAX('DimUser'[UserName])
        VAR __Table = FILTER(SUMMARIZE(ALLEXCEPT('DimUser',DimGroup[GroupName]),[GroupCode],[UserName],"__Value",SUMX(RELATEDTABLE('FactTransaction'),[Amount])),[__Value] <> BLANK())
        VAR __Table1 = 
            ADDCOLUMNS(
                __Table,
                "__Rank", RANKX(FILTER(__Table,[GroupCode] = EARLIER([GroupCode])),[__Value],,DESC)
            )
        VAR __Result = MAXX(FILTER(__Table1,[GroupCode] = __Group && [UserName] = __User),[__Rank])
    RETURN
        __Result

    or this:

    Rank X by User Transaction 2 = 
        VAR __Group = MAX('DimGroup'[GroupCode])
        VAR __User = MAX('DimUser'[UserName])
        VAR __Table = SUMMARIZE(ALLEXCEPT('DimUser',DimGroup[GroupName]),[GroupCode],[UserName],"__Value",SUMX(RELATEDTABLE('FactTransaction'),[Amount]))
        VAR __Table1 = 
            ADDCOLUMNS(
                __Table,
                "__Rank", RANKX(FILTER(__Table,[GroupCode] = EARLIER([GroupCode])),[__Value],,DESC)
            )
        VAR __Result = MAXX(FILTER(__Table1,[GroupCode] = __Group && [UserName] = __User),[__Rank])
    RETURN
        __Result

     

6 Replies

    • HariBPujari's avatar
      HariBPujari
      Frequent Visitor
      My measures
       
      Rank X by User Transaction =
      RANKX(
          ALL(DimUser[UserName]),
          SUMX(RELATEDTABLE(FactTransaction),FactTransaction[Amount])
          ,,DESC,Dense
      )
      • Greg_Deckler's avatar
        Greg_Deckler
        Icon for Community Champion rankCommunity Champion

        HariBPujari Try this:

         

        Rank X by User Transaction 2 = 
            VAR __Group = MAX('DimGroup'[GroupCode])
            VAR __User = MAX('DimUser'[UserName])
            VAR __Table = FILTER(SUMMARIZE(ALLEXCEPT('DimUser',DimGroup[GroupName]),[GroupCode],[UserName],"__Value",SUMX(RELATEDTABLE('FactTransaction'),[Amount])),[__Value] <> BLANK())
            VAR __Table1 = 
                ADDCOLUMNS(
                    __Table,
                    "__Rank", RANKX(FILTER(__Table,[GroupCode] = EARLIER([GroupCode])),[__Value],,DESC)
                )
            VAR __Result = MAXX(FILTER(__Table1,[GroupCode] = __Group && [UserName] = __User),[__Rank])
        RETURN
            __Result

        or this:

        Rank X by User Transaction 2 = 
            VAR __Group = MAX('DimGroup'[GroupCode])
            VAR __User = MAX('DimUser'[UserName])
            VAR __Table = SUMMARIZE(ALLEXCEPT('DimUser',DimGroup[GroupName]),[GroupCode],[UserName],"__Value",SUMX(RELATEDTABLE('FactTransaction'),[Amount]))
            VAR __Table1 = 
                ADDCOLUMNS(
                    __Table,
                    "__Rank", RANKX(FILTER(__Table,[GroupCode] = EARLIER([GroupCode])),[__Value],,DESC)
                )
            VAR __Result = MAXX(FILTER(__Table1,[GroupCode] = __Group && [UserName] = __User),[__Rank])
        RETURN
            __Result