2013-04-01 14 views
5

ich für ein Verfahren bin auf der Suche innerhalb Microsoft Power 2010 zu nutzen, die ich dynamisches Ranking ausführen können, die automatisch den zugehörigen Rangwert auf Filter und Slicer auf Basis aktualisiert Werte, die angewendet werden. Daher verwenden alle Beispiele, die ich gesehen habe, die DAX-Funktion Calculate(), die vorhandene Filter in der PowerPivot-Tabelle über die Funktion All() überschreibt, wodurch vordefinierte Filter, die Benutzer anwenden können, ignoriert werden.Power DAX - Dynamische Rang pro Gruppe (Min pro Gruppe)

meine Anforderungen zu verdeutlichen, verweisen Sie bitte das folgende Beispiel:

(Quelldaten innerhalb Power Fenster :)

------------------------------------------------------------------------------------- 
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 
------------------------------------------------------------------------------------------ 

Nun würde ich für die Fähigkeit, nur die Anzeige der Dollar-Betrag haben möchten jede Anspruchsnummer und Anspruchsnummer basierend auf dem ERSTEN Transaktionsdatum. Ich würde im Wesentlichen wünschen, nur die Dollar zu zeigen, die an die erste Transaktion gebunden sind, die mit jeder Anspruch # und Berechtigungszahlgruppe verbunden ist.

Mein Denkprozess bestand darin, einen dynamischen Rang für jede [Fallnummer + Anspruchsnummer] -Gruppe ähnlich der Funktion "Partition by - Row_Number()" zu erstellen. Auf diese Weise würde jede Gruppe von [Anspruch Nummer + Anspruchstellernummer], die einen Rangwert von 1 enthält, die FIRST-Transaktion repräsentieren, die mit diesem Wert verknüpft ist.

Allerdings müsste dieser Rangwert geändert werden, wenn ein Benutzer einen Filter für die Daten in der resultierenden PivotTable anwendet.

Dies kann unten, basierend auf den Abtastdaten oben definiert wird, veranschaulicht:

---------------------------------------------------------------------------------------------- 
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 
------------------------------------------------------------------------------------------------ 

Nun, wenn ein Benutzer einen Filter über einen Slicer gilt oder über das Filter Dropdown innerhalb einer Pivot-Tabelle oder innerhalb der Power Tabelle selbst ausgenommen Bewertungstage < 2012.02.01 sollte der Rangwert automatisch aktualisiert und wie unten gezeigt widerspiegeln:

============================================================================= 
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 
=========================================================================== 
(Filter angewendet)

Wie Sie sehen können, wurde der Rangwert automatisch für die erste Anspruchsgruppe basierend auf einer der Zeilen, die an die Anspruchsnummer ABCD123456 gebunden sind, basierend auf dem vom Benutzer angewendeten Filter, aktualisiert.

dann möchte ich eine zusätzliche Maßnahme im Powerpivot-Tabelle erstellen, die den Dollar-Betrag nur gebunden an die Transaktion angezeigt werden würde einen Rangwert von 1 enthält, wie unten dargestellt:

(Filter angewendet, New Measure Added)

=============================================================================================== 
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 

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

Eine entsprechende Pivot-Tabelle könnte dann mit Bezug auf diese Daten erstellt werden, so dass die "Opening Doll ar Amt "würde nur Dollars darstellen, die an die FIRST-Transaktion pro Gruppe gebunden sind, wie oben beschrieben.

Ich würde sehr schätzen, wenn jemand skizzieren kann, wie dies erreicht werden könnte.

Ich dachte, der dynamische Ranking-Ansatz könnte eine gute Idee dafür sein, aber wenn jemand eine bessere Idee hat, um mein Endergebnis zu erreichen, das ist einfach den Dollar Betrag zu erhalten, der an die erste Transaktion "VISIBLE" gebunden ist auf jeden Benutzer angewendete Filter) PER GROUP Ich wäre offen für jede Art von Ansatz, den Sie haben könnten.

Antwort

3

Obwohl dies eine gut geschriebene Frage ist, die Sie offensichtlich in die Formulierung gebracht haben, sollten Sie read this about cross posting in forum s. Dies ist eine klare Duplizierung von etwas, das Sie zur gleichen Zeit auf MSDN gepostet haben. Ich habe darauf geantwortet, dass es eine anständige Frage ist.

Zuerst habe ich ein Basismaß [Betrag] erstellt, um die Dollarbetragsspalte zu summieren. Früher habe ich dann, dass innerhalb RANKX() folgenden zu erstellen:

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

Der Schlüssel ist die Tabelle, dass die [Menge] Maßnahme iteriert wird - ALLSELECTED() bringt nur das, was in dem aktuellen Filter Kontext ins Spiel und Der Ausdruck in FILTER() beschränkt die Tabelle auf die aktuelle Anspruchsnummer.

Danach ist es eine einfache Aufgabe, die [Menge] basierend auf, ob die [Rank] zurückzukehren war, war 1:

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

Hoffnung macht das Sinn, geschrieben ich meine Arbeiten auf SkyDrive, wenn sie helfen .

Jacob

Verwandte Themen