2013-04-01 11 views
5

Szukam metody do wykorzystania w ramach Microsoft PowerPivot 2010, która pozwoli mi na przeprowadzenie dynamicznego rankingu, który automatycznie zaktualizuje przypisaną wartość rangi w oparciu o filtry i krajarkę wartości, które są stosowane.PowerPivot DAX - dynamiczny ranking na grupę (Min Per Group)

Tak, wszystkie przykłady, które widziałem, wykorzystują funkcję Calculate() DAX, która zastępuje istniejące filtry w tabeli programu PowerPivot za pomocą funkcji Wszystkie(), która powoduje, że wstępnie zdefiniowane filtry mogą być odrzucane przez użytkowników.

Aby zilustrować moje wymagania, prosimy odwołać się do poniższego przykładu:

(Źródło danych w PowerPivot okna :)

------------------------------------------------------------------------------------- 
Claim Number | Claimant Number | Transaction Date |   Dollar Amount 
------------------------------------------------------------------------------------ 
ABCD123456   4    1/1/2012     $145.23 
ABCD123456   4    8/1/2012     $205.12 
ABCD123456   4    9/1/2012     $390.74 
VDSF123455   2    3/5/2012     $10.12 
VDSF123455   2    9/5/2012     $50.12   
VDSF123455   2    12/9/2012     $210.45 
------------------------------------------------------------------------------------------ 

Teraz chciałbym mieć zdolność TYLKO wyświetlania kwoty w dolarach dla każdy numer roszczenia i numer roszczenia w oparciu o PIERWSZĄ datę transakcji. Zasadniczo chciałbym pokazać tylko dolary powiązane z pierwszą transakcją związaną z każdym żądaniem # i grupą numerów roszczeń.

Mój sposób myślenia polegał na stworzeniu dynamicznej pozycji dla każdej grupy [numer roszczenia + numeru roszczenia] podobnej do funkcji "partition by - Row_Number()". W ten sposób każda grupa [numer roszczenia + numer roszczenia] o wartości równej 1 reprezentowałaby PIERWSZĄ transakcję powiązaną z tą wartością.

Potrzebuję jednak tej wartości w rankingu, aby zmienić, jeśli użytkownik zastosuje filtr względem danych w wynikowej tabeli przestawnej.

Można to pokazano poniżej na podstawie przykładowych danych określonych powyżej:

---------------------------------------------------------------------------------------------- 
Claim Number | Claimant Number | Transaction Date | Dollar Amount | Rank | 
--------------------------------------------------------------------------------------------- 
ABCD123456    4    1/1/2012   $145.23  1 
ABCD123456    4    8/1/2012   $205.12  2 
ABCD123456    4    9/1/2012   $390.74  3 
VDSF123455    2    3/5/2012   $10.12   1 
VDSF123455    2    9/5/2012   $50.12   2 
VDSF123455    2    12/9/2012   $210.45  3 
------------------------------------------------------------------------------------------------ 

Teraz, jeśli użytkownik stosuje filtr za pomocą krajalnicy lub za pomocą listy rozwijanej filtru w tabeli przestawnej lub w tabeli programu PowerPivot samego wyłączeniem daty wyceny < 2/1/2012, wartość rangi powinien automatycznie aktualizuje się i być widoczne, jak pokazano poniżej: (Applied Filters)

============================================================================= 
Claim Number | Claimant Number | Transaction Date | Dollar Amount | Rank | 
============================================================================ 
ABCD123456   4     8/1/2012   $205.12  1 
ABCD123456   4     9/1/2012   $390.74  2 
VDSF123455   2     3/5/2012   $10.12  1 
VDSF123455   2     9/5/2012   $50.12  2 
VDSF123455   2    12/9/2012   $210.45  3 
=========================================================================== 

Jak widać, wartość rangi została automatycznie zaktualizowana dla pierwszej grupy roszczeń na podstawie jednego z wierszy związanych z numerem roszczenia ABCD123456, który jest ukryty, na podstawie filtru zastosowanego przez użytkownika.

bym wtedy chciał utworzyć dodatkowy środek w tabeli PowerPivot który wyświetla ilość dolarów TYLKO związany z transakcją zawierającej wartość Sortowanie 1, jak pokazano poniżej: (zastosowano filtry, nowy środek dodanej)

=============================================================================================== 
Claim Number | Claimant Number | Transaction Date | Dollar Amount | Rank | Opening Dollar Amt| 
================================================================================================ 
ABCD123456   4     8/1/2012   $205.12   1   $205.12 
ABCD123456   4     9/1/2012   $390.74   2   
VDSF123455   2     3/5/2012   $10.12   1   $50.12 
VDSF123455   2     9/5/2012   $50.12   2 
VDSF123455   2     12/9/2012   $210.45   3 

=========================================== ================================================== ==

Odpowiednią tabelę przestawną można następnie utworzyć, odwołując się do tych danych, aby "Otwieranie lalki" ar Amt "środek reprezentowałby tylko dolary powiązane z PIERWSZĄ transakcją na grupę, jak opisano powyżej.

Byłbym bardzo wdzięczny, gdyby ktoś mógł opisać, jak można to osiągnąć.

Uważam, że podejście do dynamicznego rankingu może być dobrym pomysłem, ale jeśli ktoś ma lepszy pomysł, aby osiągnąć mój wynik końcowy/cel, to jest po prostu uzyskać kwotę w dolarach związaną z pierwszą transakcją "WIDOCZNY" (oparty na wszystkich filtrach stosowanych przez użytkownika) PER GROUP Byłbym otwarty dla każdego podejścia, jakie możesz mieć.

Odpowiedz

3

Mimo że jest to dobrze napisane pytanie, które w oczywisty sposób wpłynęło na sformułowanie, powinieneś uzyskać read this about cross posting in forum s. Jest to wyraźne duplikowanie treści opublikowanych w witrynie MSDN dokładnie w tym samym czasie. Odpowiedziałem, widząc, że jest to przyzwoite pytanie.

Najpierw stworzyłem podstawową miarę [Kwota], aby zsumować kolumnę wartości dolara. I następnie wykorzystywane że w RANKX(), aby utworzyć następujące:

[Rank] = RANKX(
     FILTER(
     ALLSELECTED(Table1),Table1[Claimant Number]=max(Table1[Claimant Number]) 
        ), 
     [Amount], 
      ,1) 

Kluczem jest tabela że [kwota] Środek jest powtórzyć over - ALLSELECTED() po prostu przynosi rzeczy w obecnym kontekście filtra do gry i wyrażenie w opcji FILTER() ogranicza tabelę do bieżącego numeru zgłoszenia.

Po tym było to proste zadanie, aby powrócić do [kwota] na podstawie tego, czy [Pozycja] wynosił 1:

[Opening Balance] = if([Rank]=1,[Amount],BLANK()) 

Nadzieja to sens, wysłałem moje funkcjonowanie na SkyDrive jeśli pomagają .

Jacob