2013-10-30 68 views
1

我有OpportunityIDs的一个简单的列表在这样的PowerPivot数据模型:DAX - 计数发生

OPPORTUNITY_ID  
1     
2     
3     
3     
3     
4     
4     
5     

而且我想在计数每OpportunityID的发生,这样的CalculatedColumn添加DAX表达式:

OPPORTUNITY_ID COUNT 
1     1  
2     1 
3     1 
3     2 
3     3  
4     1 
4     2 
5     1 

因此,如果有多个OpportunityID出现次数,计数将累计显示eg 1,2,3等

我尝试了很多方法来做到这一点,但不能得到任何工作。我认为答案可能在于RANKX表达式,但我不明白如何让它工作。

任何帮助将不胜感激!

+0

您需要'CALCULATE','FILTER'和'EARLIER'的组合(最后一个允许您与其他行进行比较)。以此为例:http://sqlblog.com/blogs/alberto_ferrari/archive/2011/03/08/thinking-in-dax-counting-products-in-the-current-status-with-powerpivot.aspx –

+0

为什么你需要这个计算列而不是计算量? – mmarie

+0

这是一个解决方法 - 我真正想要的是CALCULATE(SUM(仅在唯一记录上,但由于DISTINCT函数没有产生期望的结果,所以我的想法是对计数为1的任何事物使用CALCULATE – user1811852

回答

0

我无法DAX所以最后我加入这个SQL线到源数据查询算出这个

SELECT  
ROW_NUMBER() OVER(PARTITION BY co.[OpportunityID] ORDER BY co.[OpportunityID] DESC) AS Row 
0

这在DAX正确的措施是

DistinctOpportunities:=DISTINCTCOUNT([OpportunityID]) 
0

尝试这个: 在DAX中,COUNTROWS函数将计算传递给它的表中的所有行。使用FILTER功能,创建OPPORTUNITYTABLE的一个子集。 EARLIER函数为列参数提供行上下文;在这种情况下调用表中的当前行。因此,以下表达式将返回OPPORTUNITYTABLE中OPPORTUNITYTABLE [OPPORTUNITY_ID]与当前行相匹配的行数。

=COUNTROWS(
    FILTER(
     'OPPORTUNITYTABLE', 
     'OPPORTUNITYTABLE'[OPPORTUNITY_ID]=      
      EARLIER(
      'OPPORTUNITYTABLE'[OPPORTUNITY_ID ]) 
    ) 
) 
0

没有与SQL ROW_NUMBER()窗口函数等效的DAX。如果没有其他领域确定性地打破相同行之间的“关系”,则无法达到相同的结果。

这就是说,只能在DAX中总结唯一的实例。这里的问题陈述不是“我需要获得与SQL的ROW_NUMBER()等效”,而是“我只需求和唯一的求和”。前者是帮助实现后者的唯一途径。

在DAX中,我们可以使用SUMMARIZE()按表中的任意字段进行分组。我们可以使用SUMX()遍历一个任意的表并累加到一个表达式中,为每一行计算一个表达式。

因此,如果你有一个表

Opportunity_ID | Opportunity_Value 
    1     100 
    2     150 
    3     200 
    3     200 
    3     200 
    4     75 
    4     75 
    5     300 

然后我们可以使用这一措施仅获取每个不同值的总和Opportunity_ID

UniqueSum:= 
SUMX(
    SUMMARIZE(
     FactOpportunity 
     ,FactOpportunity[Opportunity_ID] 
     ,FactOpportunity[Opportunity_Value] 
    ) 
    ,FactOpportunity[Opportunity_Value] 
) 

在这里,我们通过倒是组FactOpportunity中的命名字段。 )由总结(限定的表将如下所示:

Opportunity_ID | Opportunity_Value 
    1     100 
    2     150 
    3     200 
    4     75 
    5     300 

的SUMX(),然后将遍历在结果表中的每一行,并评估在每一行上的[Opportunity_Value]的值。这些将被累计为一笔总和,总共为825.