请教:一个简单的MDX查询问题(关于成员属性的使用)

liuri璇玑 2009-09-21 02:04:41
我希望显示出机构BG00000118的各业务员(包括业务员编写与名称)的月销售量Month_Quantity
[salesman].[Personnel]是一个维度,有键Personnel,属性Personnel_name

现在,如果只显示编码没问题,即:
select {[Measures].[Month_Quantity]} on 0
,non empty {[salesman].[Personnel].[Personnel]} on 1
from [渠道分析]
where ([office].[organ].&[BG00000118])
只返回5条记录,即我这个机构按业务员汇总的销量


WITH MEMBER own_cust AS
[salesman].[Personnel].CurrentMember.Properties("Personnel_name")

select {own_cust,[Measures].[Month_Quantity]} on 0
,non empty {[salesman].[Personnel].[Personnel]} on 1
from [渠道分析]
where ([office].[organ].&[BG00000118])
会返回2000多条,即所有业务员的销量,where ([office].[organ].&[BG00000118])就象没起作用式的

请问应该如何处理?
...全文
205 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuri璇玑 2009-09-22
  • 打赏
  • 举报
回复
谢谢!
bendanlzh 2009-09-21
  • 打赏
  • 举报
回复
http://blog.csdn.net/bendanlzh/archive/2009/06/27/4302215.aspx
之前做二次开发的一点关于成员属性的总结,只是我个人观点!
bendanlzh 2009-09-21
  • 打赏
  • 举报
回复
问题有点复杂,我说说我的观点啊。
([salesman].[Personnel].[Personnel],[salesman].[Personnel_name].[Personnel_name])和
[salesman].[Personnel].[Personnel]*[salesman].[Personnel_name].[Personnel_name] 其实都是对这两个集合做笛卡尔积,得到一个成员集合,效果是一样的,效率上没什么实质的差别,Crossjion能少用的尽量少用,或者是Crossjion前将参与的集合成员最小化。
[salesman].[Personnel].CurrentMember.Properties("Personnel_Name")
成员属性有一个好处就是在维度中可以不用建成层次结构级关系而使用它,也就是它在cube处理时,不计算它和别的维度的聚合(减少cube大小),但同时又能保持它和键属性间的关系。它的用处很多,如客户端展示工具的tip,条件过滤……等等。
liuri璇玑 2009-09-21
  • 打赏
  • 举报
回复
对的,把non empty去掉,
select {[Measures].[Month_Quantity]} on 0
,{[salesman].[Personnel].[Personnel]} on 1
from [渠道分析]
where ([office].[organ].&[BG00000118])
显示结果就是2000多条,和加了own_cust一样

偶明白了,因为own_cust导致0轴结果集不为空,所以就显示了这么多

刚刚还发现,其实好象写法上没有我想像的复杂,不用WITH显示属性,直接
select {[Measures].[Month_Pres_Quantity]} on 0
,non empty {
([salesman].[Personnel].[Personnel],[salesman].[Personnel_name].[Personnel_name])} on 1
from [渠道分析]
where ([office].[organ].&[BG00000118])

发现用[salesman].[Personnel].[Personnel],[salesman].[Personnel_name].[Personnel_name]

[salesman].[Personnel].[Personnel]*[salesman].[Personnel_name].[Personnel_name]

都可以实现,是否是用,这种方式效率最高呢?

那么,[salesman].[Personnel].CurrentMember.Properties("Personnel_Name")
这种情况又是一般在什么时候需要用到呢,在属性必须显示在事实数据中时?

bendanlzh 2009-09-21
  • 打赏
  • 举报
回复
我理解是这样的,在你这里[office].[organ].&[BG00000118]和[salesman].[Personnel]是两个维度没有关系,
第一个查询之所以查询来是5跳记录是以为你的其它的成员的[Measures].[Month_Quantity]的事实数据为空,被non empty去掉了
第二个查询,因为查询中多了own_cust它的事实数据不为空了,所以non empty过滤不掉了,所以就是所有的成员了。
当然这是我的猜想。还得等你查了上面说得语句后才知道
bendanlzh 2009-09-21
  • 打赏
  • 举报
回复
select {[Measures].[Month_Quantity]} on 0
,non empty {[salesman].[Personnel].[Personnel]} on 1
from [渠道分析]
where ([office].[organ].&[BG00000118])
你把这里的non empty去掉看一下能查询多少个?
liuri璇玑 2009-09-21
  • 打赏
  • 举报
回复
我发现这样写就可以了
WITH
MEMBER own_cust AS
[salesman].[Personnel].CurrentMember.Properties("Personnel_Name")

select {own_cust,[Measures].[Month_Quantity]} on 0
, non empty {FILTER([salesman].[Personnel].[Personnel],[office].[organ].&[BG00000118])} on 1
from [渠道分析]

可我理解散不了,这个写在where 里,和写在FILTER里的区别是什么
而且,这个时候我如果还要加条件,写在where里也是有效果的了
内容概要:本文深入讲解了CUDA纹理内存的原理及其在优化具有空间局部性的二维数据访问中的应用。文章首先介绍纹理内存的技术背景,包括其硬件级缓存机制、对空间局部性的支持、自动边界处理和硬件加速插值等优势,并列举其在图像处理、计算机视觉、科学计算和深度学习中的典型应用场景。随后详细剖析了纹理内存的硬件架构、访问模式优化机制及现代纹理对象API的使用方法。通过高斯模糊这一典型案例,完整展示了从纹理对象创建、核函数实现到主机端集成的全流程,并对比了纹理内存与全局内存的性能差异,实测显示纹理内存可带来显著加速(约2.19倍)。文章还介绍了多项高级优化技巧,如使用线性插值、cudaArray内存布局、多通道向量读取以及共享内存协同策略,并提供了编译、运行、性能分析和常见问题排查的实用指南。最后总结了适用场景判断标准并指出了进一步学习的方向。; 适合人群:具备一定CUDA编程基础的研发人员,熟悉GPU内存模型和C/C++语言,从事高性能计算、图像处理或深度学习底层开发的技术人员; 使用场景及目标:①优化图像卷积、模糊、缩放等二维空间数据访问密集型任务的性能;②掌握如何利用纹理内存提升GPU程序缓存命中率、降低内存延迟、减少分支发散;③学习现代CUDA纹理对象API的最佳实践及性能调优方法; 阅读建议:此资源强调理论与实践结合,建议读者在支持计算能力3.0以上的GPU环境中动手编译运行示例代码,使用Nsight系列工具进行性能剖析,并尝试修改纹理参数(如filterMode、addressMode)观察行为变化,以深入理解纹理内存的工作机制。

7,394

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧