2010-10-03 3 views
3

У меня есть несколько запросов, которые извлекают данные для использования на графике.Coldfusion cfchart stacked order

<cfquery name='clusterPrivateReferrals' dbtype="query"> 
SELECT organisationName, count(messageID)*1000/listSize as msgCount 
FROM clusterReferrals 
WHERE datecreated>#refRateStartDate# 
AND refTypeID=3 
GROUP BY organisationName, listSize 
</cfquery> 

<cfquery name='clusterNHSReferrals' dbtype="query"> 
SELECT organisationName, count(messageID)*1000/listSize as msgCount 
FROM clusterReferrals 
WHERE datecreated>#refRateStartDate# 
AND refTypeID<>3 
GROUP BY organisationName, listSize 
</cfquery> 

код граф

<cfchart format="flash" title="Cluster referrals per 1000 patients from #dateformat(refRateStartDate, 'dd-mmm-yy')#" chartWidth="470" chartHeight="380" fontSize="12" style="chart.xml" seriesPlacement = "stacked" showLegend = "yes"> 
    <cfchartseries type="bar" seriescolor="##FFD800" seriesLabel="Private" query="clusterPrivateReferrals" valueColumn="msgCount" ItemColumn="organisationName"> 
    </cfchartseries> 
    <cfchartseries type="bar" seriescolor="##F47D30" seriesLabel="NHS" query="clusterNHSReferrals" valueColumn="msgCount" ItemColumn="organisationName"> 
    </cfchartseries> 
</cfchart> 

это дает мне следующий график

alt text

Как получить данные отображаются отсортирован по общей уложенных элементов?

@ Бен

Это заставило меня на правильном пути, я не знаю, ранее в квартальном исчислении может объединить 2 совершенно разные запросы

<cfquery name='clusterPrivateReferrals' dbtype="query"> 
SELECT organisationName, count(messageID)*1000/listSize as privateRate 
FROM allReferrals 
WHERE datecreated>#refRateStartDate# 
AND refTypeID=3 
GROUP BY organisationName, listSize 
</cfquery> 

<cfquery name='clusterNHSReferrals' dbtype="query"> 
SELECT organisationName, count(messageID)*1000/listSize as nhsRate 
FROM allReferrals 
WHERE datecreated>#refRateStartDate# 
AND refTypeID<>3 
GROUP BY organisationName, listSize 
</cfquery> 

<cfquery name="stackOrder" dbtype="query"> 
    select clusterPrivateReferrals.privateRate, 
     clusterNHSReferrals.nhsRate, 
     clusterPrivateReferrals.organisationName, 
     (clusterPrivateReferrals.privateRate + clusterNHSReferrals.nhsRate) as totalRate 
    from clusterPrivateReferrals, clusterNHSReferrals 
    WHERE clusterNHSReferrals.organisationName = clusterPrivateReferrals.organisationName 
    order by totalRate desc 
</cfquery> 

ответ

2

Самый простой способ будет использовать QofQ:

<cfquery name="stackOrder" dbtype="query"> 
    select clusterPrivateReferrals.msgCount as privateReferrals, 
     clusterNHSReferrals.msgCount as NHSReferrals, 
     clusterPrivateReferrals.organizationName 
    from clusterPrivateReferrals 
    join clusterNHSReferrals on clusterNHSReferrals.organizationName = clusterPrivateReferrals.organizationName 
    order by (privateReferrals+privateReferrals) desc 
</cfquery> 

Я не проверял это, так что вам, возможно, придется настроить его немного.

Теперь вы можете использовать два столбца Referrals в качестве столбцов данных для графика.

+0

Я не знал, что вы можете делать такие вещи в QoQ, но теперь, когда я вижу это, я не понимаю, почему это не будет, т работы. По какой-то причине у меня было в голове, что вы можете выполнить QoQ с одним исходным запросом. – Jason

+1

Я уже использовал QofQ для объединения данных из разных источников. Это более удобно, чем люди склонны отдать должное. –

+0

Это почти делает Бен, и я на правильном пути. См. Выше рабочий код. – Saul

0

Может быть, добавить промежуточный квартальном сопоставлении с фильтрацией только по дате? Что-то вроде этого (не может проверить, так что, возможно, потребуется несколько исправлений):

<cfquery name='clusterCombinedReferrals' dbtype="query"> 
SELECT organisationName, messageID, listSize, count(messageID)*1000/listSize as totalMsgCount 
FROM clusterReferrals 
WHERE datecreated>#refRateStartDate# 
GROUP BY organisationName, listSize 
</cfquery> 

После этого обновления существующих запросов, чтобы включить выбрать из clusterCombinedReferrals и порядка totalMsgCount на первое месте, а также падение фильтрации по дате, как это уже применяется.

0

Я не думаю, что вы можете без предварительного вывода запросов в структуру, а затем сортировки и вывода данных с помощью тега cfchartdata внутри каждого cfchartseries.

Что-то вроде этого, может быть. Я сделал это локально, и это сработало, но затем я попытался преобразовать код для работы с вашими запросами и именами столбцов, чтобы он не работал с прямой копией и вставкой. (Но это может быть!) Он также предполагает, что длина двух запросов всегда будет одинаковой. Если это не так, вам может потребоваться код вокруг этого.

<cfset data = {}> 

<cfloop from="1" to="#clusterPrivateReferrals.recordCount#" index="x"> 

    <cfset structInsert(data, clusterPrivateReferrals["organisationName"][x], {})> 

    <cfset data['#clusterPrivateReferrals["organisationName"][x]#'].private = clusterPrivateReferrals["msgCount"][x]> 

    <cfset data['#clusterNHSReferrals["organisationName"][x]#'].nhs = clusterPrivateReferrals["msgCount"][x]> 

    <cfset data['#clusterPrivateReferrals["organisationName"][x]#'].total = data['#clusterNHSReferrals["organisationName"][x]#'].private + data['#clusterNHSReferrals["organisationName"][x]#'].nhs> 

</cfloop> 

<cfset sorted = structSort(data, "numeric", "desc", "total")> 

<cfchart format="flash" title="data" chartWidth="470" chartHeight="380" fontSize="12" seriesPlacement = "stacked" showLegend = "yes"> 

    <cfchartseries type="bar" seriescolor="##FFD800" seriesLabel="Private"> 
     <cfloop from="1" to="#arrayLen(datas)#" index="x"> 
      <cfchartdata item="#sorted[x]#" value="#data['#sorted[x]#'].private#"> 
     </cfloop> 
    </cfchartseries> 

    <cfchartseries type="bar" seriescolor="##F47D30" seriesLabel="NHS"> 
     <cfloop from="1" to="#arrayLen(datas)#" index="x"> 
      <cfchartdata item="#sorted[x]#" value="#data['#sorted[x]#'].nhs#"> 
     </cfloop> 
    </cfchartseries> 

</cfchart> 
+0

Да, сдача в массивы будет работать, но решение QQQ от Ben's выше slicker – Saul

Смежные вопросы