2017-08-21 128 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