惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News | PayPal Newsroom
TaoSecurity Blog
TaoSecurity Blog
Google Online Security Blog
Google Online Security Blog
NISL@THU
NISL@THU
T
Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Engineering at Meta
Engineering at Meta
AWS News Blog
AWS News Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Privacy International News Feed
B
Blog
PCI Perspectives
PCI Perspectives
Martin Fowler
Martin Fowler
Spread Privacy
Spread Privacy
P
Proofpoint News Feed
T
Tenable Blog
F
Fortinet All Blogs
G
GRAHAM CLULEY
V2EX - 技术
V2EX - 技术
C
Check Point Blog
Project Zero
Project Zero
P
Palo Alto Networks Blog
J
Java Code Geeks
W
WeLiveSecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
The Exploit Database - CXSecurity.com
博客园 - 司徒正美
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
Last Week in AI
Last Week in AI
Forbes - Security
Forbes - Security
C
Cybersecurity and Infrastructure Security Agency CISA
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Recent Announcements
Recent Announcements
博客园 - Franky
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Recorded Future
Recorded Future
The Last Watchdog
The Last Watchdog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
Cisco Talos Blog
Cisco Talos Blog
量子位
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - microsheen

[MDX学习笔记之五]优化Set操作——SUM中的CrossJoin [MDX学习笔记之四]Where vs. Subselect/Subcube [MDX学习笔记之三]MDX的上下文(Context) [MDX学习笔记之二]在MDX中处理边界情况 SQL Server 2005 SP2 CTP 在11月7号发布了 [MDX学习笔记之一]MDX中一些常见的计算 SSAS中Cube的结构 SQL Server2005对XML的支持 2006 Tech.Ed 第二天见闻 2006 Tech.Ed 第一天见闻 C#简单命名指南 [.net泛型学习笔记之三]再测泛型的性能 [.net泛型学习笔记之二]泛型的性能 [.net泛型学习笔记之一]泛型介绍 [设计模式学习笔记之二]设计模式和量体剪衣 Note Three: studying JavaScript: The Definitive Guide, 4th Edition Note Two : studying JavaScript: The Definitive Guide, 4th Edition Note One —— studying JavaScript: The Definitive Guide, 4th Edition [设计模式学习笔记之一]面向对象是什么?
如何使用MDX编写同比和环比
microsheen · 2006-10-28 · via 博客园 - microsheen

在做BI项目中,用户会经常提出类似下面这样的需求:
1. 本月比上月的销售额增长了多少?百分比是多少?
2. 本季度第一个月比上季度第一个月的销售额增长了多少?百分比是多少?

其实这两个需求就是我们常说的同比和环比问题,它们用关系数据库的SQL语句难于实现,而用BI中的MDX来做却轻而易举。以下例子采用的是SQL Server2005的Analysis Services中的示例库。

环比
需求:本月比上个月的销售额增长了多少个百分点?
MDX语句如下:

WITH MEMBER Measures.[Amount Change Rate] AS 
  
[Measures].[Internet Sales Amount]/
  (
[Measures].[Internet Sales Amount],[Date].[Fiscal].CurrentMember.PrevMember) -1
  , FORMAT_STRING 
= '0%'
SELECT 
{
[Measures].[Internet Sales Amount], Measures.[Amount Change Rate]ON 0,
[Date].[Fiscal].[Month].Members ON 1
FROM [Adventure Works]

结果如下:

上面的输出结果有一个问题,就是第一行数据会发生除0的情况,为了防止这种情况,MDX修改如下:

WITH MEMBER Measures.[Amount Change Rate] AS 
  IIF(ISEMPTY((
[Measures].[Internet Sales Amount],[Date].[Fiscal].CurrentMember.PrevMember)), "", 
   
[Measures].[Internet Sales Amount]/
  (
[Measures].[Internet Sales Amount],[Date].[Fiscal].CurrentMember.PrevMember) -1
  ), FORMAT_STRING 
= '0%'
SELECT 
{
[Measures].[Internet Sales Amount], Measures.[Amount Change Rate]ON 0,
[Date].[Fiscal].[Month].Members
 
ON 1
FROM [Adventure Works]

如果发现0为空,则显示空字符串。输出结果如下:

同比
需求:本季度每个月比上个季度同期销售额增长了多少个百分点?

WITH MEMBER Measures.[Change Amount Rate] AS 
 
[Measures].[Internet Sales Amount]/
 (  
[Measures].[Internet Sales Amount]
    Cousin(
[Date].[Fiscal].CurrentMember, [Date].[Fiscal].CurrentMember.Parent.PrevMember)
 ) 
- 1, FORMAT_STRING = '0%'   
SELECT {[Measures].[Internet Sales Amount], Measures.[Change Amount Rate]ON 0,
[Date].[Fiscal].[Month].Members ON 1
FROM [Adventure Works]

运行结果如下:

和环比相同,这里也出现了除0的情况,所以把MDX做如下修改:

WITH MEMBER Measures.[Change Amount Rate] AS 
  IIF(
    (
[Measures].[Internet Sales Amount]
     Cousin(
[Date].[Fiscal].CurrentMember, [Date].[Fiscal].CurrentMember.Parent.PrevMember)
    )=0
    , "", 
     
[Measures].[Internet Sales Amount]/
     (  
[Measures].[Internet Sales Amount]
        Cousin(
[Date].[Fiscal].CurrentMember, [Date].[Fiscal].CurrentMember.Parent.PrevMember)
     ) 
- 1
  ), FORMAT_STRING 
= '0%'   
SELECT {[Measures].[Internet Sales Amount], Measures.[Change Amount Rate]ON 0,
[Date].[Fiscal].[Month].Members ON 1
FROM [Adventure Works]

输出结果如下:

总结
同比和环比是BI项目中经常要做得内容,采用MDX语句可以轻松的实现这个需求。