0

这是一个带有两个维度的简单模式和一个带有度量的事实。

CREATE TABLE DimThingType (
    ThingTypeID          int        NOT NULL PRIMARY KEY,
    ThingTypeDescription varchar(8) NOT NULL
)

CREATE TABLE DimThing (
    ThingID   int        NOT NULL PRIMARY KEY,
    ThingName varchar(8) NOT NULL
)

CREATE FactFacts (
    FactID      int NOT NULL PRIMARY KEY,
    ThingID     int NOT NULL,
    ThingTypeID int NOT NULL,
    Turnips     int NOT NULL
)

现在在 MDX 中,我们可以对每种事物类型的萝卜数求和。

SELECT 
    NON EMPTY { [Measures].[Trunips] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS 
FROM [Things]

现在,如果在此度量值组中我创建了一个新度量值[Count of Facts],其属性Source.[Binding Type]设置为[Row binding]AggregateFunction设置为,Count那么我还可以计算每种事物类型的事物数量。

SELECT 
    NON EMPTY { [Measures].[Trunips], [Measures].[Count of Facts] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS 
FROM [Incidents] 

我真的必须添加这个新措施吗?该数字是用于计算结果单元格中的值的事实数,所以我不能通过查询获得吗?(如果我们在 SQL 中进行分组,那么它就是COUNT(*).)

我绝对什么都做不了!

4

1 回答 1

2

是的,您需要添加一个新措施(尽管它们也是一种替代方法)。多维数据集在处理时将事实值存储在 N 维单元中。因此,在查询时,您只能检索存储的内容。与 sql 不同,多维数据集不会在运行时对其求和。它只会获取该单元格中的值。

有关如何解决您的查询的详细信息,请继续阅读。

SELECT 
    NON EMPTY { [Measures].[Trunips] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS  FROM [Things]

MDX 查询在 N 维平面的地址中解析。在上述情况下,您有两个维度,因此它是二维平面的地址。

现在您已经忽略了一个维度,而对于第二个维度,您已经使用了它所有可能的值。

所以地址是({d1:dn},{All},{Turnips})。它读取为“未分组列出的第一维的所有值”,“分组的第二维的所有值”,对于该单元格返回“测量萝卜”。现在在这个单元格上没有计数测量。

于 2020-02-28T15:23:25.150 回答