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 从查询公式中提取元数据并将其与新值组合。
也许有人需要这个:)
问候克里斯
我有以下问题。我正在使用 "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 从查询公式中提取元数据并将其与新值组合。
也许有人需要这个:)
问候克里斯