2017-08-21 90 views
0

我正在使用员工表,并想知道我是否可以得到一些帮助。Dax - 按值过滤然后计算表

我的数据表中有开始和结束日期值的行。我使用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 [月完]) - >该值可以等于2005年7月和2017年七月之间EOM任何月底是一个日期表,一排每个月底 - 2005年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 

雇主ID是唯一的员工编号。 Mgr ID在所需的时间点(Measure.LastMonth)引用员工经理的Empl ID。 Emp Attr是员工的属性,例如级别。

有没有人有任何想法如何创建一个措施,将计数发生EmplIDMgrID?理想情况下,如果我在Power BI中创建视觉效果并根据Empl Attr ="A"进行过滤,那么结果度量值可以给我result = 3 - > mgr id列中出现3次empl id“1”。

我需要这是一个措施,而不是计算列,这样我可以随时间(在趋势视觉上X轴月末)趋势的结果。

感谢您的帮助,让我知道,如果你有任何问题!

回答

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

我知道你问的措施,但忍耐一下,因为我确信这会得到你想要的东西。使用此公式将新列添加到结果表中。

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

在这一点上,我会隐藏结果表和任何其他领域(S),你的愿望的Emp ID和月末。从那里,制作你的视觉效果。例如,你说你想要显示直接的报告数量,所以我制作了这个简单的折线图和卡片。

Results

+0

感谢您的回应乔。我想知道是否可以将此作为衡量标准而不是计算列。我想在X轴上随时间推移mgr id计数(Meas.MaxMonth)。对于Meas.MaxMonth的每个可能的值,我想筛选我的数据表并计算新的计数。让我知道如果更多的信息会有所帮助。对此,我真的非常感激! – user3620704

+0

雇主ID,雇主Attr,经理ID,开始日期,结束日期 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 – user3620704

+0

@ user3620704 - 对于每个可能的Meas值,你是什么意思.MaxMonth“?在你的问题中,你说这是一种措施;你能用计算它的代码更新你的问题吗?这也可能有助于用更完整的样本数据更新您的问题(而不是评论)。 – Joe