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

Power BI Visual use one side of date slicer

我有一个视觉对象需要显示 6 周的趋势趋势,但是,报告中的其他视觉对象基于自定义范围。所以在查看报表时,有一个日期切片器,它有一个开始日期和一个结束日期。

我需要做的是创建一个 measure/visual 来显示基于在该切片器中编辑的最后日期 select 的 6 周趋势。因此,即使您在日期过滤器中 select 2 周,视觉对象也会显示最近 6 周。

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

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

关于如何让它工作的任何想法?

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

两张桌子

销售额

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

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

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

提前感谢您的帮助!

我猜你的衡量标准是对所选日期范围和六周范围的交集求和。

如果您希望始终获得六周,则应通过将 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 相关的第二个日历 table。

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