1

我有一个问题,在具有多列的交叉表中有多行度量值,我只想拥有一个。

交叉表如下所示:

                      |-----Amount-----|     
SITE-----|---PERSON---|----------------|
----------------------|----------------|
SITE1    |  James     |     45         |
SITE2    |  John      |     34         |
SITE2    |  Jones     |     34         |
SITE3    |  Jane      |     54         |
----------------------|----------------|
TOTAL-----------------|     167        |

所以第一列是站点,第二列是站点上的人(注意 site2 有两个人)。结构被简化了,但你明白了。

我想要的是以下结构:

                      |-----Amount-----|     
SITE-----|---PERSON---|----------------|
----------------------|----------------|
SITE1    |  James     |     45         |
SITE2    |  John      |     34         |
SITE2    |  Jones     |                |
SITE3    |  Jane      |     54         |
----------------------|----------------|
TOTAL-----------------|     133        |

因此,度量行仅从站点列生成,而不是从站点和人员列生成。这样我就可以计算跨站点的总量,而不是跨人员。目前,重复行导致总值高于实际值。

有没有办法使用交叉表来实现这一点,或者我是否需要为此用例考虑其他方法(显示站点和人员的第二个列表)。

<--------------------------------编辑-------->

我在示例中错误地解释了金额列。我有一个包含销售事件的表,金额度量实际上应该是每个站点的销售事件数。所以我想要实现的是一个问题:对于给定类型的销售事件,列出发生这些销售的站点,列出在该站点上工作的人员,并列出该站点上的销售事件总数。所以基本上我用一些过滤器(type=something)来获取所有的销售事件。这些销售活动有一个发生地点。该站点有零到 n 名员工。所以销售事件和站点之间有一个内部连接,站点和人员表之间有一个外部连接。SQL 查询返回如下数据:

sales_event_1|site1|James|type1|subtype2
sales_event_2|site2|John|type1|subtype1
sales_event_2|site2|Jones|type1|subtype1
sales_event_3|site2|John|type1|subtype2
sales_event_3|site2|Jones|type1|subtype2
sales_event_4|site3|Jane|type1|subtype1
...

所以交叉表结构如下:

Rows= site|person
Columns= subtype
measure= count (distinct [sales_event_id] for [site])

交叉表看起来像这样:

                      |-----subtype1----|-----subtype2----|-----total----|          
SITE-----|---PERSON---|-----------------|-----------------|--------------|
----------------------|-----------------|-----------------|--------------|
SITE1    |  James     |     35          |     10          |      45      |
SITE2    |  John      |     20          |     14          |      34      |
SITE2    |  Jones     |     20          |     14          |      34      |
SITE3    |  Jane      |     54          |      0          |      54      |
--------------------------|-------------|-----------------|--------------|
TOTAL-----------------|-----------------|-----------------|     133      |

我希望这对你们有帮助。

4

2 回答 2

0

创建一个新的数据项

total([Sales] for [Site])
  • 将其用作交叉表的指标

  • 接下来,单击指标,并将属性Group Span设置为 [Site]

于 2019-11-21T20:50:27.003 回答
0

很好地了解您的数据以认识到您得到了错误的结果。这将帮助您知道该术语是重复计算的。

在您的情况下,数量事实的粒度在站点级别。我假设 person 是同一维度中的一个属性(关系事物;不是具有成员、层次结构和级别的事物,尽管这是建立在关系事物的概念之上的(阅读 Kimball ))。您的报告试图将查询投射到事实的下方,您会得到重复计算。

您应该在模型中定义决定因素(如果您使用的是 Framework Manager 包)或列依赖项(如果您使用的是数据模块)。这些设置是为了告诉查询引擎事实粒度以及维度中的哪些对象处于哪个粒度,告诉查询引擎如何在多事实多粒度情况下聚合事实,以及如何处理尝试将查询投射到事实的粒度之下。

因为它会在您的模型中定义,所以您创建的每个报告和普通用户创建的每个报告都可以使用它,这比尝试在您创建的每个报告中创建处理此类情况并希望您的普通用户知道该做什么,而他们可能不会。

您没有设置决定因素这一事实表明您组织的建模者可能以其他方式让您的团队失望。例如,不处理角色扮演和消除查询路径的歧义。

于 2019-11-23T20:37:12.213 回答