MDX 边界情况处理

MDX语言的测试开发 MDX是一种用于处理OLAP(联机分析处理)多维数据的查询语言。与SQL相似,MDX用于从多维数据集中获取数据,但由于其处理的是多维数据,MDX的语法和功能相对复杂。SELECT子句:指定要返回的维度和度量值。FROM子句:指定数据源,即要查询的多维数据集。WHERE子句:用于筛选数据,例如按时间、地区等维度。WITH子句:用于定义计算成员或命名集。 阅读详情

 

MDX 边界情况处理 (2009-04-08 14:39:34)

本文来源于《MDX Solutions with Microsoft SQL.Server Analysis Services 2005 and Hyperion Essbase 2nd Edition》一书的内容。在编写MDX中,各种各样的边界情况存在,比如:Member不存在,被0除,或则某个部分在cube和维度中并不存在等等,本文对这些情况下如何来处理做了一个小结。以下MDX语句可以在SSAS的示例库:Adventure Works中运行。 
 

Member不存在的情况

在使用Member的一些函数(比如:Lag,Lead,ParalledPeriod等)的时候,我们经常需要得到当前的Member相对的一个Member(比如:前一个Member,父级Member,或去年同期的一个Member等等)。然而由于维度和Hierarchy中的Member是有限的,所以这个相对的Member有时并不存在。在这种情况下,我们可以用IIF判断这个Member是否为Null来解决这个问题(z)。比方说,计算过去6个月的平均销售额。

WITH MEMBER [Measures].[Last 6 Month Average Sales Amount] AS
IIF (
    [Date].[Calendar].CurrentMember.Lag(5) IS NULL,
    NULL,
    Avg (
        {[Date].[Calendar].CurrentMember.Lag(5): [Date].[Calendar].CurrentMember},
        [Measures].[Internet Sales Amount]
    )
), FORMAT_STRING="Currency"
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Last 6 Month Average Sales Amount]} ON 0,
{[Date].[Calendar].[Month].Members} ON 1
FROM [Adventure Works]

这里需要注意的是如果 Cell(也就是Turple)不存在也会发生和Member不存在的相同的问题,其实如果Member不存在,Cell是一定不存在的,所以“Member不存在的情况”也可以被看作是“Cell不存在的情况”。
 

Level错误的情况

有的时候,Axis中的Set包含了位于不同Level的Member,而且每个Level中对于Member的处理方式不同,这种情况下的处理也要小心。比方说,在计算每种产品和其所属SubCategory,Category的销售量的时候,对于产品我们需要显示其标准价格(List Price),我们可以象下面这样来写。

WITH MEMBER [Measures].[Product List Price] AS
IIF (
    [Product].[Product Categories].CurrentMember.Level IS [Product].[Product Categories].[Product Name],
    [Product].[Product Categories].CurrentMember.Properties("List Price"),
    NULL
)
SELECT
{[Measures].[Internet Sales Amount],[Measures].[Product List Price]} ON 0,
{DESCENDANTS([Product].[Product Categories].[All], [Product].[Product Categories].[Product Name], SELF_AND_BEFORE )} ON 1
FROM [Adventure Works]

 


被0除的情况
表达式出现0为除数的情况有两种:
1)Member, Cell(也就是Turple)不存在
SSAS中,如果Member, Cell不存在,其返回的值是0。比如:统计每个月每种产品的销售额时,但是有可能在某个月份某个产品由于没有卖出一个。这种情况下,上文已有说明。
2)Cell统计的值为0
比如:统计每个月份占所处季度利润百分比的时候,有可能该季度的利润为0。

无论是那种情况,对于被0除你可以用判断表达式是否为0来处理,像下面这样计算同期比:

WITH MEMBER [Measures].[Same Period Ratio] AS    
IIF (
    (   
        [Measures].[Internet Sales Amount],
        ParallelPeriod(
            [Date].[Calendar].[Calendar Year],
            1,
            [Date].[Calendar].CurrentMember
        )
    ) = 0,
    NULL,
    [Measures].[Internet Sales Amount]/
    (   
        [Measures].[Internet Sales Amount],
        ParallelPeriod(
            [Date].[Calendar].[Calendar Year],
            1,
            [Date].[Calendar].CurrentMember
        )
    ) - 1
), FORMAT_STRING="Percent"
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Same Period Ratio]} ON 0,
NON EMPTY{DESCENDANTS([Date].[Calendar].[All Periods], [Date].[Calendar].[Month], SELF)} ON 1
FROM [Adventure Works]

17、MDX与OLAP Cube功能全解析 本文深入解析了MDX与OLAP Cube的核心功能,包括MDX查询基础、函数分类、时间函数的使用,以及OLAP Cube的商业智能功能、计算成员、命名集、关键绩效指标等。通过实际应用案例,展示了如何利用MDX和OLAP Cube进行销售数据分析和业务绩效评估,为数据驱动的业务决策提供了技术支持和实践指导。 阅读详情

相关推荐

frontEndCubo:.Net API消耗量的前端(Cube-MDX)

#Front-End Client使用MDX语言利用CUBE查询 掌握网络技术和移动设备 拉萨尔大学

深度分享:OLAP CUBE、空间换时间、MDX(下)

它会先跑一遍SELECT SUM(收入)FROM 表 GROUP BY 时间,接着就是SELECT SUM(收入)FROM 表 GROUP BY 时间、区域,接着就是SELECT SUM(收入)FROM 表 GROUP BY 时间、区域、产品,然后就可以是SELECT MAX(收入)FROM 表 GROUP BY 时间、区域、产品,就是把各种聚合函数、各种指标、各种维度、各种维度属性的查询SQL全都执行一遍,把结果存储起来管理起来,就变成了一个多维立方体就是CUBE。从代码量上比,MDX比SQL要少很多。

派可数据的博客 716

PLC作为Modbus TCP客户端

PLC作为Modbus TCP客户端,Modbus Slave作为服务器

soledad_chao的博客 4378

BI中的特殊语言——MDX

BI中的特殊语言——MDX(下)作者:戴子良、李苗      在上期文章中,我们针对MDX语言,从简单的语法要素入手,以进阶的方式,介绍MDX从基础到高级的应用,以及MDX与SQL之间显著的区别。本期文章将继续MDX的高级应用话题,为大家介绍MDX更为广泛的使用途径。      在SSIS中使用MDX       在处理ETL时,我们有时需要在ETL

DaiZiLiang的专栏 5621

别再折腾端口了!Kali Nethunter Kex 图形化桌面连接失败的真正原因与一键修复(附Termux命令)

本文深入分析了Kali Nethunter Kex图形化桌面连接失败的真正原因,包括端口配置变更、依赖缺失和权限问题,并提供了一键修复方案和Termux命令。通过详细的诊断步骤和优化配置,帮助用户快速恢复Kex功能,提升移动安全测试效率。

weixin_42530732的博客 417

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月13日-安全配置-准备工作

请遵循本规程将SABRE 3D/3DxT/3D Scimitar系统设置为安全配置,以便能够在电镀单元、APT模块、XMM(或SRD)模块、工厂接口(FI)外壳或中央通道内部及周边区域执行作业p104-p117。在生产过程中暂停调度程序存在一定风险:若待维护模块未离线且在其他模块完成处理前重启调度程序,可能对生产晶圆造成影响。维护人员需特别注意电镀模块内的晶圆状态,并尽可能快速地恢复调度程序。确认待维护模块内无晶圆滞留暂停调度程序并将相应模块设置为离线状态打开模块检修门并关闭安全盖板(槽位)

weixin_46735260的博客 1363

MDX常见计算方法(百分比/分配/平均值/基于时间的计算)

MDX常见计算方法(百分比/分配/平均值/基于时间的计算)

jackfor001的专栏 2884

保姆级教程:用Python spatialdata框架搞定10x Xenium空间转录组数据(从下机到高级分析)

本教程详细介绍了如何使用Python spatialdata框架处理10x Xenium空间转录组数据,从数据获取到高级分析的全流程。涵盖环境配置、数据读取、质量控制、降维聚类、细胞注释及空间共定位分析等关键步骤,特别适合生物信息学研究者快速掌握Xenium数据分析技术。

weixin_30300225的博客 480

使用MDX计算去年年累计

同比、环比、年累计等等MDX计算方式网上一大堆,但是还缺少一些,以下是整理出的一种使用微软MDX计算 去年年累计的计算方法。或许可以提供给大家参考一下。WITH MEMBER [Measures].[LastYearYTDSalesAmount] AS Aggregate(YTD(ParallelPeriod([DimTime].[Y-M-D].[YEAR], 1, [Dim...

weixin_34355881的博客 459

ESP32S3学习——i2c,点亮0.96寸oled

ESP32S3学习——i2c,点亮0.96寸oled

HandBAI的博客 1万+

OpenWRT系统启动流程全解析:从procd到ubus的完整链路(附源码分析)

本文深入解析了OpenWRT系统从内核移交控制权到用户空间服务就绪的完整启动链路。核心聚焦于进程管理器procd与通信总线ubus的协同工作机制,通过源码分析揭示了状态机转换、服务注册与事件分发的内在逻辑,为系统定制、启动优化与故障调试提供了清晰指南。

weixin_28335283的博客 532

在MDX中处理边界情况

本文来源于《MDX Solutions with Microsoft SQL.Server Analysis Services 2005 and Hyperion Essbase 2nd Edition》一书的内容。在编写MDX中,各种各样的边界情况存在,比如:Member不存在,被0除,或则某个部分在cube和维度中并不存在等等,本文对这些情况下如何来处理做了一个小结。以下MDX语句可以在SSA

robot1980的专栏 791

【乐企-工具篇】生成发票左上角二维码

【代码】【乐企-业务篇】生成发票左上角二维码。

九七的博客 707

[MDX学习笔记之二]在MDX中处理边界情况

本文来源于《MDX Solutions with Microsoft SQL.Server Analysis Services 2005 and Hyperion Essbase 2nd Edition》一书的内容。在编写MDX中,各种各样的边界情况存在,比如:Member不存在,被0除,或则某个部分在cube和维度中并不存在等等,本文对这些情况下如何来处理做了一个小结。以下MDX语句可以...

weixin_30550081的博客 125

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

next-mdx-remote错误处理:如何优雅处理MDX编译错误的完整指南

在Next.js项目中处理MDX内容时,`next-mdx-remote`是一个强大的工具,它允许开发者在`getStaticProps`或`getServerSideProps`中加载MDX内容并在客户端正确进行水合处理。然而,在实际使用过程中,MDX编译错误是开发者和内容创作者经常遇到的问题。本文将详细介绍如何优雅地处理这些错误,确保你的应用在遇到问题时能够提供清晰的反馈和良好的用户体验。

gitblog_00244的博客 247

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MDX语言的人工智能

MDX(Multidimensional Expressions)是一种用于多维数据查询和分析的语言,最初由微软开发,主要用于其SQL Server Analysis Services(SSAS)中的多维数据集。MDX语法灵活高效,能够处理复杂的数据结构,非常适合大数据和商业智能(BI)应用。多维数据处理:MDX能够处理多维数据模型,支持对数据进行多层次、多维度的分析。这使得用户可以从不同的角度和层次去深入了解数据。灵活的查询能力。

2501_90443976的博客 714

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MDX语言的正则表达式

MDX(Multidimensional Expressions)是由Microsoft开发的一种查询语言,主要用于分析和检索多维数据。多维数据模型:MDX支持对多维数据模型进行查询,适用于复杂的商业智能和数据分析场景。公式运算:MDX允许用户在查询中进行复杂的计算,能够创建动态的报表。层次结构查询:MDX能高效地处理数据层次结构,例如时间维度(年份、季度、月份)或地理维度(国家、城市)。正则表达式作为强大的文本处理工具,在MDX语言中扮演着重要的角色。

2501_90231429的博客 1634

MDX语言的操作系统

MDX(Multidimensional Data eXchange)语言是一种专为多维数据处理而设计的编程语言。它的设计初衷是为了满足复杂数据分析和可视化的需求,尤其是在大数据和云计算环境中,MDX语言提供了强大的数据查询和计算能力。在MDX语言操作系统中,这种语言不仅是一种开发工具,还是操作系统的核心构建模块,为用户提供了丰富的功能。

2501_90587143的博客 702

MDX语言的回归测试

多维数据处理:MDX能够在多维数据模型中对维度、度量和层次进行操作,为用户提供灵活的数据分析工具。语法简洁:MDX的语法相对简单,使用者可以通过直观的命令来执行复杂的查询。强大的聚合能力:MDX允许对数据进行快速聚合和计算,使得分析过程高效快捷。回归测试是软件测试中的一种测试类型,旨在验证对软件系统进行的修改(如修补、功能扩展、优化等)是否会破坏系统的已有功能。通过对系统进行回归测试,可以确保在修复BUG或增加新功能后,系统原有的功能仍能正常工作。

2501_91310397的博客 973

MDX语言的自动化测试

MDX语言是一种用于查询和操作多维数据集的表达式语言。它被广泛应用于商业智能、数据仓库和在线分析处理(OLAP)等领域。与SQL不同,MDX专注于多维数据的分析,可以更直观地反映数据之间的关系,使分析师能够快速获取所需的信息。通过引入MDX自动化测试,团队的工作效率提高了30%,数据分析结果的准确性显著增加。此外,团队成员对自动化测试的认识也有所提升,形成了良好的自动化测试文化。

2501_91241473的博客 1413

MDX语言的测试

在现代商务智能(Business Intelligence, BI)和数据分析中,MDX(多维表达式,Multidimensional Expressions)作为一种重要的查询语言,被广泛应用于OLAP(联机分析处理)系统。这种语言能够有效地从多维数据集中查询和分析数据,为决策提供实时支持。本文将探讨MDX的基本概念、语法、使用方法以及在实际应用中的测试案例,以帮助读者深入理解MDX语言的魅力。

2501_91409106的博客 456

MDX语言的手动测试

MDX(Multidimensional Expressions)是一种多维数据操作的查询语言,最初由Microsoft为其SQL Server Analysis Services(SSAS)开发。MDX与传统的SQL不同,它专门用于对多维数据集(Data Cubes)进行分析。MDX允许用户进行复杂的计算、数据聚合和数据切片,适用于需要对数据进行多维分析的场景。

2501_90990402的博客 393
上一篇: 常用MDX计算查询(
下一篇: SQLServer2005 XML在T-SQL查询中的典型应用
jackfor001
博客等级 码龄22年 41粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值