微软BI 模糊查询: MDX 类似SQL查询中的Like的用法, 该如何写MDX代码?

0



已邀请:
4

SkyWalker - MS BI Fans 2013-08-30 回答

-- 模糊查询: MDX 类似SQL查询中的Like
--vbamdx!INSTR() 返回一个字符串在另一字符串中第一次出现的位置
-- 本例中, 返回 'Mountain'在子类别成员中第一次出现的位置, 如果位置大于等于1
-- 说明存在, 因此过滤出此成员
with
set as
filter(...members,
vbamdx!INSTR(..currentmember.name,
'Mountain',1>=1))
select
{.,.}
on 0,
{}
on 1
from




MDX模糊查询.png
1

brucelu - 大数据、数据仓库、数据挖掘均有涉猎 2013-08-30 回答

用上面的方法是可以实现MDX模糊查询的,但是在SSRS里面还是存在一些问题:
例如空值查询:
如果业务需要查看所有数据,空值查询会有一个汇总值会很不好。
刚刚跟SkyWalker沟通了一下有部分缺陷是传参条件会有些问题,用以下语句解决
WITH Set Product AS
Case When @Product='' then ..Children else
FILTER(..Members,
vbamdx!INSTR(..CURRENTMEMBER.Name,@product,1 >= 1 )) END
1

brucelu - 大数据、数据仓库、数据挖掘均有涉猎 2013-08-30 回答

续上一个回答,更正一下,顺便补充说明一下概念,各个维度一般都会有dimension-category-level-members,一般正常情况下我们也把category理解为level,例如:产品-产品架构,产品架构里面细分 产品大类-产品小类-产品。
这种层次结构的,里面的产品即dimension、产品架构即category、产品大类-产品小类-产品就是level了,level下面对应的成员就是member。
一般情况,是没有设置层次结构的,dimension的每一个维度属性都将创建一个这样的属性层次结构,这种是叫做Attribute Hierarchy属性层次结构,这个层次结构中就会有两个level。比如图中:“成员”和均是level,点开“成员”(level)看到的ALL是member,打开all发现子成员和点开我们看到的成员其实是一样的,如图:
11111.jpg

其次,我们用这个语句查询的时候(select . on 0,..defaultMember on 1 from )默认值是member ALL也就是说,Children作用于member上,Members作用于level上。
PS:修改一下上面的语句:
WITH Set Product AS
Case When @Product='' then ...Members else
FILTER(...Members,
vbamdx!INSTR(..CURRENTMEMBER.Name,@product,1 >= 1 )) END
或者你可以尝试把 ...Members 改成 ..Children也是可以的。
0

brucelu - 大数据、数据仓库、数据挖掘均有涉猎 2013-09-02 回答

开始试过解决空值查询的问题。
其他写法,如果输入l,好像有点问题。
亲测过,这个写法最标准啦,没有多余的查询错误。
WITH Set Product AS
Case When @Product='' then ...Members else
FILTER(...Members,
vbamdx!INSTR(..CURRENTMEMBER.Name,@product,1 >= 1 )) END

要回复问题请先登录注册