在我使用的OLAP数据库中,有一个"位置"层次结构,包括级别Company,Region,Area,Site,Room,Till.对于某个特定公司,我需要编写一些列出所有地区,区域和站点的MDX(但不包括站点下面的任何级别).目前我通过以下MDX实现了这一目标
HIERARCHIZE({
[Location].[Test Company],
Descendants([Location].[Test Company], [Location].[Region]),
Descendants([Location].[Test Company], [Location].[Area]),
Descendants([Location].[Test Company], [Location].[Site])
})
Run Code Online (Sandbox Code Playgroud)
因为我对MDX的了解有限,我想知道是否有一种更简单的方法可以做到这一点,用一个命令而不是四个命令?是否有一种不那么冗长的方法来实现这一目标,还是我的榜样是实现这一目标的唯一真正方式?
我在 MDX 查询中有以下计算成员:
MEMBER [Asset].[Class].[Fixed Income Derivatives (Inflation Linked)]
AS
(
[Asset].[Class].&[Fixed Income],
[Asset].[Sub Class].&[Derivatives],
[Asset].[Sub Class Type].&[Inflation]
)
Run Code Online (Sandbox Code Playgroud)
这在查询中使用如下:
SELECT
{
[Measures].[Market Value]
} ON 0,
NON EMPTY(
{
[Asset].[Class].[Fixed Income Derivatives (Inflation Linked)]
} ON 1
FROM [Asset]
Run Code Online (Sandbox Code Playgroud)
这很好用,当然也给了我所有与通货膨胀挂钩的固定收益衍生品的市场价值。
我现在尝试添加第二个计算成员,这次给我的所有固定收益derviatives这是不是通货膨胀挂钩。我虽然这会像EXCEPT
第二个成员一样简单:
MEMBER [Asset].[Class].[Fixed Income Derivatives (Non Inflation Linked)]
AS
(
[Asset].[Class].&[Fixed Income],
[Asset].[Sub Class].&[Derivatives],
EXCEPT(
[Asset].[Sub Class Type].[Sub Class Type],
[Asset].[Sub Class Type].&[Inflation]
)
)
Run Code Online (Sandbox Code Playgroud)
唉,不走运 - 它产生了错误
该函数需要参数的字符串或数字表达式。使用了元组集表达式。
这是一个令人困惑的消息,但对于 SSAS 中的课程来说是标准的。我确定我在正确的轨道上,只是有一点点错误,但我一生都无法发现问题。
下午大家。
我正在构建一个 Web 应用程序,并尝试从 SSAS 多维数据集中提取一些数据。
我有以下 MDX 我想在 c# 中复制,但添加了一些参数,即两个参数,一个用于公司 123,另一个用于位置 1:
@"SELECT NON EMPTY([Dim Unit].[All Units].[Category Group Name]) ON COLUMNS
FROM [Info]
WHERE ([Dim Company].[All Companies].&[123],
[Dim Location].[All Locations].&[123]&[1])";
Run Code Online (Sandbox Code Playgroud)
现在,我可以使用一个参数启动并运行它:
AdomdCommand cmdPDC = conPDC.CreateCommand();
cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM [Info] WHERE (StrToMember(@P1)";
string companyid = "123";
string sP1 = "[Dim Company].&" + company;
cmdPDC.Parameters.Add(new AdomdParameter("P1", sP1));
Run Code Online (Sandbox Code Playgroud)
但是我如何实现第二个参数,例如,如果我想在位置中粘贴一个参数?我在思考下面的思路,但我无法让小草皮工作:
AdomdCommand cmdPDC = conPDC.CreateCommand();
cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM …
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的 SSAS 维度,如下所示:
维度名称:DimKeyword
1个属性:Keyword,KeywordID为KeyColumn,Keyword(name)为NameColumn
使用 MDX,我想为 DimKeyword 维度获取具有Max MEMBER_KEY 的一行(不列出所有关键字),到目前为止我有:
WITH MEMBER KeywordID as
[Dim Keyword].[Keyword].currentmember.MEMBER_KEY
SELECT {KeywordID} on COLUMNS
FROM [Some Cube]
Run Code Online (Sandbox Code Playgroud)
虽然这似乎只返回 0 (我认为这是给成员的)。任何人都可以帮忙吗?
谢谢!
我正在尝试从MDX选择查询中的维度中过滤掉一些点。我已经使用了http://mondrian.pentaho.com/documentation/mdx.php中记录的Filter(,)函数。正在运行的MDX如下
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].MEMBERS, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
但是Measures.AMOUNT仍在考虑Dim1.A,Dim1.B和Dim1.C。能否请您指出我的语法有什么问题?我也尝试了Except(,)。
最好,罗汉
更新:
感谢Marc,为我指出了正确的方向。我进行了更多测试,发现Member函数还返回一个点“ All”,其中包括我维度上的所有点。因此,即使Filter()或Except()函数正确地过滤了点,“全部”点仍包含所有点的值,因此将它们包括在Measure.AMOUNT计算中。相反,我使用了Children函数,该函数未返回“ All”点,因此我看到了所需的结果。更新了下面的MDX
使用Filter和NOT IN来工作MDX(警告:NOT IN是Mondrian特定的操作)
SELECT {[Measures].[AMOUNT]} on 0,
{Filter ([DIM1].Children, [DIM1].CurrentMember NOT IN {[DIM1].[A], [DIM1].[B], [DIM1].[C]})} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} on 3,
{[CURRENCY].[EUR]} on 4
from [CUBE]
Run Code Online (Sandbox Code Playgroud)
使用MDX除外
SELECT {[Measures].[AMOUNT]} on 0,
{except ( {[DIM1].Children}, {[DIM1].[A], [DIM1].[B], [DIM1].[C]} )} on 1,
{[DIM2].[S]} on 2,
{[DIM3].[EFO]} …
Run Code Online (Sandbox Code Playgroud) 我正在使用以下内容,但我认为可能有一种更简单的方法可以All
从结果中排除成员?
WITH
SET [Non_All_Distributors] AS
{FILTER(
[Distributor Name].members,
(InStr(1, [Distributor Name].CurrentMember.NAME, "All") = 0)
)}
SET [Non_All_Countries] AS
{FILTER(
[Geography Country].members,
(InStr(1, [Geography Country].CurrentMember.NAME, "All") = 0)
)}
SELECT
NON EMPTY
[Dimension].[Hierarchy].DEFAULTMEMBER
ON COLUMNS,
NON EMPTY
[Non_All_Distributors]
*
[Non_All_Countries]
*
Tail([Date].[Date - Calendar Month].[Calendar Day].Members,60)
*
{
[Measures].[Revenue],
[Measures].[NumClients]
}
ON ROWS
FROM [OURCUBE]
Run Code Online (Sandbox Code Playgroud) 我试图在列中产生不同的输出,具体取决于维度的值是否[Scenario].[Option]
是+5
我尝试使用该IIf
函数实现的值。
WITH MEMBER [XorY] AS
(
IIf([Scenario].[Option] = +5, 'X', 'Y')
--IIf([Scenario].[Option].&[+5], 'X', 'Y')
)
SELECT
NON EMPTY
(
[Scenario].[Option].[Option]
) ON ROWS,
NON EMPTY
(
[XorY]
) ON COLUMNS
FROM [RePro]
WHERE
(
[ABC].[ABC].[Val]
) CELL PROPERTIES VALUE
Run Code Online (Sandbox Code Playgroud)
但是,使用上述任一语句IIf
始终[XorY]
与Y
的值无关[Scenario].[Option]
。看来我所做的比较在语法上是错误的。我该怎么做呢?我注意到如果我在条件[Measures]
的维度中使用计算成员,效果会更好IIf
,但在我的情况下这是不可能的 - 我必须使用[Scenario].[Option]
.
感谢您收到的任何帮助:)
我有两个几乎相似的 MDX 查询,一个是我使用 .CHILDREN,另一个是 .ALLMEMBERS。第一个不返回行,第二个返回两行。请帮助我理解为什么!
查询 1
select
[Measures].[Claim As Of - Count] on 0,
[Accident Date].[Year].allmembers on 1
from [AW Cube]
where [Accident Date].[Year-Quarter-Month-Date].[Year].&[2010]
Run Code Online (Sandbox Code Playgroud)
---2行
查询 2
select
[Measures].[Claim As Of - Count] on 0,
[Accident Date].[Year].children on 1
from [AW Cube]
where [Accident Date].[Year-Quarter-Month-Date].[Year].&[2010]
Run Code Online (Sandbox Code Playgroud)
--没有行
---- 索赔截至 - 计数 -- 全部 637,350 --2010 637,350
总而言之,AccidentDate 是我的 Cube [AW Cube] 中的维度之一。Year 是自然层次结构,而 [Year-Quarter-Month-Date] 是用户定义的层次结构。[年-季-月-日]按以下方式创建:年-->月-->季度-->日期。所以'年'可以通过做[事故日期].[年-季度-月-日].[年].成员和[事故日期].[年].成员来获得。
我是 MDX 查询的新手。我正在编写一个 MDX 查询来选择跨月的度量值,我将日期范围作为过滤器放在这里只是为了限制返回的月数。例如,我想要在 2014 年 1 月 1 日到 2014 年 6 月 30 日的日期范围内每个月的销售收入。理想情况下,它应该给我六个月的销售价值,即一月、二月、三月、四月、五月和六月。但是,当我写下面的查询时,出现错误。PFB 在下面输入代码here`ow 查询。
Select NON EMPTY {[Measures].[Target Plan Value]} ON COLUMNS,
NON EMPTY {[Realization Date].[Hierarchy].[Month Year].Members} ON ROWS
From [Cube_BCG_OLAP]
( { [Realization Date].[Hierarchy].[Date].&[20140101] :
[Realization Date].[Hierarchy].[Date].&[20141231] })
Run Code Online (Sandbox Code Playgroud)
我得到的错误是Hierarchy
层次结构已经出现在Axis1
轴中。这里 Date 和 Month Year 属于同一个名为 的维度表Realization Date
。请帮我。提前致谢。