Report Drill Down

User avatar
reinaldocrespo
Posts: 918
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: Report Drill Down

Post by reinaldocrespo »

Hey James;
And these licenses are very expensive running from US$4000 to US$9000.
I thought it was odd those prices you quoted. Here is link to prices from the webpage https://www.fast-report.com/en/buy/#!/V ... 205%20VCL/

Its $199. But, again, don't bother buying from them directly unless you are using Delphi or some .net.


Reinaldo.
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Report Drill Down

Post by Marcelo Via Giglio »

Hola,


you can see some samples in this link http://www.fast-report.com:8097/ fastreport is able to export the report to many formats, one of them is html, then can be easy to use FR for web systems.

regards

Marcelo Vía
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Re: Report Drill Down

Post by James Bott »

Reinaldo,

Thanks for the clarification.

James
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Re: Report Drill Down

Post by James Bott »

I remember seeing something about a drill-down some time ago, so I searched the forum and found this thread:

http://forums.fivetechsupport.com/viewt ... 85#p169687

It contains a discussion of using a tree and browse to create a drill-down report.

James
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Re: Report Drill Down

Post by James Bott »

Rienaldo,

The prices I was looking at were site licenses. I assume you need one for each client.

James
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Report Drill Down

Post by Silvio.Falconi »

antonio,
I not understood why it cannot make with Treport

I found
http://www.infosol.com/crystal-reports- ... rill-down/

http://www.sdn.sap.com/irj/scn/index?ri ... ayout=true


We can add at
METHOD SayData(nRow, nCol, nLine) CLASS TRColumn

If ::lDrill

baction to a user function where the user can show what he want show ...

Endif
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Report Drill Down

Post by Antonio Linares »

Silvio,

You mean from the preview, right ?

We have a metafile there, we should detect where the user double clicks and then create a new metafile at runtime and open it, I guess
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Report Drill Down

Post by Silvio.Falconi »

yes,
I think can be supported only for numbers fields but i not understood good if it can be extended also to all format fields

I remember on Metafile if the user make double click he call the zoom !!!
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Report Drill Down

Post by Silvio.Falconi »

the field drill must have a box arround ( see the film I send you on post forum)
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Report Drill Down

Post by Silvio.Falconi »

Antonio,
use this this small test to make the drill

Code: Select all

#include "fivewin.ch"
#include "Splitter.ch"
#include "ord.ch"
#include "xbrowse.ch"

Static oWnd
static cFwhPath   := "c:\work\fwh\"

REQUEST DBFCDX

Function Main()
DEFINE WINDOW oWnd MDI 

    DEFINE BUTTONBAR oBar OF oWnd SIZE 60, 60 2007

    DEFINE STATUSBAR oStatusBar PROMPT "Some tests" OF oWnd

ACTIVATE WINDOW oWnd ;
           ON INIT customer()

//-------------------------------------------------------------------------------------------------------------------//

   init procedure PrgInit
   SET DATE ITALIAN
   SET CENTURY ON
   SET TIME FORMAT TO "HH:MM:SS"
   SET EPOCH TO YEAR(DATE())-50

   SET DELETED ON
   SET EXCLUSIVE OFF

   RDDSETDEFAULT( "DBFCDX" )

   XbrNumFormat( 'E', .t. )
   SetKinetic( .f. )
   SetGetColorFocus()
   SetBalloon( .t. )
return

//-----------------------------------------------------------------------------------------//

    Function Customer()

       LOCAL oWnd, oDlg, oExpBar, aPanel[3], oBrw, oCol, oSplitV, aCampos ,;
          cQry, oQry, oError,oWndCli
      local oFont,oTree

   local nGrpClr     := RGB(255,250,220)
   local nTotClr     := RGB(200,255,200)

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14


      IF oWndCli == NIL

            *  DbUseArea( .T., "DBFCDX", "CUSTOMER.DBF", "CUSTOMER", .T., .F.)

            *   dbselectarea( "CUSTOMER" )

           oTree:=MakeTree()

          DEFINE WINDOW oWndCli ;
             TITLE  " Test Drill" ;
             BORDER SINGLE MDICHILD OF oWnd



          oExpBar = TExplorerBar():New( 00, 00, 200, oWndCli:nHeight, oWndCli )

          aPanel[1] = oExpBar:AddPanel( "CLIENTES", "Clientes32" )
          aPanel[1]:lSpecial = .t.
          aPanel[1]:AddLink( "Nuevo    ", , "nuevo16" )
          aPanel[1]:AddLink( "Modificar", , "modifi16" )
          aPanel[1]:AddLink( "Eliminar ", , , "elimi16" )


          aPanel[2] = oExpBar:AddPanel( "REPORTES", "print32" )
          aPanel[2]:AddLink( "Report Drill", {|| oBrw:report() }, "repo1" )

          aPanel[3] = oExpBar:AddPanel( "SALIDA", "salir32" )
          aPanel[3]:AddLink( "Salir", {|| oWndCli:End() }, "salir16" )





          oBrw := TXBrowse():New( oWndCli )



                aBrowse   := { { { || "" }, i18n("HireDate"), 50, }  ,;
                                { { || AGE }, i18n("Age"), 120, } ,;
                               { { || SALARY }, i18n("Salary"), 80,NumPict ( 12, 2 ) } }


         FOR i := 1 TO Len(aBrowse)
                   oCol := oBrw:AddCol()
                   oCol:bEditValue := aBrowse[ i, 1 ]
               *   oCol:bStrData := aBrowse[ i, 1 ]
                   oCol:cHeader  := aBrowse[ i, 2 ]
                   oCol:nWidth   := aBrowse[ i, 3 ]
                        if !Empty(aBrowse[ i, 4 ])
                            oCol:cEditPicture:=aBrowse[ i, 4 ]
                           Endif
          NEXT




    WITH OBJECT oBrw
       :nDataType:= 1
       :SetTree( oTree)
      :nStretchCol         := 1
      :lDisplayZeros       := .f.
      :bChange             := { || CUST->( DBGOTO( oBrw:oTreeItem:Cargo[ 4 ] ) ) }
      :bLock               := { || CUST->( RLOCK() ) }
      :bUnLock             := { || CUST->( DBUNLOCK() ) }
      :bClrStd             := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, nGrpClr, ;
                                                If( oBrw:oTreeItem:cPrompt == "Sub-Total", nTotClr, ;
                                                CLR_WHITE ) ) } }

             :nMarqueeStyle    := MARQSTYLE_HIGHLROW
             :nColDividerStyle := LINESTYLE_BLACK
             :nStretchCol      := STRETCHCOL_LAST
             :lColDividerComplete := .t.
             :nHeaderHeight := 30
             :nLeft := 203
             :l2007 := .t.
             :lFooter := .f.
             :lRecordSelector := .t.
             :bClrStd := {|| IF( RecNo() % 2 == 0, {CLR_BLACK, CLR_WHITE}, {0, RGB(203,226,254)} ) }

      // Bitmaps
             WITH OBJECT :aCols[ 1 ]
             :cHeader  := "State/City"
             :AddBitmap( {  FWRArrow(), FWDArrow(), cFwhPath + "bitmaps\16x16\reset.bmp" } )
            :cFooter          := "GRAND TOTAL"
      END

      // When Group is closed show totals. When open show totals at bottom
      // Allow edit of columns and save data to DBF, update group and grand totals
      WITH OBJECT :aCols[ 3 ]
         :bEditValue       := { |x| If( oBrw:oTreeItem:lOpened, 0, ;
                                    If( x == nil, oBrw:oTreeItem:Cargo[ 2 ], ;
                                    CUST->AGE := oBrw:oTreeItem:Cargo[ 2 ] := x ) ) }
         :nTotal           := oTree:Cargo[ 2 ]
         //
         :nEditType        := EDIT_GET
         :bEditWhen        := { || oBrw:oTreeItem:nLevel > 1 .and. oBrw:oTreeItem:cPrompt != "Sub-Total" }
         :bOnChange        := { |o,nOld| oBrw:oTreeItem:Parent():Cargo[ 2 ] += ( o:Value - nOld ), oBrw:Refresh() }
      END




      WITH OBJECT :aCols[ 4 ]
         :bEditValue       := { |x| If( oBrw:oTreeItem:lOpened, 0, ;
                                    If( x == nil, oBrw:oTreeItem:Cargo[ 3 ], ;
                                    CUST->SALARY := oBrw:oTreeItem:Cargo[ 3 ] := x ) ) }
         :nTotal           := oTree:Cargo[ 3 ]
         //
         :nEditType        := EDIT_GET
         :bEditWhen        := { || oBrw:oTreeItem:nLevel > 1 .and. oBrw:oTreeItem:cPrompt != "Sub-Total" }
         :bOnChange        := { |o,nOld| oBrw:oTreeItem:Parent():Cargo[ 3 ] += ( o:Value - nOld ), oBrw:Refresh() }
      END

      //
      :CreateFromCode()
   END



          oBrw:CreateFromCode()

          @ 00,201 SPLITTER oSplitV VERTICAL ;
             PREVIOUS CONTROLS oExpBar ;
             HINDS CONTROLS oBrw ;
             SIZE 1, oWndCli:nHeight PIXEL ;
             OF oWndCli ;
             3DLOOK UPDATE

         * oSplitV:lStatic:=.t.

          SET MESSAGE OF oWndCli TO " Customer "

          oBrw:SetFocus()

          ACTIVATE WINDOW oWndCli MAXIMIZED ;
             ON RESIZE( oExpBar:AdjLeft(), oSplitV:AdjClient(), oSplitV:AdjRight() ) ;
             VALID( oWndCli := NIL, .t. )
       ELSE
          oWndCli:Restore()
          oWndCli:SetFocus()
       ENDIF

       RETURN



//-----------------------------------------------------------------------------------//


static function MakeTree()

   field STATE,CODE,CITY

   local cPath    := cFwhPath + "samples\"
   local oTree, oState, oCity

   USE ( cPath + "STATES" ) NEW SHARED
   INDEX ON CODE TAG CODE TO STMP MEMORY
   USE ( cPath + "CUSTOMER" ) NEW ALIAS CUST SHARED
   INDEX ON STATE+CITY TAG STATE TO CTMP MEMORY
   SET RELATION TO STATE INTO STATES
   GO TOP

   TREE oTree
   oTree:Cargo    := { "", 0, 0.00, 0 }
   do while ! CUST->( eof() )
      TREEITEM oState PROMPT STATES->NAME CARGO { CTOD( "" ), 0, 0.00, 0 }
      TREE
         do while STATES->NAME == oState:cPrompt .and. ! CUST->( eof() )
            TREEITEM oCity PROMPT CUST->CITY ;
               CARGO { CUST->HIREDATE, CUST->AGE, CUST->SALARY, CUST->( RECNO() ) }
            oState:Cargo[ 2 ]    += oCity:Cargo[ 2 ]
            oState:Cargo[ 3 ]    += oCity:Cargo[ 3 ]
            CUST->( DbSkip( 1 ) )
         enddo
         TREEITEM "Sub-Total" CARGO oState:Cargo
         oTree:Cargo[ 2 ]  += oState:Cargo[ 2 ]
         oTree:Cargo[ 3 ]  += oState:Cargo[ 3 ]
      ENDTREE

   enddo
   ENDTREE

return oTree

//-----------------------------------------------------------------------------------//
1. how create a link on metafile ? perhaps we must modify the metafile class ?
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Report Drill Down

Post by cnavarro »

Yes, this example is good

Image
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
James Bott
Posts: 4654
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA
Contact:

Re: Report Drill Down

Post by James Bott »

Issues about reports:

The real challenge is to get the customer to think about what information they really need.

In the early days, I had customers telling me they wanted a printout of all their sales. This was often over a hundred pages.

Then I asked them, what are you going to do with that? They thought about it for a few days, and then came up with something like, "Find the 10 best selling items, and the 10 worst." I told them I could do that on a one page report! And better still they didn't need to print it, but they could view it on their computer screen whenever they wanted and have up to the minute information. This made them happy.

So, while a drill-down report is useful, it probably isn't as useful as a more concise report that gives them just the information they need.

The next step is to figure out what the information means, and what should be done with that information. If possible, the software should handle it.

For instance, were the worst selling items, worse just because they ran out of stock? If so, the software could flag this and recommend reordering immediately. The software could watch the rate of sales and predict when an item is going to run out of stock and when that time period gets close to the expected delivery time for reorder, then the software should notify that it is time for reorder.

Reports are only a tool for users to help them make decisions. When we figure out what they are trying to accomplish we can attempt to move that decision making process into the software.
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Report Drill Down

Post by nageswaragunupudi »

Mr James

I fully agree.
Regards

G. N. Rao.
Hyderabad, India
User avatar
dutch
Posts: 1395
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Report Drill Down

Post by dutch »

I agree with James. The result means conclude Details and Summary to one and they will look when they have problem and need to see in deep. But it will take more time for produce every time you do. I think 2 reports are enough, Summary for normal and Details when you need more in deep details (sometime).
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
Massimo Linossi
Posts: 474
Joined: Mon Oct 17, 2005 10:38 am
Location: Italy

Re: Report Drill Down

Post by Massimo Linossi »

James, you're completely right.
It's better to ask in a selection dialog before the printing if you need a detailed or synthetic report.
Post Reply