【问题标题】:Dax - Filter by value then count occurence in tableDax - 按值过滤,然后计算表中的出现次数
【发布时间】:2018-01-29 20:15:54
【问题描述】:

我正在处理一张员工表,想知道是否可以得到一些帮助。

我的数据表中有包含开始和结束日期值的行。我使用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[End of Month]) ->此值可以等于 2005 年 7 月至 2017 年 7 月之间的任何月末。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

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

有没有人知道如何创建一个度量来计算Empl IDMgr ID 中出现的次数?理想情况下,如果我在 Power BI 中创建视觉对象并基于Empl Attr ="A" 进行过滤,则生成的度量值能否为我提供result = 3 -> empl id“1”在 mgr id 列中出现 3 次。

我需要这是一个度量而不是计算列,以便我可以随时间推移对结果进行趋势分析(趋势图 X 轴上的月末)。

感谢您的帮助,如果您有任何问题,请告诉我!

【问题讨论】:

    标签: filter powerbi dax measure


    【解决方案1】:

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

    我觉得您的核心问题是尝试根据表达式的评估(开始日期和结束日期之间的月份结束)在两个表之间创建关系。根据我的经验,解决此问题的最简单方法是 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]
        )
    )
    

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

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

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

    我知道您要求采取措施,但请耐心等待,因为我相信这会让您得到您想要的。使用此公式在结果表中添加一个新列。

    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])
        )
    )
    

    此时,我将从结果表和您想要的任何其他字段中隐藏 Emp ID 和 End of Month。从那里,制作你的视觉效果。例如,您说您想显示一段时间内的直接下属数量,所以我制作了这个简单的折线图和卡片。

    【讨论】:

    • 感谢乔的回复。我想知道是否可以将其作为度量而不是计算列。我想在 X 轴上随着时间的推移(Meas.MaxMonth)趋势管理人员 ID 计数。对于 Meas.MaxMonth 的每个可能值,我想过滤我的数据表并计算新计数。让我知道更多信息是否会有所帮助。我真的很感激!
    • Emp ID,Emp Attr,Mgr 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 - “对于 Meas.MaxMonth 的每个可能值”是什么意思?在您的问题中,您说这是一种衡量标准;你能用计算它的代码更新你的问题吗?它也可能有助于使用更完整的示例数据更新您的问题(与 cmets 不同)。
    • 抱歉让乔感到困惑。我刚刚更新了原帖。非常感谢您的帮助!
    猜你喜欢
    • 2017-07-15
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多