You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:56:00