PowerPivot DAX - динамическое ранжирование по группе (минимум для группы)

Я ищу метод для использования в Microsoft PowerPivot 2010, который позволит мне выполнять динамическое ранжирование, которое будет автоматически обновлять связанное значение ранга на основе примененных фильтров и значений среза.

Таким образом, все примеры, которые я видел, используют функцию DAX Calculate (), которая переопределяет существующие фильтры в таблице PowerPivot с помощью функции All (), которая приводит к игнорированию предопределенных фильтров, которые пользователи могут применять.

Чтобы проиллюстрировать мои требования, ознакомьтесь с приведенным ниже примером:

(Исходные данные в окне PowerPivot :)

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

Теперь я хотел бы иметь возможность ТОЛЬКО отображать сумму в долларах для каждого номера претензии и номера заявителя на основе ПЕРВОЙ даты транзакции. По сути, я бы хотел показать только доллары, привязанные к первой транзакции, привязанной к каждому номеру претензии и группе номеров истца.

Мой мыслительный процесс заключался в создании динамического ранга для каждой группы [номер претензии + номер истца], аналогичный функции «разделить по - Row_Number ()». Таким образом, каждая группа [номер претензии + номер заявителя], содержащая значение ранга 1, будет представлять ПЕРВУЮ транзакцию, привязанную к этому значению.

Однако мне нужно, чтобы это значение ранга изменилось, если пользователь применит фильтр к данным в итоговой сводной таблице.

Это можно проиллюстрировать ниже на основе приведенных выше примеров данных:

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

Теперь, если пользователь применяет фильтр через срез или через раскрывающееся меню фильтра в сводной таблице или в самой таблице PowerPivot, за исключением дат оценки ‹2/1/2012, значение ранга должно автоматически обновляться и отражаться, как показано ниже:

(Применены фильтры)

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

Как видите, значение ранга было автоматически обновлено для первой группы заявок на основании того, что одна из строк, связанных с номером заявки ABCD123456, была скрыта на основе примененного пользователем фильтра.

Затем я хотел бы создать дополнительную меру в таблице PowerPivot, которая отображала бы сумму в долларах, привязанную ТОЛЬКО к транзакции, содержащей значение ранга 1, как показано ниже:

(Фильтры применены, добавлена ​​новая мера)

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

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

Затем можно создать соответствующую сводную таблицу со ссылкой на эти данные, чтобы мера «Начальная сумма доллара» представляла только доллары, привязанные к ПЕРВОЙ транзакции для каждой группы, как описано выше.

Я был бы очень признателен, если бы кто-нибудь обрисовал в общих чертах, как этого можно достичь.

Я подумал, что подход динамического ранжирования может быть хорошей идеей для этого, но если у кого-то есть лучшая идея для достижения моего конечного результата / цели, которая состоит в том, чтобы просто получить сумму в долларах, привязанную к первой транзакции «ВИДИМО» (на основе любого пользователя, примененного фильтры) НА ГРУППУ Я был бы открыт для любого вашего подхода.


person user1159554    schedule 01.04.2013    source источник


Ответы (1)


Хотя это хорошо написанный вопрос, на формулировку которого вы, очевидно, потратили время, вам следует прочитать это о кросс размещение на форуме s. Это явное дублирование того, что вы разместили в MSDN в одно и то же время. Я ответил в обоих случаях, считая это достойным вопросом.

Сначала я создал базовую меру [Сумма] для суммирования столбца суммы в долларах. Затем я использовал это в RANKX () для создания следующего:

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

Ключевым моментом является таблица, по которой повторяется мера [Amount] - ALLSELECTED () просто запускает материал в текущем контексте фильтра, а выражение в FILTER () ограничивает таблицу текущим номером заявки.

После этого было несложной задачей вернуть [Amount] в зависимости от того, был ли [Rank] равен 1:

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

Надеюсь, это имеет смысл, я разместил свои работы на SkyDrive, если они помогут.

Иаков

person Jacob    schedule 01.04.2013
comment
Извините, что открываю этот старый пост, но почему вы явно не использовали дату транзакции, если рейтинг упорядочен по этому полю? Я пытаюсь решить эту же проблему. - person Seymour; 30.08.2019