2017-07-31 57 views
0

我一直在爲這兩天掙扎着。我正在嘗試使用Power BI來創建一個簡單的報告,以顯示事件的前10個事件。無法弄清楚如何讓RANKX工作

我有一個表叫請求有以下幾點:

Id Code 
1  00001 
2  00001 
3  00500 
4  00001 
5  00500 
6  00730 
... 

我想計數代碼的每次出現,並顯示前10:

Code Count Rank 
00001 3  1  
00500 2  2 
00730 1  3 

我創建了一個衡量所謂的計數:

Count = COUNTROWS(Requests) 

我試圖用以下方法創建排名的度量:

Rank = RANKX(ALL(Requests), [Count]) 
Rank = RANKX(Requests, [Count]) 

一切都得到相同的1值:

Code Count Rank 
00001 3  1 
00500 2  1 

我在做什麼錯?

回答

0

您可以使用內置的Top N Filter如果你不想要太多麻煩。只要設定爲Code列前N過濾通過的Count值顯示排名前10位:

result

+0

這正是我所期待的。我想獲得前10名的成績,並且我在其他地方讀過,我不得不使用RANKX來完成。 – Dismissile

0

我相信你得到所有1的原因是你創建的度量只會給你表中每行使用的總行數,然後你基本上試圖對它自己反覆排列相同的數字,爲每一行。

你可以通過使用TOPN然後RANKX得到你想要的。要做到這一點,創建一個新表,並輸入驗證碼,以獲得從請求表,根據ID的前10碼統計:

TOP10 = TOPN(10,GROUPBY(Requests,Requests[Code],"Count",countx(CURRENTGROUP(),Requests[Id]))) 

然後用這個代碼添加一個新列做排名:

Rank = RANKX(TOP10,TOP10[Count]) 

你會從你的第一個6行這樣的結果,你上面顯示:

enter image description here

+0

這因爲表格編碼爲10,所以很難將其更改爲Top X.如果不創建另一個表格,是不是沒有辦法? – Dismissile

+0

也許這會有所幫助然後:從你的請求表開始,然後添加一個包含以下代碼的列:'Rank = rankx(Requests,calculate(countx(Requests,Requests [Code]),filter(Requests,Requests [Code] = earlier (請求[代碼]))),, DESC,密集)'。它應該排序從1到n的每一行。 –

0

考慮使用VALUES和變量在電力BI桌面計算的表:

Top 10 Codes = 
VAR MyTable = 
    ADDCOLUMNS (
     VALUES (Requests[Code]), 
     "Occurences", COUNTROWS (RELATEDTABLE (Requests)) 
    ) 
RETURN 
    TOPN (
     10, 
     ADDCOLUMNS (MyTable, "Rank", RANKX (MyTable, [Occurences])), 
     [Rank], ASC 
    )