我正在处理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表变量赋值语句中无法做到这一点?还是在表格模型中还有另一种完全不同的方式来处理这种情况?
任何帮助将不胜感激!
答案 0 :(得分: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]
)