是否可以在预定义列中显示/填充相关数据?

时间:2018-03-05 15:58:56

标签: reporting-services dynamics-crm ssrs-2012 fetchxml

如何更改数据的显示方式,以便将公主的名字分为两列,如“通缉输出”中所示。 Knight名字上的列分组为每个公主名字提供了一个公主专栏。我只想要两列,因为我知道一个骑士永远不会有两个以上的公主。

我从输入源获得的数据如下所示为“输入数据”。不幸的是我无法使用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_______|

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以使用数据集上的choose和lookupset来执行此操作:

char charAt( char * string, int position );

int main( int argc, char * argv[ ] ) {

    int pos = atoi( argv[3] );

    if( strcmp( argv[1], "charAt" ) == 0 )
    {
        printf( "%s", charAt( argv[2], pos ) );
    }    
}



char charAt( char *string, int position ){
    int count = 0;
    while( count != position ){
        string++;
        count++;
    }

    return *string;
}

在每一栏中。

enter image description here

答案 1 :(得分:1)

这几乎是不可能的,但是你已经为每个骑士拥有2个公主的(相当合理的)限制而幸运了。还有,你会被困住。

我会使用Table,而不是Matrix对象。第一栏是骑士。

下一列有一个静态标题“Princess 1”,表达式为:

=Min(Fields!Princess.Value)

第3列有一个静态标题“Princess 2”,表达式为:

=Iif ( Min(Fields!Princess.Value) = Max(Fields!Princess.Value) , "" , Max(Fields!Princess.Value) )

答案 2 :(得分:1)

您可以通过Knight制作一个带有行组的表,并在该行组内添加一个Tablix,其中包含Princess的columngroup。唯一的问题是,列标题Princess 1..x必须以某种方式硬编码到基础表中。

Here is how i did it

相关问题