Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 此代码为记录提供了一个错误,该记录不';t在该领域没有价值,但对那些在该领域有价值的人给出了一个好的结果_Reporting Services_Dynamics Crm_Ssrs 2012_Rdl - Fatal编程技术网

Reporting services 此代码为记录提供了一个错误,该记录不';t在该领域没有价值,但对那些在该领域有价值的人给出了一个好的结果

Reporting services 此代码为记录提供了一个错误,该记录不';t在该领域没有价值,但对那些在该领域有价值的人给出了一个好的结果,reporting-services,dynamics-crm,ssrs-2012,rdl,Reporting Services,Dynamics Crm,Ssrs 2012,Rdl,我想从Microsoft Dynamics CRM 365 for SSRS检索数据。因此,我在VisualStudio和CRM之间建立了一个链接,以准备一个RDL文件,将其导入CRM。RDL文件将允许直接在CRM上生成报告 所以,我处理rdl文件,从某个字段中检索值,然后在许多函数中传递值,当字段为空时,它会给我一个错误,我不知道为什么。这是我的密码: = IIf( IsNothing(Fields!aric_getpartylist.Value) or Fields!aric_get

我想从Microsoft Dynamics CRM 365 for SSRS检索数据。因此,我在VisualStudio和CRM之间建立了一个链接,以准备一个RDL文件,将其导入CRM。RDL文件将允许直接在CRM上生成报告

所以,我处理rdl文件,从某个字段中检索值,然后在许多函数中传递值,当字段为空时,它会给我一个错误,我不知道为什么。这是我的密码:

= IIf(
    IsNothing(Fields!aric_getpartylist.Value) or Fields!aric_getpartylist.Value = "" or Fields!aric_getpartylist.Value = "@" or Fields!aric_getpartylist.Value = " " or Fields!aric_getpartylist.Value = "@@",
    nothing,
    IIf(
        Split(Fields!aric_getpartylist.Value,"@").GetValue(1) = "",
        "Reçu par : " & Join(Split(Split(Fields!aric_getpartylist.Value,"@").GetValue(0),"|")," et "),
        "Reçu par : " & Join(Split(Split(Fields!aric_getpartylist.Value,"@").GetValue(0),"|")," et ") & " accompagné de " & Join(Split(Split(Fields!aric_getpartylist.Value,"@").GetValue(1),"|")," et ")
        )
    )
在有空字符串的字段上,如
,它给出
#ERROR
,在有非空字符串的字段上,它给出良好的结果

编辑: 我尝试在计算字段的多个函数中切割大函数,因此成功地隔离了问题: 我认为这种语言预先计算了条件的所有路径
IIF
。因为如果我这样做:

=IIf(
    IsNothing(Fields!something.Value),
    nothing,
    Split(Fields!something.Value,"@").GetValue(1)
)
如果
字段,它将抛出一个错误!something.Value
为空,如果不是,它将抛出正确的值

因为事实上,在这种语言中,如果我这样做:
Split(nothing,“@”).GetValue(1)
它会抛出一个错误,所以通过这个测试,它可能会证明这种语言可能预先计算了允许这个错误的路径,然后无论如何都会抛出错误,即使IIF没有进入带有
Split(nothing,“@”)的路径。GetValue(1)

EDIT2
我忘了说
Split(nothing,“@”).GetValue(0)
此代码不会与
nothing
值崩溃。但是这段代码有:
Split(nothing,“@”).GetValue(1)

我看到了问题,尽管解决方案将是一种奇怪的解决方法。。。您遇到的问题是,在SSRS中,整个
IIF
表达式在执行时进行计算。这意味着,不管表达式的结果如何,它仍在尝试至少计算表达式的
连接(拆分(…
部分),但它将只显示与条件匹配的部分

我建议——可能还有更好的方法——在这个字段的查询中使用
ISNULL()
。类似
ISNULL(aric_getpartylist,'Nothing')
的东西将接受任何空值,并简单地用字符串
Nothing
替换它们。然后,您只需在SSRS中检查字段中的字符串“Nothing”(假设该字段通常不包含该字符串)


有两种解决方案,我们可以用自定义代码或纯SSRS语言来实现

第一个解决方案(自定义代码) 受这个问题的启发,我找到了一种方法,我们将使用Visual Basic代码来实现它

  • 点击构思(如果你已经做了,进入下一步)
  • 转到顶部的工具栏
  • 去报到► 报告属性► 代码(在左侧工具栏上)
  • 然后粘贴此代码:

    = Fields!aric_getpartylist.Value & "@"
    
    = IIf(
        IsNothing(Fields!prerecu.Value) or Fields!prerecu.Value = "" or Fields!prerecu.Value = "@" or Fields!prerecu.Value = " " or Fields!prerecu.Value = "@@",
        nothing,
        IIf(
            Split(Fields!prerecu.Value,"@").GetValue(1) = "",
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et "),
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et ") & " accompagné de " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(1),"|")," et ")
            )
        )
    
    公共函数有效(ByVal str作为字符串)作为字符串
    如果(str=Nothing或str=“”或str=“@”),则
    一无所获
    其他的
    如果(str.Split(“@”).GetValue(1)=”或str.Split(“@”).GetValue(1)=无),则
    返回“ReaUu Par:”+联接((GetValue)(0))(Split)
    其他的
    返回“ReaUu Par:”+联接((GetValue)(S.S.分裂(“@”))(Split(“y”),“et”)+“AcCONGAN EDE”+“ReaCuüPar:”+ +((S.Seple S分裂(“@”). GetValue(1)). Split(“y”),“et”)
    如果结束
    如果结束
    端函数
    
    然后在计算字段中更改函数并将其放入:

        = Code.Valid(Fields!aric_getpartylist.Value)
    
    建议: 计算字段的控制台可能会给出一个错误,但不用担心,只要测试一下就可以了!如果您使用MS CRM DYNAMICS 365,它可能不会工作,因为您需要从配置文件中禁用rdl沙箱。(查看文档以了解如何做)

    第二种解决方案(纯ssrs代码) 我们可以隔离这个问题,它在这一行中断:
    Split(Fields!aric_getpartylist.Value,“@”).GetValue(1)
    ,因为这个字段是
    null
    so
    Split(nothing,“@”)
    可能等于一个包含一个元素的数组:
    null
    ,所以没有第二个元素,所以这样做:
    Split(Fields!aric_getpartylist.Value,“@”).GetValue(0)
    但这不起作用:
    Split(Fields!aric_getpartylist.Value,“@”).GetValue(1)
    因此,您需要确保通过Split生成的数组至少包含2个元素。因此,要解决此问题,我只需使用此代码添加一个计算字段:

    = Fields!aric_getpartylist.Value & "@"
    
    = IIf(
        IsNothing(Fields!prerecu.Value) or Fields!prerecu.Value = "" or Fields!prerecu.Value = "@" or Fields!prerecu.Value = " " or Fields!prerecu.Value = "@@",
        nothing,
        IIf(
            Split(Fields!prerecu.Value,"@").GetValue(1) = "",
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et "),
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et ") & " accompagné de " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(1),"|")," et ")
            )
        )
    
    然后将主体字段中的计算字段与以下代码一起使用:

    = Fields!aric_getpartylist.Value & "@"
    
    = IIf(
        IsNothing(Fields!prerecu.Value) or Fields!prerecu.Value = "" or Fields!prerecu.Value = "@" or Fields!prerecu.Value = " " or Fields!prerecu.Value = "@@",
        nothing,
        IIf(
            Split(Fields!prerecu.Value,"@").GetValue(1) = "",
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et "),
            "Reçu par : " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(0),"|")," et ") & " accompagné de " & Join(Split(Split(Fields!prerecu.Value,"@").GetValue(1),"|")," et ")
            )
        )
    

    它甚至可以在Microsoft CRM Dynamics 365上运行!

    我只使用SSRS RDL语言,所以不能使用ISNULL,因为我无法处理CRM记录后面的表……也许SSRS中有某种东西允许这样做,但现在我不知道如何在这里面使用SQL命令interface@bosskay972也许是一个计算过的场w如果值为
    =IIF(IsNothing(Fields!aric_getpartylist.value),“Nothing”,Fields!aric_getpartylist.value)
    ?它会给我相同的结果:/也许我也需要计算此行:
    拆分(Fields!notnull.value,“@”).GetValue(1)=“
    @bosskay972您的问题中的表达式中没有包含这一行,但是是的,这可能会有所帮助。如果我可以添加我的2美分,实际上您的表达式看起来很好。您是否可以检查字段的值是否为null或空!aric_getpartylist.value字段是否属于您的上一个语句。我的意思是,与您的上一个IIF语句不同,请尝试sho如果它显示值,即前两个IIF不起作用,那么我们可以继续前进。类似这样的表达式也有助于=IIF(Len(Fields!aric_getpartylist.value)我只是测试了它,但它也不起作用。我认为这种语言预先计算了任何路径的结果,如果是,它会给出一个错误…是否有一个语句作为
    return
    从IIF j中转义