Report Builder生成的MDX查询在Power BI中列重复两次的技术求助
解决Power BI中MDX查询列重复显示的问题
问题描述
我正在Power BI中使用MDX查询从SQL Server Analysis Services(SSAS)提取数据,但发现该查询的每一列都重复显示了两次。由于我不具备MDX查询的相关知识,因此该查询是通过Report Builder生成的。具体查询语句如下:
SELECT NON EMPTY { [Measures].[Premium LCL] } ON COLUMNS, NON EMPTY { ( [D_BU].[Business Unit Number].[Business Unit Number].ALLMEMBERS * [D_Policy].[OriginalPolicyID].[OriginalPolicyID].ALLMEMBERS * [D_Revenue_Attribute].[InsurerName].[InsurerName].ALLMEMBERS * [D_Client].[ClientName].[ClientName].ALLMEMBERS * [D_TransactionDate].[Accounting Month Number].[Accounting Month Number].ALLMEMBERS * [D_TransactionDate].[Accounting Year].[Accounting Year].ALLMEMBERS * [D_TransactionDate].[Accounting Month Year].[Accounting Month Year].ALLMEMBERS * [D_PolicyExpirationDate].[Expiration Month Year].[Expiration Month Year].ALLMEMBERS * [D_Policy].[InceptionDate].[InceptionDate].ALLMEMBERS * [D_Product].[Product Line].[Product Line].ALLMEMBERS * [D_Product].[Product Coverage].[Product Coverage].ALLMEMBERS * [D_BU].[Region Name].[Region Name].ALLMEMBERS * [D_BU].[Branch Name].[Branch Name].ALLMEMBERS * [D_CarrierPayee].[Placement Market Group].[Placement Market Group].ALLMEMBERS * [D_Industry_SIC].[SIC Level 2 Name].[SIC Level 2 Name].ALLMEMBERS * [D_Industry_SIC].[SIC Level 3 Name].[SIC Level 3 Name].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME ON ROWS FROM ( SELECT ( {[D_BU].[RegionName].&[GGB UK - Underwriting], [D_BU].[RegionName].&[GGB UK - Specialty], [D_BU].[RegionName].&[GGB(UK & Ireland)] } ) ON COLUMNS FROM ( SELECT ( -{ [D_BU].[BranchName].&[Re Centre], [D_BU].[BranchName].&[UK&Ireland] } ) ON COLUMNS FROM ( SELECT ( { [D_TransactionDate].[Accounting Year].&[2023] } ) ON COLUMNS FROM [Model] ))) WHERE ( [D_BU].[RegionName].CurrentMember ) CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
问题原因
列重复主要来自两个方面:
- 多层嵌套子查询和
WHERE子句的上下文过滤重复作用,导致维度成员被双重计算; - Report Builder生成的MDX默认保留了冗余属性,再加上原查询中
[D_BU].[RegionName]和[D_BU].[Region Name](大小写/空格差异)属于不同属性,进一步加剧了重复。
修改后的MDX查询
直接替换为以下语句即可解决重复问题:
SELECT NON EMPTY { [Measures].[Premium LCL] } ON COLUMNS, NON EMPTY { ( [D_BU].[Business Unit Number].[Business Unit Number].ALLMEMBERS * [D_Policy].[OriginalPolicyID].[OriginalPolicyID].ALLMEMBERS * [D_Revenue_Attribute].[InsurerName].[InsurerName].ALLMEMBERS * [D_Client].[ClientName].[ClientName].ALLMEMBERS * [D_TransactionDate].[Accounting Month Number].[Accounting Month Number].ALLMEMBERS * [D_TransactionDate].[Accounting Year].[Accounting Year].ALLMEMBERS * [D_TransactionDate].[Accounting Month Year].[Accounting Month Year].ALLMEMBERS * [D_PolicyExpirationDate].[Expiration Month Year].[Expiration Month Year].ALLMEMBERS * [D_Policy].[InceptionDate].[InceptionDate].ALLMEMBERS * [D_Product].[Product Line].[Product Line].ALLMEMBERS * [D_Product].[Product Coverage].[Product Coverage].ALLMEMBERS * [D_BU].[Region Name].[Region Name].ALLMEMBERS * [D_BU].[Branch Name].[Branch Name].ALLMEMBERS * [D_CarrierPayee].[Placement Market Group].[Placement Market Group].ALLMEMBERS * [D_Industry_SIC].[SIC Level 2 Name].[SIC Level 2 Name].ALLMEMBERS * [D_Industry_SIC].[SIC Level 3 Name].[SIC Level 3 Name].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_VALUE ON ROWS FROM [Model] WHERE ( [D_TransactionDate].[Accounting Year].&[2023], {[D_BU].[Region Name].&[GGB UK - Underwriting], [D_BU].[Region Name].&[GGB UK - Specialty], [D_BU].[Region Name].&[GGB(UK & Ireland)]}, -{[D_BU].[Branch Name].&[Re Centre], [D_BU].[Branch Name].&[UK&Ireland]} ) CELL PROPERTIES VALUE, FORMATTED_VALUE
关键修改说明
- 移除多层嵌套子查询,将所有过滤条件整合到
WHERE子句,避免维度成员被重复计算; - 修正
[D_BU].[RegionName]的拼写,与ROWS中的[D_BU].[Region Name]保持一致,消除属性名称不一致导致的重复; - 精简
DIMENSION PROPERTIES和CELL PROPERTIES,只保留必要属性,减少冗余数据返回。
后续验证
替换查询后执行,检查列重复是否消失。如果仍有个别维度重复,可检查ROWS子句中是否存在同一维度的不同层级/属性(比如同时选择了代码和名称),按需删除重复项即可。
内容的提问来源于stack exchange,提问作者Jeevan
相关产品推荐
相关产品推荐

