我正在搜索在 Microsoft PowerPivot 2010 中使用的方法,这将允许我执行动态排名,该排名将根据应用的过滤器和切片器值自动更新关联的排名值。
因此,我见过的所有示例都使用Calculate()DAX函数,该函数通过All()函数覆盖PowerPivot表中的现有过滤器,这会导致用户可以应用的预定义过滤器被忽略。
为了说明我的要求,请参考以下示例:
(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
------------------------------------------------------------------------------------------
现在,我希望能够根据FIRST交易日期显示每个索赔号和索赔人号码的美元金额。我基本上希望只显示与每个索赔#和索赔人编号组相关的第一笔交易的美元。
我的思考过程是为每个[索引号+索赔号]组创建一个动态排名,类似于“分区by-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表本身应用过滤器,则不包括评估日期<在2012年2月1日,排名值应自动更新并反映如下:
(已应用过滤器)
=============================================================================
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
=============================================== ================================================
然后可以创建一个相应的数据透视表来引用这些数据,这样“开元美元”指标只会代表与上述每组FIRST交易相关的美元。
如果有人可以概述如何实现这一目标,我将不胜感激。
我认为动态排名方法对此可能是一个好主意,但如果有人有更好的想法来实现我的最终结果/目标,那就是简单地获得与第一笔交易相关的美元金额“VISIBLE”(基于任何用户应用过滤器)PER GROUP我会对你可能采取的任何方法保持开放态度。
答案 0 :(得分:3)
虽然这是一个写得很好的问题,你显然已经花时间进行制定,但你应该read this about cross posting in forum。这是您在MSDN上完全同时发布的内容的明确重复。我已经回答这两个问题都是一个不错的问题。
首先,我创建了一个基本度量[金额]来汇总美元金额列。然后我在RANKX()中使用它来创建以下内容:
[Rank] = RANKX(
FILTER(
ALLSELECTED(Table1),Table1[Claimant Number]=max(Table1[Claimant Number])
),
[Amount],
,1)
键是[Amount]度量迭代的表 - ALLSELECTED()只是将当前过滤器上下文中的内容置于播放状态,而FILTER()中的表达式将表限制为当前声明号。 / p>
之后根据[Rank]是否为1来返回[Amount]是一项简单的任务:
[Opening Balance] = if([Rank]=1,[Amount],BLANK())
希望这是有道理的,如果他们有帮助,我会在SkyDrive上发布我的工作。
雅各