Microsoft KB Archive/942654

= FIX: A Multidimensional Expressions query that contains a FILTER function returns an incorrect result in SQL Server 2005 Analysis Services =

Article ID: 942654

Article Last Modified on 10/9/2007

-

APPLIES TO


 * Microsoft SQL Server 2005 Analysis Services

-



Bug: #50001670 (SQL Hotfix)



Microsoft distributes Microsoft SQL Server 2005 fixes as one downloadable file. Because the fixes are cumulative, each new release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2005 fix release.



SYMPTOMS
When you run a Multidimensional Expressions (MDX) query in Microsoft SQL Server 2005 Analysis Services, the MDX query returns an incorrect result. This issue occurs if the following conditions are true:
 * The MDX query contains a FILTER function.
 * The FILTER function is nested in a CROSSJOIN function.



RESOLUTION
The fix for this issue was first released in Cumulative Update 4. For more information about how to obtain this cumulative update package for SQL Server 2005 Service Pack 2, click the following article number to view the article in the Microsoft Knowledge Base:

941450 Cumulative update package 4 for SQL Server 2005 Service Pack 2

Note Because the builds are cumulative, each new fix release contains all the hotfixes and all the security fixes that were included with the previous SQL Server 2005 fix release. Microsoft recommends that you consider applying the most recent fix release that contains this hotfix. For more information, click the following article number to view the article in the Microsoft Knowledge Base:

937137 The SQL Server 2005 builds that were released after SQL Server 2005 Service Pack 2 was released

Microsoft SQL Server 2005 hotfixes are created for specific SQL Server service packs. You must apply a SQL Server 2005 Service Pack 2 hotfix to an installation of SQL Server 2005 Service Pack 2. By default, any hotfix that is provided in a SQL Server service pack is included in the next SQL Server service pack.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed in the &quot;Applies to&quot; section.



Example
If you run the following MDX query against the AdventureWorks sample database in SQL Server 2005 Analysis Services, the query returns the correct result: WITH MEMBER [Reseller].[Product Line].[COG_OQP_INT_sm2] AS 'SUM(  {[Reseller].[Product Line].[Product Line].MEMBERS},    ([Reseller].[Last Order Year].[COG_OQP_INT_m5]))', SOLVE_ORDER = 6 MEMBER [Reseller].[Last Order Year].[COG_OQP_INT_sm3] AS 'SUM(   {[Reseller].[Last Order Year].[Last Order Year].MEMBERS},    IIF(        ISEMPTY(  ([Measures].[Growth in Customer Base])),0,  1))', SOLVE_ORDER = 5 MEMBER [Reseller].[Last Order Year].[COG_OQP_INT_m5] AS 'SUM(   {[Reseller].[Last Order Year].[Last Order Year].MEMBERS},    IIF(        ISEMPTY(  ([Measures].[Growth in Customer Base])),0, 1))', SOLVE_ORDER = 65534 MEMBER [Reseller].[Bank Name].[COG_OQP_INT_sm1] AS '1', SOLVE_ORDER = 7 SELECT CROSSJOIN(       UNION( CROSSJOIN(               CROSSJOIN( HEAD(                       {[Reseller].[Bank Name].[COG_OQP_INT_sm1]}, 1                     ), {[Reseller].[Product Line].[COG_OQP_INT_sm2]}),                   {[Reseller].[Last Order Year].[COG_OQP_INT_sm3]}), CROSSJOIN(               {[Reseller].[Bank Name].&[International Bank]},                CROSSJOIN( {[Reseller].[Product Line].[COG_OQP_INT_sm2]}, {[Reseller].[Last Order Year].[COG_OQP_INT_sm3]}))),           {[Measures].[Growth in Customer Base]}) ON AXIS(0) FROM [Adventure Works] CELL PROPERTIES VALUE The following is the correct result: COG_OQP_INT_sm1                International Bank COG_OQP_INT_sm2                COG_OQP_INT_sm2 COG_OQP_INT_sm3                COG_OQP_INT_sm3 Growth in Customer Base        Growth in Customer Base 1                              11 However, when you run the following MDX query, the query returns an incorrect result: WITH MEMBER [Reseller].[Product Line].[COG_OQP_INT_sm2] AS 'SUM(  {[Reseller].[Product Line].[Product Line].MEMBERS},    ([Reseller].[Last Order Year].[COG_OQP_INT_m5]))', SOLVE_ORDER = 6 MEMBER [Reseller].[Last Order Year].[COG_OQP_INT_sm3] AS 'SUM(   {[Reseller].[Last Order Year].[Last Order Year].MEMBERS},    IIF(        ISEMPTY(  ([Measures].[Growth in Customer Base])),0,  1))', SOLVE_ORDER = 5 MEMBER [Reseller].[Last Order Year].[COG_OQP_INT_m5] AS 'SUM(   {[Reseller].[Last Order Year].[Last Order Year].MEMBERS},    IIF(        ISEMPTY(  ([Measures].[Growth in Customer Base])),0, 1))', SOLVE_ORDER = 65534 MEMBER [Reseller].[Bank Name].[COG_OQP_INT_sm1] AS '1', SOLVE_ORDER = 7 SELECT CROSSJOIN(       UNION( CROSSJOIN(               CROSSJOIN( HEAD(                       {[Reseller].[Bank Name].[COG_OQP_INT_sm1]},                        -- If you replace the following parameter with a value of 1, the query returns the correct result.                         IIF( COUNT(                                CROSSJOIN( FILTER(                                        {[Reseller].[Bank Name].[Bank Name].MEMBERS},                                         ([Measures].[Growth in Customer Base], [Reseller].[Product Line].[COG_OQP_INT_sm2], [Reseller].[Last Order Year].[COG_OQP_INT_sm3])>= 11), {[Reseller].[Product Line].[Product Line].MEMBERS} ),                                INCLUDEEMPTY                             ) > 0, 1, 0 )                       --                     ),                    {[Reseller].[Product Line].[COG_OQP_INT_sm2]}),                    {[Reseller].[Last Order Year].[COG_OQP_INT_sm3]}), CROSSJOIN(               {[Reseller].[Bank Name].&[International Bank]},                CROSSJOIN( {[Reseller].[Product Line].[COG_OQP_INT_sm2]}, {[Reseller].[Last Order Year].[COG_OQP_INT_sm3]}))),           {[Measures].[Growth in Customer Base]}) ON AXIS(0) FROM [Adventure Works] CELL PROPERTIES VALUE The following is the incorrect result: COG_OQP_INT_sm1                International Bank COG_OQP_INT_sm2                COG_OQP_INT_sm2 COG_OQP_INT_sm3                COG_OQP_INT_sm3 Growth in Customer Base        Growth in Customer Base 1                              15 In this MDX query, the second parameter of the HEAD function, which has a value of 1, is replaced with an IIF function. The IIF function returns the same value, 1. However, the result of this MDX query differs from the MDX query that is mentioned earlier.

For more information about what files are changed, and for information about any prerequisites to apply the cumulative update package that contains the hotfix that is described in this Microsoft Knowledge Base article, click the following article number to view the article in the Microsoft Knowledge Base:

941450 Cumulative update package 4 for SQL Server 2005 Service Pack 2

