【问题标题】:Dynamic Parameter in Power Pivot QueryPower Pivot 查询中的动态参数
【发布时间】:2016-04-07 21:48:21
【问题描述】:

我们正在使用 Excel 2013 和 Power Pivot 构建由多个数据透视表组成的模块,这些数据透视表都从同一个 Power Pivot 表中提取数据,该表查询我们的 T-SQL 数据仓库。

为了简化和完全自动化此模块,我们希望创建一个文本字段,允许用户输入一个值(例如客户端 ID#),然后将该值用作Power Pivot 查询。

是否可以在 Power Pivot 查询中传递参数,该参数位于查询外部的文本字段中?

【问题讨论】:

    标签: sql vba excel powerpivot


    【解决方案1】:

    您还可以将切片器或组合框选择传递给单元格。为该单元格定义一个名称。将该单元格(以及其他如果您有多个文本变量要使用)放在一个表格中。为方便起见,我通常将此表命名为“参数”。然后,您可以“读入”查询参数并将它们放入查询语句中。

    查询顶部用于读取这些参数的代码可能类似于...

    让 Parameter_Table = Excel.CurrentWorkbook(){[Name="Parameter"]}[Content], XXX_Value = Parameter_Table{1}[值], YYY_Value = Parameter_Table{2}[值], ZZZ_Value = Parameter_Table{3}[值],

    接下来是您的查询,而不是搜索,例如手动输入的客户“BigDataCo”,您可以将“BigDataCo”替换为 XXX_Value。

    每次选择不同的客户时刷新链接确实是一种非常缓慢的方法,但这对我很有用。

    【讨论】:

    • 我会试试这个。谢谢!
    【解决方案2】:

    与其将参数传递给数据源 SQL 查询,为什么不使用数据透视表filter or slicer 来允许用户动态过滤数据?这比从源刷新数据要快得多。

    如果由于某种原因您需要将其直接传递给源查询,you'll have to do some VBA work.

    【讨论】:

    • 虽然这适用于较小的数据集,但当数据集增长到几百万条记录时,它就不起作用了。当我们的数据被过滤时,它是几百条记录,但未经过滤,它在 Excel 中变得无法管理(3+ 百万条记录)。我们还希望删除与该特定模块无关的任何信息(即其他用户的数据)。
    • Power Pivot 可以毫无问题地处理数百万条记录。我在一个仍然具有高性能的主事实表中创建了具有 40M+ 行的非常复杂的模型。话虽如此,如果您需要实现安全性,则将参数传递给源查询是错误的方法。您应该在源数据库中实现安全性,或者使用 SSAS 表格模型而不是 Power Pivot,因为您也可以在该程序中实现行级安全性。
    • 您对大小限制是正确的,我说错了;我的意思是我们不想将一个应该是几 MB 的文件变成一个超过 GB 的文件。我们可以无休止地争论如何有其他方法来做某事,但我的问题是是否可以使用 PoverPivot 或 PowerQuery 来做到这一点;如果没有,很酷,如果可能的话,更好! :D
    • 然后查看我帖子中的第二个链接 - 您可以根据工作簿中的单元格值以编程方式将参数传递给源查询。
    • 谢谢!我也很感谢您对其他方法的建议,只是在这种情况下,我必须以特定的方式来做。
    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多