【问题标题】:mdx cross join a dimension and measuremdx 交叉连接维度和度量
【发布时间】:2014-06-18 15:40:51
【问题描述】:

我是 MDX 新手,查看此查询,为什么 [Top Product Sales] 中的交叉联接中的 item(0) 仅返回 Internet Sales Amount?交叉连接不应该返回一组(产品,互联网销售额)吗?那么为什么 item(0) 返回互联网销售额而不是产品呢?

    WITH
    MEMBER [Measures].[Top Product Sales] AS
    {
    EXISTING
    TopCount(
    [Product].[Product].[Product].Members,
    1,
    ([Measures].[Internet Sales Amount])
    ) *
    {[Measures].[Internet Sales Amount]}
    }.Item(0)
    ,FORMAT_STRING="Currency"

    SELECT
    {
    ([Measures].[Internet Sales Amount]),
    ([Measures].[Top Product Sales])
    } ON COLUMNS,
    {
    ([Date].[Calendar Year].[CY 2005]),
    ([Date].[Calendar Year].[CY 2006]),
    ([Date].[Calendar Year].[CY 2007]),
    ([Date].[Calendar Year].[CY 2008])
    } ON ROWS
    FROM [Adventure Works]

如果我运行以下查询,我会从两个维度(产品和 Internet 销售额)中得到一个集合,这对我来说很有意义,但为什么上面的交叉联接只返回 Internet 销售额?

    WITH
    set x AS
    { 
    TopCount(
    [Product].[Product].[Product].Members,
    1,
    ([Measures].[Internet Sales Amount])
    ) *
    {[Measures].[Internet Sales Amount]}
    }

    SELECT
    {} ON COLUMNS,
    x ON ROWS
    FROM [Adventure Works]

【问题讨论】:

    标签: mdx


    【解决方案1】:

    实际上,查询中的Item(0) 返回一个由产品和度量组成的元组。但是你的第一个SELECT 语句没有使用那个元组,而是[Measures].[Top Product Sales],它不是一个元组,而是一个单一层次结构的成员,即度量层次结构。您在 WITH 子句中定义它以在每次评估元组时传递 元组,但不是元组的别名。在WITH MEMBER 子句中使用任何表达式都会将其转换为简单成员。

    在 Analysis Services 中,您只能在 WITH 子句中创建成员和集合,但不能创建元组。

    【讨论】:

    • 感谢您的回复。但它没有回答我的问题。我的问题是为什么 Item(0) 只返回度量而不是顶级产品或其他?根据定义,Item 函数“从集合中返回一个元组”。这里返回的元组是(product,Internet sales amount),为什么这个场景只返回Internet sales amount?
    • @thotwielder 实际上,我回答了你的问题:Item(0) 返回一个元组,但在 WITH MEMBER 子句中使用它会将元组转换为一个简单的成员。
    • 这似乎是某种潜规则,因为我在任何地方都找不到它的记录。
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多