Dax - 按值过滤,然后计算表中的出现次数

时间:2017-08-21 17:08:42

标签: filter powerbi dax measure

我正在使用员工表,并且想知道我是否能得到一些帮助。

我的数据表包含具有开始日期和结束日期值的行。我使用Filter(data table, [start date]<=[Measure.MaxMonth]&&[end date]>=[Measure.MaxMonth]过滤掉这些行。 [Measure.MaxMonth]是一个位于断开连接的日期表上的度量,其功能类似于参数。

这是我一直在测试的公式,但尚未得到预期的结果:

Measure.DirectReports = CALCULATE(COUNTROWS(Data Table),filter(Data Table,Data Table[Mgr ID]=Data Table[Emp ID]&&Data Table[Start Date]<=[Meas.LastMonth]&&Data Table[End Date]>=[Meas.LastMonth]))

Measure.LastMonth = max(EOM [月末]) - &gt;此值可以等于2005年7月到2017年7月之间的任何月末.EOM是一个日期表,每个月末有一行 - 7/31 / 2005年8月31日,2017年7月31日

这给了我一张像这样的结构表:

Emp ID,Emp Attr,Mgr ID,Start Date,End Date
1,B,4,10/1/2013,10/6/2013
1,B,4,10/7/2013,12/29/2013
1,B,4,12/30/2013,12/28/2014
1,B,8,12/29/2014,10/4/2015
1,B,8,10/5/2015,12/27/2015
1,B,12,12/28/2015,5/15/2016
1,B,12,5/16/2016,10/2/2016
1,B,12,10/3/2016,12/25/2016
2,B,4,12/1/2014,12/28/2014
2,B,4,12/29/2014,12/27/2015
2,B,4,12/28/2015,2/7/2016
2,B,4,2/8/2016,3/6/2016
2,B,8,3/7/2016,6/1/2016
3,B,6,7/1/2015,12/27/2015
3,B,8,12/28/2015,6/30/2016
3,B,6,7/1/2016,9/4/2016
3,B,6,9/5/2016,12/25/2016
3,B,6,12/26/2016,5/7/2017
3,B,4,5/8/2017,6/11/2017
3,B,4,6/12/2017,6/25/2017
3,B,4,6/26/2017,7/9/2017
3,B,19,7/10/2017,12/31/9999
4,A,,7/1/1996,4/2/2006
4,A,,4/3/2006,12/31/2007
4,A,,1/1/2008,5/22/2011
4,A,,5/23/2011,11/16/2014
4,A,,11/17/2014,6/11/2017
4,A,,6/12/2017,6/25/2017
4,A,,6/26/2017,12/31/9999
5,B,4,11/8/2010,1/2/2011
5,B,4,1/3/2011,5/22/2011
5,B,4,5/23/2011,1/1/2012
5,B,4,1/2/2012,5/31/2012
5,B,4,6/1/2012,7/1/2012
5,B,4,7/2/2012,9/7/2012
6,B,4,1/3/2011,5/22/2011
6,B,4,5/23/2011,9/5/2011
6,B,4,9/6/2011,1/1/2012
6,B,4,1/2/2012,12/30/2012
6,B,4,12/31/2012,12/29/2013
6,B,4,12/30/2013,5/18/2014
6,B,4,5/19/2014,11/16/2014
6,B,4,11/17/2014,12/28/2014
6,B,4,12/29/2014,3/22/2015
6,B,4,3/23/2015,12/27/2015
6,B,4,12/28/2015,3/6/2016
6,B,4,3/7/2016,8/21/2016
6,B,4,8/22/2016,10/30/2016
6,B,4,10/31/2016,12/25/2016
6,B,4,12/26/2016,1/8/2017
6,B,4,1/9/2017,5/7/2017
6,B,4,5/8/2017,6/11/2017
6,B,4,6/12/2017,6/25/2017
6,B,4,6/26/2017,12/31/9999
7,B,4,1/2/2012,12/30/2012
7,B,4,12/31/2012,12/29/2013
7,B,4,12/30/2013,5/18/2014
7,B,4,5/19/2014,11/16/2014
7,B,4,11/17/2014,12/28/2014
7,B,4,12/29/2014,3/8/2015
7,B,4,3/9/2015,1/18/2016
7,B,4,1/19/2016,2/19/2016
8,B,6,12/31/2012,11/3/2013
8,B,4,11/4/2013,12/29/2013
8,B,4,12/30/2013,1/26/2014
8,B,4,1/27/2014,5/18/2014
8,B,4,5/19/2014,11/16/2014
8,B,4,11/17/2014,12/28/2014
8,B,4,12/29/2014,3/22/2015
8,B,4,3/23/2015,12/27/2015
8,B,4,12/28/2015,7/1/2016
10,B,4,10/3/2011,12/18/2011
10,B,4,12/19/2011,12/30/2012
10,B,4,12/31/2012,2/23/2013
10,B,4,2/24/2013,11/20/2014
11,B,4,2/1/2011,2/27/2011
11,B,4,2/28/2011,5/1/2011
12,B,4,9/15/2012,12/31/2012
12,B,4,9/15/2012,12/31/2012
12,B,4,1/1/2013,12/31/2013
12,B,4,1/1/2013,4/30/2014
12,B,4,1/1/2014,4/30/2014
12,B,4,5/1/2014,11/16/2014
12,B,4,5/1/2014,12/28/2014
12,B,4,11/17/2014,11/30/2014
12,B,4,12/1/2014,12/28/2014
12,B,4,12/29/2014,12/27/2015
12,B,4,12/29/2014,12/30/2016
12,B,4,12/28/2015,12/30/2016
12,B,4,12/31/2016,12/31/2016
12,B,4,1/1/2017,6/11/2017
12,B,4,6/12/2017,6/25/2017
12,B,4,6/26/2017,7/9/2017
12,B,19,7/10/2017,12/31/9999
13,B,4,12/28/2015,9/4/2016
13,B,4,9/5/2016,12/25/2016
13,B,4,12/26/2016,6/11/2017
13,B,4,6/12/2017,6/25/2017
13,B,4,6/26/2017,12/31/9999
14,B,4,1/12/2015,12/27/2015
14,B,4,12/28/2015,12/25/2016
14,B,4,12/26/2016,6/11/2017
14,B,4,6/12/2017,6/25/2017
14,B,4,6/26/2017,12/31/9999
16,B,4,9/14/2015,10/19/2015
17,B,6,8/22/2016,12/25/2016
17,B,6,12/26/2016,5/7/2017
17,B,4,5/8/2017,6/11/2017
17,B,4,6/12/2017,6/25/2017
17,B,4,6/26/2017,7/9/2017
17,B,19,7/10/2017,12/31/9999
18,B,6,9/12/2016,12/25/2016
18,B,6,12/26/2016,5/7/2017
18,B,13,5/8/2017,6/11/2017
18,B,13,6/12/2017,6/25/2017
18,B,13,6/26/2017,7/9/2017
18,B,19,7/10/2017,12/31/9999
19,B,4,7/10/2017,12/31/9999

Empl ID是一个唯一的员工编号。经理ID在期望的时间点(Measure.LastMonth)引用雇员经理的Empl ID。 Emp Attr是员工的一个属性,例如level。

有没有人对如何创建一个衡量Empl IDMgr ID出现次数的指标有任何想法?理想情况下,如果我在Power BI中创建视觉效果并根据Empl Attr ="A"进行过滤,则生成的度量值是否可以为result = 3 - &gt; empl id&#34; 1&#34;在mgr id列中出现3次。

我需要将它作为度量而不是计算列,以便我可以随时间推移结果(在趋势视觉中X轴上的月末)。

感谢您的帮助,如果您有任何疑问,请与我们联系!

1 个答案:

答案 0 :(得分:0)

修改 - 由于有关问题的新信息,基本上更新了整个答案。

我觉得你的核心问题是尝试根据表达式的评估(开始日期和结束日期之间的月末)创建两个表之间的关系。根据我的经验,解决此问题的最简单方法是CROSSJOIN这两个表,然后根据您想要的表达式对其进行过滤。为此,我用这个公式创建了一个新表。

Results = DISTINCT(
    SELECTCOLUMNS(
        FILTER(
            CROSSJOIN('Data Table', EOM),
            'Data Table'[Start Date] <= EOM[End of Month] && 'Data Table'[End Date] >= EOM[End of Month]
        ),
        "Emp ID", [Emp ID],
        "End of Month", [End of Month]
    )
)

Crossjoin

在最终建立关系之前,我们需要一个唯一的员工ID列表。通过使用此公式创建新表,可以轻松获得这一点。

Employees = DISTINCT(
    SELECTCOLUMNS('Data Table',
        "Emp ID", 'Data Table'[Emp ID]
    )
)

Employees

从这里开始,在所有表之间创建关系,如下图所示。

Relationships

我知道你要求采取措施,但请耐心等待,因为我相信这会让你得到你想要的东西。使用此公式将新列添加到Results表中。

DirectReports = CALCULATE(
    COUNTROWS('Data Table'),
    FILTER(ALL('Data Table'),
        'Data Table'[Mgr ID] = EARLIER(Results[Emp ID]) &&
        'Data Table'[Start Date] <= EARLIER(Results[End of Month]) &&
        'Data Table'[End Date] >= EARLIER(Results[End of Month])
    )
)

Count Column

此时,我会在结果表和您想要的任何其他字段中隐藏Emp ID和月末。从那里,制作你的视觉效果。例如,您说您希望显示直接报告计数,因此我制作了这个简单的折线图和卡片。

Results