PowerPivot DAX:识别Max&每组最低价值

时间:2013-08-15 05:58:16

标签: max min powerpivot dax

我需要确定PowerPivot连接的数据透视表中每个已定义组的最大值和最小值。

请参考链接到相应PowerPivot表的以下基本Excel表格(通过ASCII发布):

-------------------------------------------------
Customer   |  Store  |  Transaction Sequence No | 
-------------------------------------------------       
     A           1                  1
     A           1                  2
     A           1                  3
     A           2                  1
     A           2                  2
     B           1                  1
     B           1                  2
     B           2                  1

如您所见,上面有两列唯一定义

  1. 客户
  2. 商品
  3. 对于每个组,可以有一个或多个事务,每个事务都有一个关联 [交易顺序号] 值也如上所述。

    在通过2 DAX Measures生成的数据透视表中,我想列出与每个唯一组关联的最小最大[Transaction Sequence No] 值。

    这将导致以下数据透视表:

    ----------------------------------------------------------------------------
    Customer   |  Store  |  Transaction Sequence No |   Max eq No | Min Seq No |
    ---------------------------------------------------------------------------- 
         A           1                  1                  3           1
         A           1                  2                  3           1
         A           1                  3                  3           1
         A           2                  1                  2           1
         A           2                  2                  2           1
         B           1                  1                  2           1
         B           1                  2                  2           1
         B           2                  1                  1           1
    

    现在,如果用户通过切片器或过滤器决定对 [事务序列号] 列应用过滤器,则动态更新这两个新的DAX度量值非常重要。< / p>

    在此示例中,如果用户通过应用的过滤器选择排除 [交易序列号] 3 ,则数据透视表应该更新其数据以反映新的最大值和最小值:

    ----------------------------------------------------------------------------
    Customer   |  Store  |  Transaction Sequence No |   Max eq No | Min Seq No |
    ---------------------------------------------------------------------------- 
         A           1                  1                  2           1
         A           1                  2                  2           1
         A           2                  1                  2           1
         A           2                  2                  2           1
         B           1                  1                  2           1
         B           1                  2                  2           1
         B           2                  1                  1           1
    

    我无法制定正确的DAX语法来完成此任务。

3 个答案:

答案 0 :(得分:1)

MinTSeq:=
CALCULATE(
    MIN('table'[Transaction Seq No])
    ALLSELECTED('table'[Transaction Seq No])
)

应该让你到那儿。你可以用MAX()替换min。

reading上的更多ALLSELECTED()

答案 1 :(得分:0)

简单来说,两项措施将提供正确的答案:

测量最小序列号:= CALCULATE(MIN('yourTable'[TransSeqNo]),VALUES('yourTable'[customer]))

测量最大序列号: = CALCULATE(MAX( 'yourTable'[TransSeqNo]),VALUES( 'yourTable'[顾客]))

当您将这些度量放在数据透视表的值字段中,并在Customers字段中显示Customers和Store时,您可以过滤并获得正确的结果。

修改

除非我误解了你想要做的事情,否则上述措施仍将是你问题的最后一个表格。

http://i43.tinypic.com/2j4eyaw.png

http://i44.tinypic.com/34fz5go.png

这不是你的想法吗?

答案 2 :(得分:0)

感谢aesthetic_a的回应。

不幸的是,你的DAX语句没有显示每个组的min()值,它显示了每个 [Transaction Sequence No] 值的min()值,这不是我想要的。

正如我原来的帖子(第3张表格)中所述,我需要重复与每个相关联的min()值。

然而,你的解决方案指出了我正确的方向,我能够完成我所需要的。

仅供参考,我的目的是确定哪个 [交易序列号] 值包含最低值,然后仅与 [总成本] 值相关联最低 [交易顺序号] 每组

您指出了我正确的方向,并使用以下DAX语句来满足此要求:

=countrows(filter(allselected(Table1[Transaction Sequence No]),[Sum of Transaction Sequence No](values(Table1[Transaction Sequence No])) >[Transaction Sequence No])) + 1

即使通过切片器对此维度属性应用了过滤器,此DAX语句也会动态地为每个 [事务序列号] 每组排名。

然后我创建另一个DAX度量,如果关联的Rank()值等于1,则仅返回 [总成本] 度量值。

最后,我 SUM 这个新创建的度量只会返回与第一个 [交易序列号] <相关的 [总成本] 值/ strong>基于当前在工作簿中应用的任何用户定义的过滤器(通过切片器或数据透视表过滤器)的值。

谢谢你,你指出了我正确的方向,我很感激!

小心