2017-03-16 180 views
0

问题的简短版本:如何根据计算的度量创建排名?在DAX中排列度量值(而不是列值)?

问题背景: 我有一个表/查询产生许多行每一位员工,与具有time taken值的每一行。

我想计算对各employee的平均时间,然后呈现表的行的每个employee,可见其name,平均time taken,和rank(基于time taken)。

做的第一部分,我创建了一个名为AverageTimeLength并设置它等于测量:

AverageTimeLength = Average(Table_name[Column_name]) 

然后我编写如下:

AverageTimeLength_employee = CALCULATE([AverageTimeLength], GROUPBY(Table_name, Table_name[EmployeeName])) 

这是两个措施;我能够在我创建的新表格图表中插入第二个表格,但不幸的是,我无法在其上使用RANKX(),因为度量值不是来自列。如果我尝试创建一个从度量派生的列(即,column_name = [AverageTimeLength_employee]),我会收到错误指责循环推理的column_name

我想做的事似乎应该很简单;有没有人知道我可以创建一个简单的排名参数,排序度量值?

回答

1

您可以创建Average措施,按如下方式使用它在Rank措施:

Average = AVERAGE([Time taken]) 

Rank = IF (
    HASONEVALUE (Table_Name[Name]), 
    RANKX (ALL (Table_Name[Name]), [Average]) 
) 

希望它能帮助。

+0

它绝对有帮助,谢谢。如果你不介意的话,我还有一些关于RANKX()函数的问题:(1)如果两个雇员之间有联系,我怎么能插入一个联络中断器;(2)我注意到等级如果没有其他我已经放置的过滤器,则完美地工作;我如何让排名仅考虑被过滤的条目? – daOnlyBG

+0

@daOnlyBG,(1)可以自定义等级标准,既可以创建计算列并在rankx函数中使用它,也可以使用rankx _value_参数,而无需知道确定断路器的逻辑,我们可以说。 (2)通过'ALLSELECTED(Table_Name [Name])'更改'ALL(Table_Name [Name])',可以使过滤变得更加敏感。 –

+0

我的确有一个类似“员工成功”的专栏。这将成为决定因素 - 我必须看看如何在RANKX()函数中使用它。 – daOnlyBG