【问题标题】:Creating an MDX measure in Excel to count members of one dimension based on another dimension在 Excel 中创建 MDX 度量以根据另一个维度计算一个维度的成员
【发布时间】:2019-03-29 08:47:40
【问题描述】:

我正在尝试在 Excel 中(在 OLAP 工具中)创建一个 MDX 度量,它将计算另一个维度中每个其他项目的成员数。由于我不知道 MDX 和 OLAP 多维数据集的确切语法和符号,我将尝试简单地解释我想要做什么:

我有一个基于 OLAP Cube 的数据透视表。我有一个机器编号字段存储在一个维度中,即“父级”,并且对于每个机器编号,都有许多(在特定时间段内)生产的文章。这些物品由订单号表示。这些数字存储在另一个维度中。我希望测量每个机器号有多少订单号。

所以表格是这样的:

+------------------+----------------+
| [Machine Number] | [Order Number] |
+------------------+----------------+
| Machine001       |                |
|                  |      111111111 |
|                  |      222222222 |
|                  |      333333333 |
| Machine002       |                |
|                  |      444444444 |
|                  |      555555555 |
|                  |      666666666 |
|                  |      777777777 |
+------------------+----------------+

我希望结果是:

+------------------+----------------+------------+
| [Machine Number] | [Order Number] | [Measure1] |
+------------------+----------------+------------+
| Machine001       |                |          3 |
|                  |      111111111 |            |
|                  |      222222222 |            |
|                  |      333333333 |            |
| Machine002       |                |          4 |
|                  |      444444444 |            |
|                  |      555555555 |            |
|                  |      666666666 |            |
|                  |      777777777 |            |
+------------------+----------------+------------+

我也尝试将 COUNT 函数与 EXISTING 一起使用,但它不起作用(总是显示 1,或者每台机器都显示相同的错误数字)。我相信我必须以某种方式将这两个维度连接在一起,因此订单号取决于机器号,但缺乏关于 MDX 和 OLAP Cubes 的知识,我什至不知道如何询问 Google 如何做到这一点。 提前感谢您提供任何提示和解决方案。

【问题讨论】:

    标签: excel pivot-table ssas mdx olap


    【解决方案1】:

    您的问题基本上是,您有两个不同维度的属性。您想要检索这些属性的有效组合,进一步您想要根据第一个属性的值计算第二个属性中可用的属性值的数量。

    基于上述问题陈述,在OLAP多维数据集中,事实表或Measure定义了链接到Measure\Fact-Table的不同维度的属性之间的关系。请看下面的示例。(我使用了 SSAS 示例 db Adventureworks)

    --我正在尝试查找为每个产品类别提供的促销活动。 选择 [措施].[互联网销售额] 在柱子上, ([产品].[类别].[类别],[促销].[促销].[促销]) 在行上 从 [冒险作品]

    结果 结果是所有产品类别和促销活动的交叉产品。现在让立方体只返回有效的组合。

    select 
    [Measures].[Internet Sales Amount]
    on columns,
    nonempty(
    ([Product].[Category].[Category],[Promotion].[Promotion].[Promotion])
    ,[Measures].[Internet Sales Amount])
    on rows
    from 
    [Adventure Works]
    

    结果

    现在我们指出它只需要返回有效的组合。请注意,我们提供了一个属于连接两个维度的事实的度量。现在让我们数一数

    with member 
    [Measures].[test]
    as
    count(
    nonempty(([Product].[Category].currentmember,[Promotion].[Promotion].[Promotion]),[Measures].[Internet Sales Amount])
    )
    
    select 
    [Measures].[Test]
    on columns,
    [Product].[Category].[Category]
    on rows
    from 
    [Adventure Works]
    

    结果

    备用查询

    with member 
    [Measures].[test]
    as
    
    {nonempty(([Product].[Category].currentmember,[Promotion].[Promotion].[Promotion]),[Measures].[Internet Sales Amount]) }.count
    
    select 
    [Measures].[Test]
    on columns,
    [Product].[Category].[Category]
    on rows
    from 
    [Adventure Works]
    

    【讨论】:

    • @Bartosz Gęstwa 以上有帮助吗?
    • 非常抱歉直到现在才回答,我没有时间坐下来尝试您的解决方案。您的回答当然很有帮助,但是当我尝试在 excel mdx 编辑器中重新创建它时,出现语法错误:“count 函数的 2 参数必须是一个标志”
    • @Bartosz Gęstwa 刚刚进行了编辑,尝试备用查询
    • 感谢您的帮助。我设法通过使用 DistinctCount 而不是 Count 解决了我的问题
    • 不客气。如果有帮助,您可能希望将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多