【发布时间】:2017-06-13 11:13:44
【问题描述】:
我有一个用于学习目的的简化示例立方体,并试图找出更复杂的问题。
立方体代表一个小的网络服务器日志,
- 作为衡量标准的命中数
- 主机名作为维度
- http 状态码作为维度
我可以通过 MDX 了解每个主机的点击次数和 http 状态代码
SELECT NON EMPTY { [Measures].[CNT HITS] } ON COLUMNS,
NON EMPTY { ([DIM NOS STATUSCODE].[Statuscode].[Statuscode].ALLMEMBERS *
[DIM NOS HOST].[HOST].[HOST].ALLMEMBERS ) } ON ROWS
FROM [DW]
现在我想要通过各种 HTTP 状态代码进行分组,例如显示成功命中的百分比(所有 2xx 状态代码),不成功命中的百分比(所有非 2xx 状态代码)。
我可以用 SQL 做到这一点,但我不知道如何用 MDX 做到这一点。例如我会用 SQL 做:
select HOST,
sum(CNT_HITS) as HITS ,
SUM(CASE WHEN s.statuscode div 100 = 2 THEN CNT_HITS ELSE 0 END)/sum(CNT_HITS) * 100 as success_percent,
SUM(CASE WHEN s.statuscode div 100 = 2 THEN 0 ELSE CNT_HITS END)/sum(CNT_HITS) * 100 as failed_percent,
sum(CASE WHEN s.statuscode = 401 THEN CNT_HITS ELSE 0 END)/sum(CNT_HITS) * 100 as auth_fail_percent
from FACT_NOS_HTTPLOG fact
group by HOST;
对于上面屏幕截图中显示的数据,我会得到
+-----------------+------+-----------------+----------------+-------------------+
| HOST | HITS | success_percent | failed_percent | auth_fail_percent |
+-----------------+------+-----------------+----------------+-------------------+
| www.example.com | 1610 | 93.1677 | 6.8323 | 6.2112 |
| www.test.com | 50 | 0.0000 | 100.0000 | 0.0000 |
+-----------------+------+-----------------+----------------+-------------------+
但是我怎样才能用 MDX 做到这一点呢?
【问题讨论】: