Условно назначьте табличную переменную в запросе DAX (в наборе данных SSRS) - PullRequest
0 голосов
/ 21 ноября 2018

Я работаю над набором данных SSRS, пытаясь написать запрос DAX, который может фильтровать таблицу в табличной модели на основе пользовательского ввода.Конкретная проблема заключается в том, что я пытаюсь условно создать табличную переменную DAX на основе ввода от пользователя.

Упрощенный пример: скажем, у меня есть таблица в моей табличной модели под названием «Группы» с двумя столбцами «GroupID» и «GroupLabel».Основываясь на входных данных от пользователя, мне нужно создать переменную таблицы (что-то похожее на временную таблицу SQL), которая содержит идентификаторы GroupID из таблицы «Groups», которые соответствуют пользовательскому вводу «GroupLabel».Я успешно выполнил это с помощью следующего:

DEFINE
VAR GroupIDs_Selected = 
SUMMARIZE(
CALCULATETABLE(
'Groups', 
'Groups'[GroupLabel] = userInput
),
'Group'[GroupID]
)

Однако у нас также есть опция, которую пользователь может выбрать для групп «Все».Таким образом, для этого табличная переменная должна выглядеть примерно так:

DEFINE
VAR GroupIDs_Selected =
SUMMARIZE('Groups', 'Groups'[GroupID])

Кажется, что два приведенных выше определения переменных работают нормально, но моя проблема в том, что я не понялспособ объединить эти два определения переменных условно.Например, следующее определение, которое пытается объединить два вышеупомянутых определения внутри функции IF, не работает для меня:

DEFINE
VAR GroupIDs_Selected = 
IF( userInput = "All", 
SUMMARIZE('Groups', 'Groups'[GroupID]),
SUMMARIZE(
CALCULATETABLE(
'Groups', 
'Groups'[GroupLabel] = userInput
),
'Group'[GroupID]
)

^ Более конкретно, когда я пытаюсь ссылаться на эту условную переменную как таблицу (дляНапример, в выражении EVALUATE) я получаю следующее сообщение об ошибке: «Выражение, указанное в запросе, не является допустимым табличным выражением».

Мой вопрос .. Есть ли что-то, что я упускаю в выражении IF?Может быть, я должен включить функцию, чтобы как-то привести условно возвращаемое значение в виде таблицы?Или это не может быть сделано в операторе присваивания переменной таблицы DAX?Или есть еще один совершенно другой способ обработки такого сценария в табличной модели?

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 30 апреля 2019

Это зависит от того, какой параметр вы хотите использовать.Если это простой текстовый параметр с одним значением, используйте простой фильтр в SUMMARIZE, например,

SSRS:

par1 available values (A|B|C|D); users choice A

DAX:

EVALUATE(
SUMMARIZECOLUMS(
'Item'[Category]
FILTER('Item', 'Item'[Group] = @ssrsParam)
"sales" [value of items]
)

Если параметр является многозначным, вы можете сделать что-то вроде этого

SSRS:

par1 available values (A|B|C|D); users choice A and B

в наборе данных использовать par1 в качестве формулы и объединить значения с помощью Join

=Join(Parameters!ReportParameter1.Value, "|")

DAX:

EVALUATE(
SUMMARIZECOLUMS(
'Item'[Category]
FILTER(VALUES('Item'[Group]), PATHCONTAINS(@ssrsParam, 'Item'[Group]))
"sales" [value of items]
)
...