获取计算列中最常见的项目

时间:2015-07-10 20:46:04

标签: powerpivot dax

我已经想出如何在度量中完成以下等效操作,但我需要将它用作Power View图表中的图例,因此需要在计算列中完成。从计算字段到计算列的上下文变化完全搞砸了我。

在我的数据模型中,我有一份工作申请表。每条记录都有一个专业和一个适用于该公司的地址。每个专业都可以在表格中多次出现。

ApplicationTable:

  

ApplicationID |名称|专业|城市|状态

     
      
  1. 32911 | Joe Bob |工程|迈阿密|佛罗里达
  2.   
  3. 89547 | Ralph Kramden |大喊|纽约|纽约
  4.   

我还有一张州表。它只有州名和邮政缩写的列。我需要创建一个具有最常出现的特殊状态的列。

如果我可以将此作为计算字段,我会在几个小时前完成。我刚刚使用了一个非常简单的topn应用程序:

热门专业:= FIRSTNONBLANK(TOPN(3,VALUES(ApplicationTable [专业]),[应用ID计数],ApplicationTable [专业])

我使用FIRSTNONBLANK和TOPN(3 ...),因为有些州只有一些应用程序,所以每个专业只出现一次。在我的应用程序中,可以在这些情况下选择列表中的第一个专业。

无论如何,这个公式很酷,但在这里没有帮助。那么如何在计算列中执行等效操作,以便将其用作键或过滤器?具体来说,我认为我需要在StateTable中执行此操作,为我提供ApplicationTable中每个州最常出现的专业名称。想法?

1 个答案:

答案 0 :(得分:5)

首先,创建一个计算专业的基本措施:

SpecialtyCount :=
COUNTA ( ApplicationTable[Specialty] )

接下来,创建一个度量来找出最高的单一专业(在上下文中):

MostSpecial :=
MAXX ( VALUES ( ApplicationTable[Specialty] ), [SpecialtyCount] )

最后,将计算列添加到States表中:

=
FIRSTNONBLANK (
    ApplicationTable[Specialty],
    IF (
        [SpecialtyCount]
            = CALCULATE ( [MostSpecial], VALUES ( ApplicationTable[Speciality] ) ),
        1,
        BLANK ()
    )
)

将此作为计算列放置,我们的过滤器上下文是每个状态。因此,首先PowerPivot会将ApplicationTable过滤为州内的应用程序,然后使用FIRSTNONBLANK()来迭代每个ApplicationTable[Specialty],计算其SpecialtyCount并查看是否等于该州内的MostSpecial计数。如果是这样,那就不是空白,这是它返回的专长。