是否可以在预定义的列中显示/填充相关数据?
Is it possible to present / populate related data in predefined columns?
如何更改数据的表示方式,以便我通过两列获得公主的名字,如 "Wanted output" 所示。骑士名字上的列分组为我提供了每个公主名字的公主列。我只想要两列,因为我知道一个骑士永远不会有超过两个公主。
我从输入源获得的数据如下所示 "Input data"。不幸的是,我不能使用 SQL 来操作数据,因为 QUERY 基于 FetchXML。我唯一可以使用的工具是我从 Reporting Services 获得的工具(我使用的是 Visual Studio 2015),所以在提出任何解决方案时请记住这一点。
从技术上讲,骑士和公主之间存在 1:M 关系,但系统中存在限制,因此骑士永远不会拥有超过 2 个公主。一个骑士可以拥有 0、1 或 2 个公主。
输入数据
_________________________________
| Knight | Princess |
|_______________|_______________|
|_____Adam______|_____Anna______|
|_____Adam______|____Angelica___|
|_____Erik______|_____Erika_____|
|_____Erik______|______Eva______|
输出
_________________________________________________________________________________
| Knight | Princess 1 | Princess 2 | Princess 3 | Princess 4 |
|_______________|_______________|_______________|_______________|_______________|
|_____Adam______|_____Anna______|_____Angelica__|_______________|_______________|
|_____Erik______|_______________|_______________|_____Erika_____|_____Eva_______|
想要输出
_________________________________________________
| Knight | Princess 1 | Princess 2 |
|_______________|_______________|_______________|
|_____Adam______|_____Anna______|___Angelica____|
|_____Erik______|_____Erika_____|_____Eva_______|
有什么建议吗?
这几乎是不可能的,但你已经幸运了(相当合理)每个骑士 2 个公主的限制。再多你就会被卡住。
我会使用 Table,而不是 Matrix object。第一列是骑士。
下一列有一个静态 Header "Princess 1",表达式为:
=Min(Fields!Princess.Value)
第 3 列有一个静态 Header "Princess 2",表达式为:
=Iif ( Min(Fields!Princess.Value) = Max(Fields!Princess.Value) , "" , Max(Fields!Princess.Value) )
您可以制作一个 table 带有 Knight 的行组,然后在该行组中 body 添加一个带有 Princess 的列组的 tablix。唯一的问题是,列 headers Princess 1..x 必须以某种方式硬编码到底层 table.
您可以通过对数据集使用 choose 和 lookupset 来做到这一点:
=Choose(1,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
=Choose(2,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
=Choose(3,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
等等
在每一列中。
如何更改数据的表示方式,以便我通过两列获得公主的名字,如 "Wanted output" 所示。骑士名字上的列分组为我提供了每个公主名字的公主列。我只想要两列,因为我知道一个骑士永远不会有超过两个公主。
我从输入源获得的数据如下所示 "Input data"。不幸的是,我不能使用 SQL 来操作数据,因为 QUERY 基于 FetchXML。我唯一可以使用的工具是我从 Reporting Services 获得的工具(我使用的是 Visual Studio 2015),所以在提出任何解决方案时请记住这一点。
从技术上讲,骑士和公主之间存在 1:M 关系,但系统中存在限制,因此骑士永远不会拥有超过 2 个公主。一个骑士可以拥有 0、1 或 2 个公主。
输入数据
_________________________________
| Knight | Princess |
|_______________|_______________|
|_____Adam______|_____Anna______|
|_____Adam______|____Angelica___|
|_____Erik______|_____Erika_____|
|_____Erik______|______Eva______|
输出
_________________________________________________________________________________
| Knight | Princess 1 | Princess 2 | Princess 3 | Princess 4 |
|_______________|_______________|_______________|_______________|_______________|
|_____Adam______|_____Anna______|_____Angelica__|_______________|_______________|
|_____Erik______|_______________|_______________|_____Erika_____|_____Eva_______|
想要输出
_________________________________________________
| Knight | Princess 1 | Princess 2 |
|_______________|_______________|_______________|
|_____Adam______|_____Anna______|___Angelica____|
|_____Erik______|_____Erika_____|_____Eva_______|
有什么建议吗?
这几乎是不可能的,但你已经幸运了(相当合理)每个骑士 2 个公主的限制。再多你就会被卡住。
我会使用 Table,而不是 Matrix object。第一列是骑士。
下一列有一个静态 Header "Princess 1",表达式为:
=Min(Fields!Princess.Value)
第 3 列有一个静态 Header "Princess 2",表达式为:
=Iif ( Min(Fields!Princess.Value) = Max(Fields!Princess.Value) , "" , Max(Fields!Princess.Value) )
您可以制作一个 table 带有 Knight 的行组,然后在该行组中 body 添加一个带有 Princess 的列组的 tablix。唯一的问题是,列 headers Princess 1..x 必须以某种方式硬编码到底层 table.
您可以通过对数据集使用 choose 和 lookupset 来做到这一点:
=Choose(1,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
=Choose(2,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
=Choose(3,LookupSet(Fields!Knight.Value,Fields!Knight.Value,Fields!Princess.Value,"InputData"))
等等
在每一列中。