为什么Mondrian MDX查询在添加属性时会创建大量结果集?

为什么Mondrian MDX查询在添加属性时会创建大量结果集?,mdx,mondrian,Mdx,Mondrian,我有一个相对简单的MDX查询,它在一个结果集中创建了10000多行,其中大多数是空的,但是它生成的SQL在结果集中创建了相对较少的行。以下是MDX查询: SELECT NON EMPTY CrossJoin({([employmentDate.yearQuarterMonth].[2012]:[employmentDate.yearQuarterMonth].[2014])}, {[Measures].[headCount]}) ON COLUMNS, NON EMPTY {[residence

我有一个相对简单的MDX查询,它在一个结果集中创建了10000多行,其中大多数是空的,但是它生成的SQL在结果集中创建了相对较少的行。以下是MDX查询:

SELECT
NON EMPTY CrossJoin({([employmentDate.yearQuarterMonth].[2012]:[employmentDate.yearQuarterMonth].[2014])}, {[Measures].[headCount]}) ON COLUMNS,
NON EMPTY {[residenceLocation].[iso_region].Members} ON ROWS
FROM workforce
这是一个应用程序,它返回:

|                                                 | 2012                 | 2013                 | 2014                 |
|                                                 | %{measure.headCount} | %{measure.headCount} | %{measure.headCount} |
+--------------------------+----------------------+----------------------+----------------------+----------------------+
| Germany                  | #null                |                  138 |                  241 |                  238 |
| France                   | #null                |                   49 |                   40 |                   66 |
| United Kingdom           | #null                |                   46 |                   20 |                   33 |
| Japan                    | #null                |                   67 |                  135 |                  140 |
| Russian Federation       | #null                |                   84 |                  105 |                   78 |
| United States of America | California           |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
|                          |                      |                   38 |                   43 |                   36 |
您可以看到,它生成了加利福尼亚州这样的州,但使用空区域名称反复重复该统计数据

生成的SQL为,仅返回39行:

select
  "TIME"."YEAR" as "Year",
  "REGIONS_1"."ISO_COUNTRY_CODE" as "Country",
  "REGIONS_1"."ISO_REGION" as "Region",
  sum("EMPLOYMENT"."HEADCOUNT") as "Headcount"
from
   "TIME" "TIME",
  "EMPLOYMENT" "EMPLOYMENT",
  "REGIONS" "REGIONS_1"
where
  "EMPLOYMENT"."EMPLOYMENT_DATE_ID" = "TIME"."ID"
and
  "TIME"."YEAR" in (2012, 2013, 2014)
and
  "EMPLOYMENT"."RESIDENCE_REGION_ID" = "REGIONS_1"."ID"
group by 
  "TIME"."YEAR",
  "REGIONS_1"."ISO_COUNTRY_CODE",
  "REGIONS_1"."ISO_REGION";
然后,此SQL用于加载的属性,并返回超过20000+:

select
  "REGIONS_1"."ISO_COUNTRY_CODE" as "Country Code",
  "REGIONS_1"."COUNTRY_NAME" as "Country",
  "REGIONS_1"."ISO_COUNTRY_CODE" as "Country Code",
  "REGIONS_1"."LATITUDE" as "Latitude",
  "REGIONS_1"."LONGITUDE" as "Longitude",
  "REGIONS_1"."ISO_REGION" as "Region",
  "REGIONS_1"."REGION_NAME" as "Region Name",
  "REGIONS_1"."STATE_FIPS" as "State FIPS",
  "REGIONS_1"."LATITUDE" as "Latitude",
  "REGIONS_1"."LONGITUDE" as "Longitude"
from
  "REGIONS" "REGIONS_1"
group by
  "REGIONS_1"."ISO_COUNTRY_CODE",
  "REGIONS_1"."COUNTRY_NAME",
  "REGIONS_1"."LATITUDE",
  "REGIONS_1"."LONGITUDE",
  "REGIONS_1"."ISO_REGION",
  "REGIONS_1"."REGION_NAME",
  "REGIONS_1"."STATE_FIPS"
order by
  "REGIONS_1"."ISO_COUNTRY_CODE" ASC NULLS LAST,
  "REGIONS_1"."ISO_REGION" ASC NULLS LAST;
所以我不知道为什么蒙德里安在制作手机时会发疯。区域表由以下列组成,但不是全部:

Country, 
Region (ISO Code), 
State_FIPS, 
Postal_Code, 
Latitude, 
Longitude, 
County, 
MSA, 
CBSA, etc.
这是一个相当低水平的区域数据。维度的层次结构如下所示:

iso_country
  iso_region
    county
我应该补充一点,当使用[ResideLocation].[country]时,这种情况也会发生,但不会达到这种程度,因为在那里,美国有几行空行。它可能包括10-20行,但不包括10000行。所以我认为这两种情况下的问题是一样的


更新我知道了额外的行是从哪里来的。当我将纬度和经度作为属性添加到Country、Region和County时,行开始爆炸。把它们拿走就好了。那么,有没有一种方法可以添加这样的属性,这些属性在行之间可能不同,而不会影响返回的单元格集?

多维数据集中的关系有问题。当选择与所使用维度无关的度量值时,可能会出现这种重复。因此,如果我删除了属性Latitude/Latitude(纬度/经度),该属性将发生变化,例如,可能zipcodes处于某个状态,那么行将折叠,这似乎是正确的。这就是你的意思吗?这是你描述的例子吗?我只是在评论——如果我知道答案,我会添加一个答案。根据我的经验,在使用与某些维度无关的度量时,我看到了数字的重复。尽管再看一遍,您可能需要在mdx中添加一个有条件的IIF,用于衡量员工人数。