在Power BI中滚动6个月的未清合同

时间:2019-11-12 19:31:56

标签: powerbi dax

我需要显示在过去6个月中,我们每个月有多少份有效合同。我正在尝试找出一种显示此方法的方法。这是我的桌子

Machine Enrollment# StartDate   EndDate
A       1           1/2/2016    6/18/2019
B       2           12/15/2012  5/12/2034
C       3           3/25/2019   4/25/2021
D       4           1/7/2000    7/15/2019
A       5           10/1/2019   10/1/2025

我有数千行。我希望能够显示6个月滚动合同的可视化。所以在这个小例子中,它看起来像这样

Apr-19  June-19  Jul-19  Aug-19  Sep-19  Oct-19
4       4        3       2       2       3

我什至从哪里开始创建它?过去,我们只是查看了当月的数字,并将这些结果添加到静态表的末尾,并从6个月前删除了该列。我已被分配在Power BI中自动执行此报告。我猜想我需要创建一个列/度量来查看EndDate并将其与可视化视图(即:Aug-19)中的过滤日期进行比较,并确定当时是否打开了合同。但是我不知道。任何帮助深表感谢。预先感谢!

2 个答案:

答案 0 :(得分:0)

我想我找到了您所需要的解决方案。您可能会找到示例pbix文件here

1。创建日历表

需要一个日历表来过滤/切片时间段。日历表必须具有唯一的 Date 列和可选列,例如 Year Quarter Month ,具体取决于您在分析中需要使用的周期单位。

可以很容易地将日历表创建为DAX计算表。这是此用例中所需的最小日历表的示例。

Calendar = 
ADDCOLUMNS(
    CALENDAR( MIN( Contracts[StartDate] ), MAX( Contracts[EndDate] ) ),
    "Year Month", FORMAT( [Date], "mmm-yy" ),
    "Year Month Number", YEAR( [Date] ) * 100 + MONTH( [Date] )
)

2。创建一种衡量未结合同数量的方法

计算并显示在报告中的每个数字都必须定义为度量

让我们考虑一下5月19日的数字。当前过滤器上下文包括日历表中2019年5月1日至2019年5月31日之间的所有31个日期。在这种情况下,我们如何考虑未结合同?如果合同在2019-05-31之后开始,则它没有打开。如果合同在2019-05-01之前结束,则该合同也未开放。因此,未平仓合同符合此条件。

  • 于2019-05-31
  • 或之前开始
  • 结束于2019-05-01

下面是度量定义,用于根据此条件计算合同数量。

# Open Contracts = 
VAR MinDate = MIN( 'Calendar'[Date] )
VAR MaxDate = MAX( 'Calendar'[Date] )
RETURN COUNTROWS(
    FILTER(
        Contracts,
        Contracts[StartDate] <= MaxDate
            && Contracts[EndDate] >= MinDate
    )
)

3。添加最近6个月的动态过滤器

如果我的理解正确,那么要求是显示最近6个日历月的每月数量,不包括。我找不到一个简单的方法。我的解决方案可能包含一些骇人听闻的气味。

Power BI没有基于相对于现在的日历月的内置过滤器支持。我们需要建立一个自定义逻辑来实现这一目标。我通过创建一个指示当前过滤器上下文是否在所需时间段内的度量来做到这一点。此度量是一个标志,如果过滤器上下文是最近6个日历月中包含的单个日历月,则返回1,否则返回BLANK。

__Last6MonthFlag = 
VAR YearMonths = CALCULATETABLE(
    VALUES( 'Calendar'[Year Month] ),
    REMOVEFILTERS( 'Calendar'[Year Month] ),
    'Calendar'[Date] > EOMONTH( TODAY(), -7 )
        && 'Calendar'[Date] <= EOMONTH( TODAY(), -1 )
)
RETURN IF(
    HASONEVALUE( 'Calendar'[Year Month] )
        && SELECTEDVALUE( 'Calendar'[Year Month] ) IN YearMonths,
    1
)

然后我像这样在视觉过滤器中使用此度量。

答案 1 :(得分:0)

您需要执行以下活动来满足您的要求。

  1. 定义一个日历表,其中包含报表的所有日期。定义每月的计算列。 Month-Year = FORMAT('CalendarTable'[Date], "MM-YYYY")

  2. 您可以定义一个计算得出的度量,如果合同的终止日期距当前日期不足6个月,则该度量将返回1(可以使用TODAY()函数)。此功能将有助于基于当前日期进行滚动计算。否则,此计算得出的度量将返回NULL并将它们求和。

  3. 您可以拖动步骤1中定义的“月-年”计算列。 1,以列为轴。您可以将步骤2中定义的计算得出的度量拖到值部分。默认情况下,PowerBI控件会过滤掉NULL值。因此,当您使用在步骤号中定义的计算得出的度量时。 2,您将仅获得最近6个月的值。由于该计算是基于TODAY()定义的,因此它将是一个正在运行的计算。