DAX - 计算事件

时间:2013-10-30 16:11:19

标签: powerpivot dax

我在PowerPivot数据模型中有一个简单的OpportunityID列表,如下所示:

OPPORTUNITY_ID    
1                   
2                
3                 
3                 
3                  
4                 
4                 
5                 

我想在CalculatedColumn中添加一个DAX表达式,用于计算每个OpportunityID的出现次数,如下所示:

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

因此,在多次出现OpportunityID的情况下,计数会累积显示,例如: 1,2,3等。

我尝试了很多方法,但却无法发挥作用。我认为答案可能在于RANKX表达式,但我不明白如何使其正常工作。

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:0)

我无法用DAX解决这个问题,所以最后我将这条SQL行添加到源数据查询中

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

答案 1 :(得分:0)

DAX中适当的衡量标准是

DistinctOpportunities:=DISTINCTCOUNT([OpportunityID])

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

没有DAX等效于SQL ROW_NUMBER()窗口函数。没有其他领域可以确定地打破"领带"在相同的行之间,您无法获得相同的结果。

话虽如此,在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中的指定字段进行分组。 SUMMARIZE()定义的表格如下所示:

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

然后,SUMX()将迭代该结果表中的每一行,并评估每行上[Opportunity_Value]的值。这些将累积为一笔,总计为825。