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