2016-06-30 36 views
1

我们使用SSRS为Sitecore站点生成一些自定义报告,查询自定义分析表。的问题是,它包括仅在格式不同作为完全独立的网址,具体有:合并SSRS中的类似网址

我想能够巩固所有这些。不知道这是否应该在报表定义(这是目前只是=Fields!URL.Value或者我需要过滤数据,甚至到达报告之前(可能在存储过程中))的表达式中完成吗?任何想法?

+0

我们展示样本数据和预期的结果。你试过什么查询?我可以理解前4项是相同的,但为什么项目4和5被认为是相同的? –

+0

您可以在SQL中或在您的SSRS数据集的计算字段中编写函数,该函数将“blahblah.com”拉出并使用它进行分组。接下来的问题是你想如何显示它?哪一个是所需的URL格式? – StevenWhite

+0

@JuanCarlosOropeza,4和5是相同的,因为大多数查询字符串在这一点上对我们的目的并不重要。有一个url在查询字符串很重要,但我需要分别处理。 –

回答

1

我理解的目标,但是,也有一些固有的问题

例如,规范HTTP和/或剥离www是很容易做到,但有些问题仍然存在。

Select Distinct url=replace(Replace(url,'https:','http:'),'www.','') 
From @Table 

返回3个不同的值(满分为5)

url 
http://blahblah.com/aboutus 
http://blahblah.com/aboutus.aspx 
http://blahblah.com/aboutus.aspx?parameterX=Y 

其余三个可以是完全独立的网络电话

+0

嗯,大多数查询字符串并不重要,但至少有一个查询字符串实际上很重要的url,所以这是一个很好的观点。也许我可以写一个类似于你的sp,并在“。”之后替换掉每一个。使用“”,然后将其加入到一个单独的查询中,该查询查询具有我需要为记录目的而捕获的查询字符串的特定url ... –

2

我的URL拆分成主机名,资源和参数。这样你就可以巩固他们看你是否适合。

您可以拥有一个主机名表和备用名称表,例如www.blah.com,blah.com,127.5.5.1,SERVER.LOCAL等等,这样你就可以根据'喜欢'的主机名进行整合(不),没有查找表就无法自动执行此操作因为SQL永远不会知道IP =域等)

对于资源,您必须对扩展名列表执行相同的操作,以便再次能够合并文件类型。

对于参数,甚至可以将它解析为参数/值对,然后再对每个参数进行合并......(例如,您可能想要合并到pageid =而不是searchterms = ...)

ALSO ..一个离别的想法...在所有这些关于SQL注入时要非常小心,确保在做任何事情之前正确地清理你的输入。因为有人可以很容易地搞乱你的数据库(意外或其他)

+0

我们只处理一个域,但有些人正在通过foo.com,而其他网站则是www.foo.com,有些则使用http,有些则使用https。 –

+0

够公平的,我总是倾向于使它通用。而不是对主机名进行硬编码。 – JeffUK

1

根据你的评论,你正在处理一个单一的域名,所以你可以使用它来分裂/解析你的网址。

检查内部cte的部分结果以验证最终结果。

SQL DEMO

WITH ini_setup as ( 
    SELECT *, 
      CHARINDEX('blahblah.com', [url]) as domain_char_start, 
      len('blahblah.com') as domain_length  
    FROM Table1 
), 
middle_setup as (
    SELECT [url], 
      SUBSTRING ([url] , 1, domain_char_start - 1) as pre_domain, 
      'blahblah.com' as domain, 
      SUBSTRING ([url] , 
         domain_char_start + domain_length +1, 
         len([url])) as post_domain 
    FROM ini_setup 
),  
final_setup as (
    SELECT *, 
      PATINDEX('%[.?/]%', post_domain) as action_end 
    FROM middle_setup 
) 
SELECT [url], [pre_domain], [domain], [action_end], 
     CASE WHEN [action_end] = 0 THEN [post_domain] 
      ELSE SUBSTRING ([post_domain], 1, [action_end] -1) 
     END as action, 
     CASE WHEN [action_end] = 0 THEN '' 
      ELSE SUBSTRING ([post_domain], [action_end], len([post_domain])) 
     END as post_action 
FROM final_setup 

输出

enter image description here