MDX查询需求:按年份列、街区行展示出行量占比(百分比)
MDX查询修正方案
问题分析
原代码的核心问题在于分母的总出行量计算逻辑错误:
- 原分母使用
[start station].[start station]未明确指定全量成员,无法正确获取总出行量; - 未根据需求锁定分母的筛选范围(是按年份总出行量还是全时段总出行量)。
根据你给出的示例(2015年Downtown占比基于当年总出行量),以下是两种场景的修正方案:
场景1:占比为「街区当年出行量 / 当年所有街区总出行量」
修正后的MDX代码:
WITH MEMBER [Measures].[Percentage] AS Divide( [Measures].[Trip Count], -- 计算当前年份下所有街区的总出行量 ([Measures].[Trip Count], [start station].[neighborhood].AllMembers) ) ,FORMAT_STRING = "percent" SELECT [start time].[start time].[YearL].[2014] : [2015] ON COLUMNS ,[start station].[start station].[neighborhood] ON ROWS FROM [Cube];
修正点说明
- 分母使用
[start station].[neighborhood].AllMembers,确保计算当前年份下所有街区的总出行量; Divide函数自动处理除零情况,避免报错;- 保留
FORMAT_STRING = "percent"确保结果以百分比格式显示。
场景2:占比为「街区当年出行量 / 全时段所有街区总出行量」
如果需要以所有年份的总出行量为基准,修正代码如下:
WITH MEMBER [Measures].[Percentage] AS Divide( [Measures].[Trip Count], -- 计算所有年份、所有街区的总出行量,不受行列筛选影响 ([Measures].[Trip Count], [start station].[neighborhood].AllMembers, [start time].[YearL].AllMembers) ) ,FORMAT_STRING = "percent" SELECT [start time].[start time].[YearL].[2014] : [2015] ON COLUMNS ,[start station].[start station].[neighborhood] ON ROWS FROM [Cube];
修正点说明
- 分母额外添加
[start time].[YearL].AllMembers,排除时间维度的筛选,获取全时段总出行量; - 确保每个单元格的占比都基于全局总出行量计算。
内容的提问来源于stack exchange,提问作者Codeman
相关产品推荐
相关产品推荐

