1

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

OPPORTUNITY_ID    
1                   
2                
3                 
3                 
3                  
4                 
4                 
5                 

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

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

4 回答 4

0

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

SELECT    
ROW_NUMBER() OVER(PARTITION BY co.[OpportunityID] ORDER BY co.[OpportunityID] DESC) AS Row
于 2013-11-04T09:55:09.333 回答
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 中的命名字段进行分组。SUMMARIZE() 定义的表如下所示:

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

然后 SUMX() 将遍历该结果表中的每一行并评估每一行上 [Opportunity_Value] 的值。这些将累积成一个总和,总共为 825。

于 2015-12-29T22:30:50.920 回答
0

在 DAX 中对此的正确衡量标准是

DistinctOpportunities:=DISTINCTCOUNT([OpportunityID])
于 2015-08-10T16:14:26.500 回答
0

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

=COUNTROWS(
    FILTER(
       'OPPORTUNITYTABLE',
       'OPPORTUNITYTABLE'[OPPORTUNITY_ID]=                    
          EARLIER(
             'OPPORTUNITYTABLE'[OPPORTUNITY_ID ])
    )
)
于 2015-12-29T19:36:00.697 回答