SSAS MDX 计算 运行 总计但排除不太重要的行
SSAS MDX Calculate running total but exclude less significant rows
老 SQL 开发人员,MDX 新手:需要帮助以将小总数包含在 运行 总数中,但不显示这些小总数的贡献行。
考虑这个数据
Amount Running Total
Denver 6,321 6,321
Portland 8,426 14,747
Boise 19,222 33,969
Helena 23,257 57,226
Bozeman 31,225 88,451
Seattle 36,894 125,345
我的要求是不显示任何低于 15,000 的金额,而是显示包含这些金额的 运行 总数。我不能显示数量或 运行 总数少于 15,000。这是为了确保小数字无法识别到特定城市。
像这样:
Amount Running Total
Other 19,222 33,969
Helena 23,257 57,226
Bozeman 31,225 88,451
Seattle 36,894 125,345
或者,理想情况下,需要什么:
Amount
Other 33,969
Helena 23,257
Bozeman 31,225
Seattle 36,894
感谢您的帮助
马丁
经过几次白板会议后,我的 co-conspirator 想出了一个简单的解决方案:添加一个新度量,计算 运行 总数与城市金额之间的差异。当此差异小于阈值时,这将是包含“其他”城市名称的汇总行,并且还使用 运行 总数而不是城市总数。感谢Tyson
下面是一些示例代码:
WITH
SET [OrderedSet] AS
Nonempty
(
ORDER
([Age].[Age Group B].[Age Group B].Members,
[Measures].[Emergency Room Visits per 1,000 Member Months],
BASC
)
)
MEMBER [Measures].[RowNumber] AS
Rank([Age].[Age Group B].CURRENTMEMBER,
[OrderedSet]
)
MEMBER [Measures].[Running Total] as
Sum(
Head
([OrderedSet],
([Measures].[RowNumber],[Age].[Age Group B].CurrentMember)
),
[Measures].[Emergency Room Visits per 1,000 Member Months]
)
MEMBER [Measures].[Ttl_RunTtl_Diff] AS
[Measures].[Running Total] - [Measures].[Emergency Room Visits per 1,000 Member Months]
MEMBER MEASURES.NewAge AS
IIF([Measures].[Ttl_RunTtl_Diff] = 0 OR [Measures].[Ttl_RunTtl_Diff]>15000
, [Age].[Age Group B].CURRENTMEMBER.Name, "Other")
MEMBER MEASURES.NewTotal AS
IIF([Measures].[Ttl_RunTtl_Diff] = 0 OR [Measures].[Ttl_RunTtl_Diff]>15000
, [Measures].[Emergency Room Visits per 1,000 Member Months], [Measures].[Running Total])
SELECT NON EMPTY
{
[Measures].[Emergency Room Visits per 1,000 Member Months],
[Measures].[Member Months],
[Measures].[Emergency Room Visits],
[Measures].[Running Total],
[Measures].[Ttl_RunTtl_Diff],
[Measures].[NewAge],
[Measures].[NewTotal]
}
ON COLUMNS,
NON EMPTY
FILTER({[OrderedSet]}
, [Measures].[Running Total] > 15000 )
ON ROWS FROM [Model]
老 SQL 开发人员,MDX 新手:需要帮助以将小总数包含在 运行 总数中,但不显示这些小总数的贡献行。
考虑这个数据
Amount Running Total
Denver 6,321 6,321
Portland 8,426 14,747
Boise 19,222 33,969
Helena 23,257 57,226
Bozeman 31,225 88,451
Seattle 36,894 125,345
我的要求是不显示任何低于 15,000 的金额,而是显示包含这些金额的 运行 总数。我不能显示数量或 运行 总数少于 15,000。这是为了确保小数字无法识别到特定城市。
像这样:
Amount Running Total
Other 19,222 33,969
Helena 23,257 57,226
Bozeman 31,225 88,451
Seattle 36,894 125,345
或者,理想情况下,需要什么:
Amount
Other 33,969
Helena 23,257
Bozeman 31,225
Seattle 36,894
感谢您的帮助 马丁
经过几次白板会议后,我的 co-conspirator 想出了一个简单的解决方案:添加一个新度量,计算 运行 总数与城市金额之间的差异。当此差异小于阈值时,这将是包含“其他”城市名称的汇总行,并且还使用 运行 总数而不是城市总数。感谢Tyson
下面是一些示例代码:
WITH
SET [OrderedSet] AS
Nonempty
(
ORDER
([Age].[Age Group B].[Age Group B].Members,
[Measures].[Emergency Room Visits per 1,000 Member Months],
BASC
)
)
MEMBER [Measures].[RowNumber] AS
Rank([Age].[Age Group B].CURRENTMEMBER,
[OrderedSet]
)
MEMBER [Measures].[Running Total] as
Sum(
Head
([OrderedSet],
([Measures].[RowNumber],[Age].[Age Group B].CurrentMember)
),
[Measures].[Emergency Room Visits per 1,000 Member Months]
)
MEMBER [Measures].[Ttl_RunTtl_Diff] AS
[Measures].[Running Total] - [Measures].[Emergency Room Visits per 1,000 Member Months]
MEMBER MEASURES.NewAge AS
IIF([Measures].[Ttl_RunTtl_Diff] = 0 OR [Measures].[Ttl_RunTtl_Diff]>15000
, [Age].[Age Group B].CURRENTMEMBER.Name, "Other")
MEMBER MEASURES.NewTotal AS
IIF([Measures].[Ttl_RunTtl_Diff] = 0 OR [Measures].[Ttl_RunTtl_Diff]>15000
, [Measures].[Emergency Room Visits per 1,000 Member Months], [Measures].[Running Total])
SELECT NON EMPTY
{
[Measures].[Emergency Room Visits per 1,000 Member Months],
[Measures].[Member Months],
[Measures].[Emergency Room Visits],
[Measures].[Running Total],
[Measures].[Ttl_RunTtl_Diff],
[Measures].[NewAge],
[Measures].[NewTotal]
}
ON COLUMNS,
NON EMPTY
FILTER({[OrderedSet]}
, [Measures].[Running Total] > 15000 )
ON ROWS FROM [Model]