Power BI Visual使用日期切片器的一侧

时间:2018-12-02 20:05:37

标签: powerbi dax powerbi-desktop

我有一个视觉效果,需要显示6周的趋势,但是,报告上的其他视觉效果是基于自定义范围的。因此,在查看报告时,有一个日期切片器,其中包含开始日期和结束日期。

我需要做的是创建一个度量/视觉效果,以该切片器中选择的最后日期为基础,显示6周趋势。因此,即使您在日期过滤器中选择了2周,视觉效果也会显示最近6周。

最终用户选择一个日期范围(1-2周中的任何时间),我需要根据所选范围中的最后一天显示6周趋势图。因此,为了做到这一点,我需要找到一种方法来查看在切片器中选择使用的最大日期,并使图像独立于所述切片器。换句话说,如果您选择“上周一”到“上周五”,则视觉效果将显示到上周五为止的6周趋势。

所以我知道我可以使用DAX函数LASTDATE()来获取切片器中的最后日期,然后从中减去6周。我遇到的问题是,当我创建视觉效果时,切片器上的两个日期都将其强制为选定的日期范围(而不是6周)。当我更改视觉对象的视觉交互时,视觉对象中的最后日期不再是选定的日期。

关于如何使它起作用的任何想法?

编辑:这是我正在使用的代码:

两个表

销售

Sales ID | Customer ID | Qty  | Sales Date
   1            A         2   | 12/2/2018
   2            A         11  | 12/2/2018
   3            B         5   | 11/28/2018
   4            B         7   | 11/28/2018
   5            C         10  | 11/27/2018
   6            D         20  | 11/27/2018
   7            E         9   | 11/25/2018

日历

    Date    |  Weeknum
12/2/2018         49
12/1/2018         48
11/30/2018        48
11/29/2018        48
11/28/2018        48
11/27/2018        48
11/26/2018        48
11/25/2018        47
11/24/2018        47
...And so on

我用来获取开始日期(从所选的最大日期起6周)的DAX语句:

Six Weeks From Last Date Selected =
DATEADD(LASTDATE('Calendar'[Date]), -42, DAY) 

六周销售量:

6 Weeks Sales =
CALCULATE(
    SUM('Sales'[Sales]),
    DATESBETWEEN(
        'Calendar'[Date],
        [Six Weeks From Last Date Selected],
        LASTDATE('Calendar'[Date])
    )
)

感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

我猜你的度量是在所选日期范围和六个星期范围的交集上求和的。

如果您希望始终有六个星期的时间,则应通过在ALL('Calendar'[Date])函数中添加CALCULATE来删除日期列上的过滤器上下文:

6 Weeks Sales =
CALCULATE(
    SUM('Sales'[Sales]),
    ALL('Calendar'[Date]),
    DATESBETWEEN(
        'Calendar'[Date],
        [Six Weeks From Last Date Selected],
        LASTDATE('Calendar'[Date])
    )
)

编辑:以上内容将为您提供6周的销售价值,而不是您所追求的。

要执行所需的操作,您需要创建与Sales相关的第二个日历表。

Cal2 = 'Calendar'

为视觉效果使用Cal2[Date]而不是'Calendar'[Date],并写出删除'Calendar'过滤条件并改为6周过滤条件的措施。例如:

6 Weeks Sales = 
VAR EndDate = LASTDATE('Calendar'[Date])
VAR StartDate = EndDate - 42
VAR CurrDate = SELECTEDVALUE(Cal2[Date])
RETURN
IF( StartDate < CurrDate && CurrDate <= EndDate,
    CALCULATE(
        SUM(Sales[Qty]),
        ALL('Calendar')
    ),
    BLANK()
)

您也可以使用过滤器来代替:

6 Weeks Sales = 
VAR EndDate = LASTDATE('Calendar'[Date])
VAR StartDate = EndDate - 42
RETURN
CALCULATE(
    SUM(Sales[Qty]),
    ALL('Calendar'[Date]),
    FILTER(
        Cal2,
        StartDate < Cal2[Date] && Cal2[Date] <= EndDate
    )
)