我在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表达式,但我不明白如何使其正常工作。
任何帮助将不胜感激!
答案 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。