日期和切片类别的运行总计-返回错误的日期

时间:2019-04-30 15:40:16

标签: powerbi dax powerbi-desktop

我需要按日期和类别显示运行总计。我应该只看到存在类别值的日期。报表用户可以使用切片器过滤类别。我的表是:

enter image description here

enter image description here

Job:

enter image description here

我的数据模型是:

enter image description here

我想写一个度量来计算Forecast.Qty和Actual.Qty的运行总计,同时还要考虑Job.Job上的切片器

因此,如果我为工作1切片,那么我需要获得:

Date      ActualQty1  ForecastQty1
01/01/19  0           25
15/02/19  2.5         25
26/02/19  2.5         33
12/03/19  13.5        33

但是我要从Dates表中获取所有日期,而不仅仅是基础表中具有Forecast.Qty或Actual.Qty值的日期

我的措施是:

ActualQty1 =
VAR a =
    CALCULATE (
        SUM ( 'Actual'[Qty] ),
        FILTER ( ALL ( Dates ), 'Dates'[Date] <= MAX ( 'Dates'[Date] ) )
    )
RETURN
    IF ( ISBLANK ( a ), 0, a )

ForecastQty1 =
VAR a =
    CALCULATE (
        SUM ( 'Forecast'[Qty] ),
        FILTER ( ALL ( Dates ), 'Dates'[Date] <= MAX ( 'Dates'[Date] ) )
    )
RETURN
    IF ( ISBLANK ( a ), 0, a )

示例PBIX在这里:

PBIX file

有什么方法可以只返回所选作业的Forecast.Qty或Actual.Qty值的那些日期?

非常感谢您的所有帮助

1 个答案:

答案 0 :(得分:1)

假设您正在寻找本年度迄今的总运行时间-如果我正确地理解了您的数据模型,则应该可以使用这种方法。

ActualQty = TOTALYTD ( SUM ( 'Actual'[Qty] ), 'DatesTable'[Date] )

编辑:与最近对问题所做的编辑相对应,如果只想返回事实表中存在的日期的值,则可以将度量包装在IF()中,如下所示:

ActualQty =
IF (
    SUM ( 'Actual'[Qty] ) + SUM ( 'Forecast'[Qty] ) = BLANK(),
    BLANK(),
    TOTALYTD ( SUM ( 'Actual'[Qty] ), 'DatesTable'[Date] )
)

这将检查日期是否具有“实际”或“预测”值,并且仅当存在至少一个值时才返回值。

编辑(Naz): 只需对其进行进一步细化,以在01/01/19上获得ActualQty为0:

ActualQty3 =

IF (
    SUM ( 'Actual'[Qty] ) + SUM ( 'Forecast'[Qty] )
        = BLANK (),
    BLANK (),
    IF (
        TOTALYTD ( SUM ( 'Actual'[Qty] ), 'Dates'[Date] ) = BLANK (),
        0,
        TOTALYTD ( SUM ( 'Actual'[Qty] ), 'Dates'[Date] )
    )
)

编辑(Naz): 刚意识到它正在使用TOTALYTD函数,我不需要,因为这不是我的要求。因此,请使用罗里(Rory)的逻辑进一步对此进行修改,以给我:

ActualQty = 
var a=
CALCULATE (
    SUM ( 'Actual'[Qty] ),
    FILTER (    ALL(Dates),'Dates'[Date]<=MAX('Dates'[Date]))
    )
RETURN
IF (
    calculate(SUM ( 'Actual'[Qty] )) + calculate(SUM ( 'Forecast'[Qty] ))
        = BLANK (),
    BLANK (),
    IF (
        a = BLANK (),
        0,
        a
    )
)