【问题标题】:Excel Pivot Table Report FilterExcel 数据透视表报表筛选器
【发布时间】:2021-11-30 23:58:19
【问题描述】:

由 powerquery 查询提供,我有一个主数据透视表(2.5+m 行,因此没有加载到工作表或数据模型,因为我想使用报告过滤器)。 使用“显示报告过滤器页面”,我将此数据透视表拆分为多个子表,然后导出并重新分配。 问题是即使子表也能获得完整的数据源:(,所以我坚持:

  1. 为每个实体编辑查询、添加过滤器、刷新数据透视表和所有这些(繁琐的选项)。
  2. 为所有实体提供包含完整来源的数据透视(不是选项)。
  3. 取消选中“使用文件保存源数据”(现在实体的数据透视表不再可编辑)。

基本上,我只需要能够通过 vba 与枢轴源进行交互,但根据我的研究,如果不刷新所有查询(选项 1),这是不可能的。 或者,我可以重新加载到 dataModel,使用 vba 复制枢轴,但似乎我无法通过 dataModel 中的 vba “删除行”。

还有其他想法吗?我不敢相信我是唯一一个认为报告过滤器没有过滤数据透视源很愚蠢的人,这对我来说似乎是合乎逻辑的。

非常感谢,

Demo file

【问题讨论】:

  • 为什么子表会获得完整的数据源?而且您应该能够通过 VBA 与枢轴源进行交互。你能提供一个包含示例数据的文件吗?
  • 添加了演示文件。只是为了模拟来自 powerquery 的枢轴技术设置。按国家/地区生成报告过滤器,但您会看到即使在子表中您也可以更改国家/地区。如果将工作表导出到另一个工作簿,则行为相同。感谢收看。

标签: excel vba excel-2010 powerquery datamodel


【解决方案1】:

您可以使用以下代码为每个国家/地区生成单独的工作表。这会创建类似于“显示报告过滤器页面”的工作表,但会将数据粘贴为纯文本。

这是基于提供的样本表,如果已经存在同名的表,它现在不起作用。但是你可以添加一个条件来检查相同的

Sub SplitPivot()

Set pvtTable = Worksheets("pivot").PivotTables("PivotTable47")

For Each pvtitem In pvtTable.PivotFields("countries").PivotItems

    pvtTable.PivotFields("countries"). _
        ClearAllFilters
    pvtTable.PivotFields("countries").CurrentPage = pvtitem.Name
    Application.CutCopyMode = False
    pvtTable.PivotSelect "", xlDataAndLabel, True
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ' Sheets("Sheet5").Select
    ActiveSheet.Name = pvtitem.Name
    
    MsgBox pvtitem.Name & " Done"
        
Next

End Sub

【讨论】:

  • 感谢您的反馈。这基本上复制了过滤后的数据透视表并将其粘贴为文本。与我的问题中的选项 3 相同的结果。是否也可以这样做,而是复制源数据?如果我可以从枢轴中获取源,我可以重新创建一个枢轴,假设国家/地区的源应该少于 1m 行。
  • 所以您希望枢轴与查询链接,但只显示一个国家/地区的数据?
  • 嗯,我试图避免这种情况,因为它会迫使我在查询中添加过滤器,重新运行所有转换以及每个国家/地区的所有转换。我更想与查询的输出进行交互。如果我将输出加载到工作表中,这将是一件轻而易举的事,但我有超过 1m 行,所以这不是一个选项:(。
  • 无法通过 VBA 与 Power Query 交互。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2012-09-13
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
相关资源
最近更新 更多