标签: mdx

在MDX中列出成员及其所有后代的最佳方法是什么?

在我使用的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

3
推荐指数
1
解决办法
626
查看次数

在计算成员中使用 EXCEPT

我在 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 中的课程来说是标准的。我确定我在正确的轨道上,只是有一点点错误,但我一生都无法发现问题。

ssas mdx

3
推荐指数
1
解决办法
6104
查看次数

以编程方式添加 Adomd 参数 C#

下午大家。

我正在构建一个 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)

c# mdx adomd.net

3
推荐指数
1
解决办法
5638
查看次数

MDX 从 Dimension 中获取 MAX MEMBER_KEY

我有一个非常简单的 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 (我认为这是给成员的)。任何人都可以帮忙吗?

谢谢!

ssas mdx dimensions

3
推荐指数
1
解决办法
8464
查看次数

在MDX查询中使用NOT IN

我正在尝试从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)

mdx mondrian

3
推荐指数
1
解决办法
7923
查看次数

从集合中排除 (All)

我正在使用以下内容,但我认为可能有一种更简单的方法可以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)

ssas mdx

3
推荐指数
1
解决办法
2556
查看次数

MDX:IIf 尺寸值的条件始终为 false

我试图在列中产生不同的输出,具体取决于维度的值是否[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].

感谢您收到的任何帮助:)

sql-server ssas mdx iif ssas-2008

3
推荐指数
1
解决办法
2万
查看次数

在 MDX 语句中使用 .CHILDREN 和 .ALLMEMBERS 时的结果差异

我有两个几乎相似的 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] 是用户定义的层次结构。[年-季-月-日]按以下方式创建:年-->月-->季度-->日期。所以'年'可以通过做[事故日期].[年-季度-月-日].[年].成员和[事故日期].[年].成员来获得。

sql sql-server ssas mdx ssas-2012

3
推荐指数
1
解决办法
3555
查看次数

带有日期范围过滤器的 MDX 查询

我是 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。请帮我。提前致谢。

mdx date

3
推荐指数
1
解决办法
2万
查看次数

防止 MDX 注入攻击

使用 C# 防止 MDX 注入攻击的好方法是什么?我目前正在使用 ADOMDClient 是否应该使用其他客户端?

c# mdx

3
推荐指数
1
解决办法
2223
查看次数

标签 统计

mdx ×10

ssas ×5

c# ×2

sql-server ×2

adomd.net ×1

date ×1

dimensions ×1

iif ×1

mondrian ×1

sql ×1

ssas-2008 ×1

ssas-2012 ×1