Power Query - получение данных из AnalysisServices (куб) - фильтрация с результатом пользовательской функции - PullRequest
1 голос
/ 08 мая 2020

У меня следующая проблема. Я получаю данные (Excel 365 - Power Query) из куба с помощью «Получить данные из служб Analysis Services». -> Количество продаж и значений за отфильтрованные годы по неделям.

Все в порядке, если я использую фильтр, время обновления ок. 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)] 
         )

Теперь мне нравится делать это динамическое c, чтобы я мог получить годы из ячейки в 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 »все нормально. Только если я использую fktGetNamedCellValue, он не будет работать правильно.

Я дал Обрезать и очистить результат. Отформатировал его как текст и число ... ничего не помогло.

Я должен использовать для этого удобный для пользователя параметр (не установленный в Power Query), поэтому я надеюсь на некоторую помощь :)

С уважением Крис

(PS: Надеюсь, ты понимаешь мой английский sh)

1 Ответ

0 голосов
/ 20 мая 2020

Я решил эту проблему следующим образом.

Так как использование пользовательской функции в качестве параметра для получения данных из куба - не лучшая идея. Я думаю, что этот метод отключает свертывание запросов или вызывается много раз в процессе, я решил использовать параметр power-query.

Я изменяю этот параметр с помощью vba, проверяя событие worksheet_change и вызывая этот вложенный файл:

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 и ЗНАЧЕНИЕ, которое должно быть установлено. Для этого подпрограмма извлекает метаданные из формулы запроса и объединяет их с новым значением.

Может кому-то это понадобится :)

С уважением, Крис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...