首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Power Query -从AnalysisServices (多维数据集)获取数据-使用用户函数结果进行筛选

Power Query -从AnalysisServices (多维数据集)获取数据-使用用户函数结果进行筛选
EN

Stack Overflow用户
提问于 2020-05-08 16:20:58
回答 1查看 319关注 0票数 1

我有以下问题。我正在使用"Get Data from Analysis Services“从多维数据集获取数据(Excel 365 - Power Query)。每周筛选年份的->销售数量值。

如果我使用过滤器,一切都很好,更新时间大约为3-4秒:

代码语言:javascript
复制
    #"Filtered Rows1" = Table.SelectRows(#"Added Items", each 
        (Cube.AttributeMemberId([#"Date.Year (4-4-5)"]) = "[Date].[Year 4-4-5].&["&
         Number.ToText(2019) &"]" meta 
         [DisplayName = Number.ToText(2019)] 

         or Cube.AttributeMemberId([#"Date.Year (4-4-5)"]) = "[Date].[Year 4-4-5].&["&
         Number.ToText(2020) &"]" meta 
         [DisplayName = Number.ToText(2020)] 
         )

现在我喜欢动态地做,这样我就可以在excel中从一个单元格中获得年份。为此,我使用了下面的M函数"fktGetNamedCellValue“:

代码语言:javascript
复制
let
    Source = (FieldInput as text) => 

    let Quelle = Excel.CurrentWorkbook(){[Name=FieldInput]}[Content], 
    Inhalt = Number.From(Quelle{0}[Column1])

in  Inhalt
in  Source

我用函数替换了Filter-Step中的年份。单元格被命名为"cell_Prev_Year“和"cell_Plan_Year”这两个单元格在Excel中被格式化为数字(其中只有数字),现在->更新时间是无限的!

代码语言:javascript
复制
    #"Filtered Rows1" = Table.SelectRows(#"Added Items", each 
        (Cube.AttributeMemberId([#"Date.Year (4-4-5)"]) = "[Date].[Year 4-4-5].&["&
         Number.ToText(fktGetNamedCellValue("cell_Prev_Year") &"]" meta 
         [DisplayName = Number.ToText(fktGetNamedCellValue("cell_Prev_Year"))] 

         or Cube.AttributeMemberId([#"Date.Year (4-4-5)"]) = "[Date].[Year 4-4-5].&["&
         Number.ToText(fktGetNamedCellValue("cell_Plan_Year")) &"]" meta 
         [DisplayName = Number.ToText(fktGetNamedCellValue("cell_Plan_Year"))] 
         )

如果我使用值为"2019“或"2020”的“正常”参数,则一切正常。只有当我使用fktGetNamedCellValue时,它才不会正确运行。

我已经把结果修剪干净了。将其格式化为文本和数字...什么都没有用。

我必须使用用户友好的参数(没有在Power Query中设置),所以我希望能得到一些帮助:)

向Chris致以最良好的问候

(PS:我希望你能听懂我的英语)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 21:02:47

我按如下方式解决了这个问题。

因为使用用户函数作为参数从多维数据集中获取数据并不是一个好主意。我认为这个方法禁用了查询折叠,或者在这个过程中被调用了很多次,所以我决定使用一个power-query参数。

我使用vba通过检查worksheet_change事件并调用该子对象来更改此参数:

代码语言:javascript
复制
Sub refresh_Parameter(ParameterName As String, ParameterValue As Variant)

Dim strOldFormula As String
Dim strParametersMeta As String

strOldFormula = ThisWorkbook.Queries(ParameterName).Formula
strParametersMeta = Mid(strOldFormula, InStr(1, strOldFormula, "meta"), Len(strOldFormula))

    ThisWorkbook.Queries(ParameterName).Formula = ParameterValue & " " & strParametersMeta

Debug.Print strOldFormula
Debug.Print strParametersMeta

End Sub

该子模块的参数包括PowerQuery中的参数名称和应设置的值。为此,sub从查询公式中提取元数据,并将其与新值组合。

也许有人需要这个:)

向chris致以最良好的问候

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61674967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档