我有一个针对OPENQUERY()的视图,该视图从SSAS多维数据集获取数据。 MDX查询如下所示:
WITH MEMBER [Measures].[Measure1] AS
(--calculation)
SELECT
{[Measures].[Measure1]}
ON 0,
NON EMPTY ([Dim1].[Dim_key].[Dim_key], [Dim2].[Dim_key].[Dim_key])
ON 1
FROM [Cube]
WHERE ([Dim3].[Hierarchy].[Level].[Member])
我的问题是,当WHERE过滤器导致0行时,视图不起作用,错误:
Invalid column name '[Dim1].[Dim_key].[Dim_key].[MEMBER_CAPTION]'.
因为它使用列名具有GROUP BY
如何强制它至少返回一行?或者总是返回列名? 我无法删除NON EMPTY,因为整个设置大约需要1分钟才能加载。
到目前为止,我已尝试过这些解决方案:
MDX - Always return at least one row even if no data is available
Force mdx query to return column names
但似乎它不起作用,因为我在另一个维度上有where条件。
答案 0 :(得分:1)
管理解决问题。添加了此度量,它基本上复制了行上返回的Dim1成员:
WITH MEMBER [Measures].[Measure1] AS
(--calculation)
MEMBER [Measures].[Dim_Key] AS
[Dim1].[Dim_key].CurrentMember.Member_Key
SELECT
{[Measures].[Measure1]
,[Measures].[Dim_Key]}
ON 0,
NON EMPTY ([Dim1].[Dim_key].[Dim_key], [Dim2].[Dim_key].[Dim_key])
ON 1
FROM [Cube]
WHERE ([Dim3].[Hierarchy].[Level].[Member])
因此,即使没有行,我也会将新度量作为其中一列返回。如果有行我会得到两个额外的列(有行标签),但我只是不在视图中使用它们