有条件地在DAX查询中分配表变量(在SSRS数据集中)

问题描述 投票:0回答:1

我正在研究SSRS数据集,试图编写一个DAX查询,可以根据用户输入过滤表格模型中的表。具体的挑战是我试图根据用户的输入有条件地创建DAX表变量。

简化示例:假设我的表格模型中有一个名为“Groups”的表,其中包含两列“GroupID”和“GroupLabel”。根据用户的输入,我需要创建一个表变量(类似于SQL临时表),其中包含“Groups”表中与用户输入“GroupLabel”对应的GroupID。我通过以下方式成功完成了这项工作:

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表变量赋值语句中无法完成的事情?或者是否有另一种完全不同的方式来处理表格模型中的这种情况?

任何帮助将不胜感激!

reporting-services ssas dax
1个回答
0
投票

这取决于您要使用的参数类型。如果它是一个简单的值文本参数,那么在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]
)
© www.soinside.com 2019 - 2024. All rights reserved.