在浏览器 SSAS MDX 中交叉度量时将 NULL 值替换为 0
Replace NULL Value with 0 when crossing measures in Browser SSAS MDX
我想在多维数据集中浏览时替换空值,当我执行 IIF 或合并时,我得到没有数据(所有维度行)的年份的空值,我只想替换当前数据的空值越过。这是一个例子来解释更多:
Year Measure 1 Measure 2
2015 55 60
2016 44 70
2017 30 (null)
我使用 ISEMPTY 或 COALESCE 时的问题行为
Year Measure 1 Measure 2
(All TimeDim years) 0 0
2012 0 0
2013 0 0
2014 0 0
2015 55 60
2016 44 70
2017 30 0
数据集现在更大了,但有无用的值。
我想要什么:
Year Measure 1 Measure 2
2015 55 60
2016 44 70
2017 30 0
如何解决这个问题?谢谢。
您可以将 IS
运算符与 NULL
引用一起使用。 See here
另一种选择是将其包装在 IIF
语句中。 See here
这是一个人们可以玩的例子:
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
结果:
这是导致行扩展的简单修改:
WITH
MEMBER [Measures].[Reseller Sales Amount NEW] AS
IIF
(
[Measures].[Reseller Sales Amount] = 0
,0
,[Measures].[Reseller Sales Amount]
)
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount NEW]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
结果
所以我们可以将新措施稍微修改一下:
WITH
MEMBER [Measures].[Reseller Sales Amount NEW] AS
IIF
(
[Measures].[Reseller Sales Amount] = 0
AND
[Measures].[Internet Sales Amount] <> 0
,0
,[Measures].[Reseller Sales Amount]
)
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount NEW]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
那么我们有:
注意...在多维数据集内去除空值 space 会严重降低您的 mdx 脚本的性能,因此请谨慎使用上面的内容 - 最好不要在上面和您的客户端对 mdx 进行 (null) => 0
的转换
我想在多维数据集中浏览时替换空值,当我执行 IIF 或合并时,我得到没有数据(所有维度行)的年份的空值,我只想替换当前数据的空值越过。这是一个例子来解释更多:
Year Measure 1 Measure 2
2015 55 60
2016 44 70
2017 30 (null)
我使用 ISEMPTY 或 COALESCE 时的问题行为
Year Measure 1 Measure 2
(All TimeDim years) 0 0
2012 0 0
2013 0 0
2014 0 0
2015 55 60
2016 44 70
2017 30 0
数据集现在更大了,但有无用的值。
我想要什么:
Year Measure 1 Measure 2
2015 55 60
2016 44 70
2017 30 0
如何解决这个问题?谢谢。
您可以将 IS
运算符与 NULL
引用一起使用。 See here
另一种选择是将其包装在 IIF
语句中。 See here
这是一个人们可以玩的例子:
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
结果:
这是导致行扩展的简单修改:
WITH
MEMBER [Measures].[Reseller Sales Amount NEW] AS
IIF
(
[Measures].[Reseller Sales Amount] = 0
,0
,[Measures].[Reseller Sales Amount]
)
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount NEW]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
结果
所以我们可以将新措施稍微修改一下:
WITH
MEMBER [Measures].[Reseller Sales Amount NEW] AS
IIF
(
[Measures].[Reseller Sales Amount] = 0
AND
[Measures].[Internet Sales Amount] <> 0
,0
,[Measures].[Reseller Sales Amount]
)
SELECT
{
[Measures].[Internet Sales Amount]
,[Measures].[Reseller Sales Amount NEW]
} ON COLUMNS
,NON EMPTY
[Date].[Calendar Year].[Calendar Year].MEMBERS ON ROWS
FROM [Adventure Works]
WHERE
[Geography].[Geography].[Country].&[Australia];
那么我们有:
注意...在多维数据集内去除空值 space 会严重降低您的 mdx 脚本的性能,因此请谨慎使用上面的内容 - 最好不要在上面和您的客户端对 mdx 进行 (null) => 0
的转换