Power BI矩阵中市场份额平方总计错误,求HHI指数计算修正
解决Power BI中赫芬达尔-赫希曼指数(HHI)计算的总计错误问题
你需要按出版商计算赫芬达尔-赫希曼指数(即所有出版商市场份额的平方和),目前已创建两个度量值:Market Share(市场份额)的计算和总计都正确,但Market Share Square(市场份额平方)仅单个出版商计算正确,总体总计错误。为便于解读,计算时保留了*100的处理。
现有度量值DAX代码
市场份额(Market Share)
Market Share = VAR Volume = SUM('Sales - Global'[Sales]) VAR AllVolume = CALCULATE(SUM('Sales - Global'[Sales]), ALL('Publisher')) RETURN DIVIDE(Volume, AllVolume)
市场份额平方(Market Share Square)
Market Share Square = VAR Volume = SUM('Sales - Global'[Sales]) VAR AllVolume = CALCULATE(SUM('Sales - Global'[Sales]), ALL('Publisher'[Publisher])) VAR MarketShare = DIVIDE(Volume, AllVolume)*100 RETURN MarketShare * MarketShare
问题原因
当前Market Share Square在总计行时,会直接计算整个市场的份额平方(即100²=10000),而非对各出版商的市场份额平方值求和,这不符合HHI的计算逻辑。
解决方案
使用SUMX函数迭代每个出版商,单独计算其市场份额平方后再求和,确保总计行返回正确的HHI值。
修正后的市场份额平方度量值
Market Share Square = SUMX( VALUES('Publisher'[Publisher]), VAR Volume = SUM('Sales - Global'[Sales]) VAR AllVolume = CALCULATE(SUM('Sales - Global'[Sales]), ALL('Publisher')) VAR MarketShare = DIVIDE(Volume, AllVolume)*100 RETURN MarketShare * MarketShare )
直接计算HHI指数的度量值(可选)
若无需单独查看单个出版商的市场份额平方,可直接创建HHI指数度量值:
HHI Index = SUMX( VALUES('Publisher'[Publisher]), VAR Volume = SUM('Sales - Global'[Sales]) VAR AllVolume = CALCULATE(SUM('Sales - Global'[Sales]), ALL('Publisher')) VAR MarketShare = DIVIDE(Volume, AllVolume)*100 RETURN MarketShare * MarketShare )
逻辑说明
SUMX会遍历Publisher表中的每个出版商,为每个出版商单独计算市场份额平方,最后将所有结果累加。这样单个出版商行显示自身的市场份额平方,总计行则显示所有出版商的平方和(即HHI指数),完全符合需求。
内容的提问来源于stack exchange,提问作者Constantin Marguier
相关产品推荐
相关产品推荐

