Power Query - 从 AnalysisServices (Cube) 获取数据 - 使用用户函数结果进行过滤

Power Query - Get Data from AnalysisServices (Cube) - Filter with User-Function result

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

如果我使用 Filter,一切都很好,updatetime ca。 3-4 秒:

    #"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":

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 中的单元格格式为数字(其中只有数字) 现在的更新时间 -> 无穷无尽!!!

    #"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”的 "normal" 参数,一切都很好。 只有当我使用 fktGetNamedCellValue 时,它​​才会 运行 正确。

我编辑了 Trim 一个 Clean 结果。将其格式化为文本和数字...没有任何帮助。

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

最好的问候 克里斯

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

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

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

我通过检查 worksheet_change 事件并调用此子程序将此参数更改为 vba:

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 中的 PARAMETER Name 和应设置的 VALUE。为此,sub 从查询公式中提取元数据并将其与新值组合。

也许有人需要这个:)

问候克里斯