Sql 透视表中的从属和绑定筛选器

Sql 透视表中的从属和绑定筛选器,sql,excel,pivot,pivot-table,Sql,Excel,Pivot,Pivot Table,在Sheet1中,我有如下原始数据: event_name | country | event_datetime | event_day | vertical | some_metric fun day 2018 | uk | 1/1/2018 22:00 | 1/1/2018 | something | 100 fun day 2018 | uk | 1/1/2018 23:00 | 1/1/2018 | something | 200 fun day 2018 | uk | 2/1/2018

在Sheet1中,我有如下原始数据:

event_name | country | event_datetime | event_day | vertical | some_metric
fun day 2018 | uk | 1/1/2018 22:00 | 1/1/2018 | something | 100
fun day 2018 | uk | 1/1/2018 23:00 | 1/1/2018 | something | 200
fun day 2018 | uk | 2/1/2018 00:00 | 2/1/2018 | something | 300
fun day 2017 | uk | 1/1/2017 22:00 | 1/1/2017 | something | 400
fun day 2017 | uk | 1/1/2017 23:00 | 1/1/2017 | something | 500
fun day 2017 | uk | 2/1/2017 00:00 | 2/1/2017 | something | 600
事件日期时间四舍五入到最接近的小时。事件可以跨多天运行

在Sheet2中,我使用所有这些数据创建了一个透视表。过滤器包括事件名称、国家/地区、事件日期时间;第一列是垂直的,值是sum(某些度量)


是否有办法使显示的日期取决于所选的活动名称?例如,如果我选择2018年娱乐日,我只希望与该活动对应的日期显示在“活动日期时间过滤器”下拉列表中(即2018年娱乐日仅显示2018年1月1日和2018年2月1日,所有相应的时间都应显示出来)。目前,任何活动的所有日期都会显示出来

是否有办法“分组”活动的日期时间,以便如果活动是36小时,我可以选择该活动的24小时/30小时视图?例如,对于2018年欢乐日,24小时视图可以是日期为2018年1月1日的任何视图,30小时视图可以是日期为2018年1月1日和2018年2月1日前6小时的任何视图


我正在Mac版本16.14.1上使用Microsoft Excel。如果我可以对原始数据本身进行结构更改,这将使pivot中的1/2变得更简单,请告诉我,我可以编辑生成此数据的SQL。

是否有方法使[在筛选器下拉列表中]显示的日期更简单取决于所选的事件名称?否。但请尝试使用切片器……它们可以提供您想要的效果,在切片器顶部显示“可选择”的内容。您可能需要使用这些设置

是否有办法“分组”事件\u datetime[按经过的时间]?是的,但这将要求您在数据中添加另一列以显示经过的时间,这样您就可以在该字段上设置小于的筛选器。但因为这只适用于行字段,所以需要使用第二个隐藏的数据透视表和切片器来解决问题。我在这个网站的某个地方有一个答案,今天晚些时候我会尝试找到并链接到这个答案

考虑到您的需求,我认为您应该只使用一个简单的表(而不是数据透视表)来过滤和显示这些数据。希望您拥有的mac版本能够像最新版本的Excel一样,将切片器放在一张表上

您可以通过添加两个新列和两个参数单元格来处理时间分组要求,如下所示:

橙色单元格分别指定了DayOfInterest和HoursInner的指定范围

经过的时间:
=[@[event\u datetime]]-DayOfInterest


时间分组:
=和([@[Time Passed]]>0,[@[Time Passed]]感谢您的详细回复!我生成了原始数据,因此如果我可以更改我的原始数据(只需调整SQL),那么我就可以这样做。如何执行上述操作的链接示例(特别是#2)很好,因为我没有考虑使用一个正常的表,这似乎是个好主意。问题:你的项目是否支持VBA?切片机工作很好(我最后调整了查询一点,以获得额外切片机,而不是通过切片机分组):酷。第二个要求见我的修订答案。如果有帮助,请将问题标记为有帮助和/或已解决。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [DayOfInterest]) Is Nothing _
Or Not Intersect(Target, [HoursWithin]) Is Nothing Then
     Application.ScreenUpdating = False
     With ActiveWorkbook.SlicerCaches("Slicer_Time_Groupings")
        .ClearAllFilters
        On Error Resume Next
        .SlicerItems("TRUE").Selected = True
        .SlicerItems("FALSE").Selected = False
        On Error GoTo 0
    End With
    Application.ScreenUpdating = True
End If


End Sub