为什么Mondrian MDX查询在添加属性时会创建大量结果集?
我有一个相对简单的MDX查询,它在一个结果集中创建了10000多行,其中大多数是空的,但是它生成的SQL在结果集中创建了相对较少的行。以下是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
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,用于衡量员工人数。