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

Power BI含子行矩阵中DAX市场份额占比的正确计算方法

Power BI矩阵中客户及产品层级的市场份额度量值修正

场景与问题

  • 矩阵行结构:父行是客户名称(sales[cardname]),子行是对应客户的产品(sales[itemname])
  • 已定义度量值:
    Unique Products = CALCULATE( DISTINCTCOUNT(sales[itemname]) )
    
  • 需求:基于客户/产品的唯一产品数 ÷ 指定周期内全局唯一产品数计算市场份额,要求客户层级和产品层级均显示正确占比
  • 当前异常:客户层级占比正确,但展开产品子行后,每个产品的占比显示为100%(预期应为单个产品在周期总产品数中的占比,如总60个产品时约1.6%)

当前尝试的度量值

初始版本

% Market Share =
VAR TotalProducts =
    CALCULATE(
        DISTINCTCOUNT(sales[itemname]),
        ALL(sales[cardname], sales[docdate])  // docdate = 销售日期
    )
VAR ProductsByClient =
    CALCULATE(
        DISTINCTCOUNT(sales[itemname])
    )
RETURN
    DIVIDE(ProductsByClient, TotalProducts, 0)

优化尝试版本

New Market Share % =
VAR NumProductsContext = [unique products]
VAR DateMin = MINX( ALLSELECTED( sales[docdate] ), sales[docdate] )
VAR DateMax = MAXX( ALLSELECTED( sales[docdate] ), sales[docdate] )
VAR TotalProductsPeriod =
    CALCULATE(
        DISTINCTCOUNT( sales[itemname] ),
        REMOVEFILTERS( sales[cardname], sales[itemname] ),
        FILTER(
            ALL( sales ),
            sales[docdate] >= DateMin &&
            sales[docdate] <= DateMax
        )
    )
RETURN
DIVIDE( NumProductsContext, TotalProductsPeriod, 0)

修正后的度量值方案

核心思路:确保分母的周期总唯一产品数不受客户、产品行上下文的筛选影响,同时保留页面/切片器的日期筛选。

% Market Share =
DIVIDE(
    [Unique Products],
    CALCULATE(
        [Unique Products],
        // 移除客户和产品的行筛选,保留日期等全局筛选
        REMOVEFILTERS(sales[cardname], sales[itemname])
    ),
    0
)

原理说明

  • 分子[Unique Products]:在客户层级返回该客户的唯一产品数,在产品层级返回1(单个产品的唯一计数)
  • 分母:通过REMOVEFILTERS移除客户和产品的筛选上下文,计算整个筛选周期内的全局唯一产品数,确保在任何行层级下分母值都保持一致
  • DIVIDE函数自动处理除零情况,返回0作为默认值

内容的提问来源于stack exchange,提问作者Ed_7830

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 06:13:10