【问题标题】:Power BI Visual use one side of date slicerPower BI Visual 使用日期切片器的一侧
【发布时间】:2019-05-04 04:17:05
【问题描述】:

我有一个视觉对象需要显示 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

我用来获取开始日期的 DAX 语句(从所选的最大日期算起 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])
    )
)

提前感谢您的帮助!

【问题讨论】:

  • 请发布您当前无法使用的代码。
  • 感谢您的建议,我已经添加了我正在处理的代码。但是,我认为我遇到的问题也与我设置的切片器有关。
  • 您的Sales 表没有日期列吗?
  • 是...抱歉...忘记添加

标签: powerbi dax powerbi-desktop


【解决方案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
    )
)

【讨论】:

  • 谢谢帮忙,不过,我这里有一个误会是的,销售表有日期,我只是忘记添加了。我在页面上的大部分视觉效果上都有一个日期切片器。我基本上需要在切片器中设置最大日期,但不是这个视觉对象的第一个日期。我有一个像这里一样的 DAX 公式,如果你在切片器中选择 6 周,它就可以工作。发生的情况是,如果您在切片器上选择少于 6 周,则只有切片器中选择的范围会出现在视觉对象上。如果您从切片器中排除视觉对象,则最大日期不是切片器中的最后一天
  • 所以我认为我需要做的是找到一种方法来在 DAX 的切片器中找到最大日期,即使切片器未链接到视觉对象。
  • 啊,我明白了。我给出的测量值将给出正确的 6 周 ,但您的问题是让视觉范围显示 6 周而不是所选范围?
  • 正确...所以最终用户选择一个日期范围(1-2 周的任何地方),我需要根据所选范围内的最后一天显示一个 6 周的趋势图。因此,为了做到这一点,我需要找到一种方法来查看切片器中选择的最大日期以使用,并使视觉效果独立于所述切片器。换言之,如果您选择上周一至上周五,视觉效果将显示上周五结束的 6 周趋势。
  • 当您希望视觉对象独立于切片器但仍引用它时,通常需要创建一个新表。请看我上面的编辑。
猜你喜欢
  • 2021-02-24
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多