Basic functions (high) in query formula for highest # of days past due

Hi All,
I hope you can help.  I am trying to create a formula in a query for FIAR Line Item Cube (0fiar_c03).  I would like to calculate the hightest number of days past due for open line items.  There is an operator 'high' in basic functions within the query formula.  Is it possible to use this?
Regards,
Cheryl Adamonis

There is a workaround usind conditions.That is you can try to filter the top 10 % or top 10 after calculating the no of days past.However this way you will not be displaying complete dataset

Similar Messages

  • Basic Function 'High' How to use it ?

    Hello All ,
    I have a Plan Quatity in One column and in Actual Quatity in another column for Material.
    I want to add new column which gives me higher value of Plan and Actual Quantity.
    I tried the Basic Function High and created formula as below
    plan quantity**actual Quatity
    but could not get the desired result.
    Amol K.

    Hello Gunter ,
    I can use Max , Min function  but the question is what is the exact use of High and Equal to.
    I could not able to find out any help for the exact use of Basic Functions
    HIGH and EQUAL TO
    Reagrds ,
    Amol K.

  • BEx Formula Basic Function ' High '

    Hi Friends,
    Can you pls help me what is the use of  New Formula > Functions > Basic Functions > High.
    Pls suggest as how we can make use of it.
    pls provide me if there are any training doccuments available on New formula functions like,
    Basic Functions
    Percentage functions
    Data Functions
    Mathematical Functions
    Trigonometric Functions
    Boolean Operators
    Your valuable inputs will be rewarded.
    Thanks,
    Chetan

    Percentage Variance (%)
    &#9679;      <Operand1> % <Operand2>
    This gives the percentage variance between operand 1 and operand 2. It is identical to:
    Formula 100 * (<Operand1> - <Operand2>) / abs(<Operand2>) , if <Operand2> is not equal to 0 and the character for “Division by 0” if <Operand2> is equal to 0.
    Plan Sales % Actual Sales specifies the percentage difference between the plan sales and the actual sales.
    Percentage Share (%A)
    &#9679;      <Operand1> %A <Operand2>
    This gives the percentage share of operand 1 and operand 2. It is identical to formula 100 * <Operand1> / abs(<Operand2>) , if <Operand2> is not equal to 0 and the character for “Division by 0” if <Operand2> is equal to 0.
    "Fixed costs" %A "costs" expresses the proportion of the total cost of a product that is the fixed cost.
    Percentage Share of Result (%CT)
    &#9679;      %CT <Operand>
    This shows how high the percentage share is, with regard to the result. The result is the outcome of aggregating the second highest results level (interim result).
    If a characteristic has been drilled down in both the rows and the columns, this reference is not unique. The system displays a warning and the relevant symbol for Data Does Not Exist.
    Percentage Share of Overall Result (%GT)
    &#9679;      %GT <Operand>
    This shows how high the percentage share is with regard to the overall result. The overall result is the outcome of aggregating the highest results level. Dynamic filters (filters that were not specified in the Query Designer) also play a role in calculating the overall result.
    Percentage Share of Query Result (%RT)
    &#9679;      %RT <Operand>
    This is the same as %GT.
    Unlike the process for calculating the overall result, dynamic filters are not used in the calculation of the query result. This means that the calculation always normalizes to the same value, irrespective of the filter status and the navigational state.
    Value = 1 if operand <> 0, otherwise 0 (numerator)
    &#9679;      COUNT(<Expression>)
    Returns value 1 if the <expression> is <> 0, otherwise 0.
    Processing a Value as a Date
    &#9679;      DATE
    The value is seen as the number of days from 01.01.0000 onwards and is output as a date.
    The value can be between 0 and one million, which results in a date between 01.01.0000 and 27.11.2738.
    Value = 1 if operand = 0, otherwise 0
    &#9679;      DELTA(<Expression>)
    Returns value 1 if the <expression> is 0, otherwise 0.
    This function is identical to the NOT operator and should no longer be used.
    NDIV0 (x): Equals 0 when divided by 0, otherwise x
    &#9679;      NDIV(<Expression>)
    Is 0 if the calculation of <expression> causes a division by 0. Otherwise the result is the value of the expression. Used to avoid error messages or so that you can continue to calculate with a defined result.
    Values Without Dimensions (Without Units)
    &#9679;      NODIM(<Expression>)
    Returns purely numerical values of <expression> and suppresses units and currencies.
    NOERR (x): Is equal to 0 for undefined calculations, otherwise x
    &#9679;      NOERR(<Expression>)
    Is 0 if the calculation of <expression> leads to an arithmetical error. Otherwise the result is the value of the expression. Used to avoid error messages or so that you can continue to calculate with a defined result.
    NOERR(SQRT(-1)) = 0
    Result
    &#9679;      SUMCT <Operand>
    Returns the result of the operand to all rows or columns (more information: Percentage Functions % CT).
    &#9679;      SUMGT <Operand>
    Returns the overall result of the operand
    &#9679;      SUMRT <Operand>
    Returns the query result of the operand
    Processing a Value as a Time
    &#9679;      TIME
    The TIME operator takes any key figure or (partial) formula and makes a key figure of type TIME. Go to the formula editor and, for the operator, double-click the Process Value as Time data function and, for the operand, double-click the key figure you want. For example, the formula is then TIME(Sales).
    The system cuts off the decimal places, interprets the value as seconds, and displays the value in format +-hh:mm:ss. For example, -4812 is displayed as –1:20:12.
    Any number is seen as the number of seconds from 00:00:00 onwards and is output in hours, minutes, and seconds. A key figure of type TIME with value 0 is displayed as 00:00:00.
    Negative times are permitted: With a negative number, the system calculates from 00:00:00 backwards.
    You can enter any number of hours. The system does not restart at 0 after 24 hours.

  • Account statements with 30 days past due items for customer

    Hi Guys,
    My client wants to generate the account statements or  letters for customers whose open items are 30 days past due.I guess its related with dunning process not with generating regular statements using Tcode F.27. Could anyone please guide me what are the steps involved in achieving this scenario,and how system will capture the customer accounts outstanding  with line items 30 days over due.I be grateful.Thanks
    Iqtidar

    In IMG -> Accounts Receivable ->Dunning->Basic Setting-> Define Dunning Area first and
    Then define the dunning Procedure this where you will mention the due date after which you have to start the dunning procoss and the interval between 2 dunning level. Transaction code is FBMP
    Attach the Dunning Procedure to the Customer Master ->Company Code Data -> Correspondence
    Then run the Dunning Procedure in the Transaction Code : F150

  • "db file scattered read" too high and Query going for full table scan-Why ?

    Hi,
    I had a big table of around 200mb and had a index on it.
    In my query I am using the where clause which has to use the
    index. I am neither using any not null condition
    nor using any function on the index fields.
    Still my query is not using the index.
    It is going for full table scan.
    Also the statspack report is showing the
    "db file scattered read" too high.
    Can any body help and suggest me why this is happenning.
    Also tell me the possible solution for it.
    Thanks
    Arun Tayal

    "db file scattered read" are physical reads/multi block reads. This wait occurs when the session reading data blocks from disk and writing into the memory.
    Take the execution plan of the query and see what is wrong and why the index is not being used.
    However, FTS are not always bad. By the way, what is your db_block_size and db_file_multiblock_read_count values?
    If those values are set to high, Optimizer always favour FTS thinking that reading multiblock is always faster than single reads (index scans).
    Dont see oracle not using index, just find out why oracle is not using index. Use the INDEX hint to force optimizer to use index. Take the execution with/witout index and compare the cardinality,cost and of course, logical reads.
    Jaffar
    Message was edited by:
    The Human Fly

  • Warning message for customers past due on payment

    Hi experts,
    I need help to create a warning message (or popup alert) on the delivery for customers that are past due on their payment.  Please advise.
    Thanks,
    Jane

    Hi Jane,
    For all pop-up message, you need SDK. There is no simple solution for that.
    If you just need an alert, you can create user alert to be send in a scheduled time.
    Thanks,
    Gordon

  • OBIEE - ESSBASE   ERROR - 1200467 - Error executing formula for [MDX query]

    I have an issue on essbase with a query with 50 member filters.
    The environment is OBIEE 11g over ESSBASE 11.1.2 with an ASO cube.
    The user for essbase are with database access filters.
    I have the following issue, OBIEE returns a query that filter 30 members and the query runs ok, but the same query with a 50 member filter returns the following error when i execute it on MAXL :
    MAXL Error
    ERROR - 1200467 - Error executing formula for [MDX query]: status code [1130203] in function [].
    ERROR - 1241101 - Unexpected Essbase error 1200467.
    i paste an example of the query that returns OBIEE
    With
    set [_Account2] as '{Distinct({[Account].[Allocated FTE - Budget]})}'
    set [_Employee0] as '[Employee].members'
    set [_Fund4] as 'Generate([Fund].Generations(2).members, Descendants([Fund].currentmember, [Fund].Generations(4), leaves))'
    set [_Position4] as '{Distinct({[Position].[POS111165], [Position].[POS111166], [Position].[POS111167], [Position].[POS111540], [Position].[POS112331], [Position].[POS113201], [Position].[POS113247], [Position].[POS113248], [Position].[POS113540], [Position].[POS113618], [Position].[POS113954], [Position].[POS114109], [Position].[POS114194], [Position].[POS115224], [Position].[POS115912], [Position].[POS115913], [Position].[POS116727], [Position].[POS117229], [Position].[POS117491], [Position].[POS117587], [Position].[POS117610], [Position].[POS117979], [Position].[POS119456], [Position].[POS121262], [Position].[POS121458], [Position].[POS121698], [Position].[POS123368], [Position].[POS124027], [Position].[POS124028], [Position].[POS124110], [Position].[POS124396], [Position].[POS125623], [Position].[POS125624], [Position].[POS126476], [Position].[POS127960], [Position].[POS129352], [Position].[POS129468], [Position].[POS129494], [Position].[POS129535], [Position].[POS129608], [Position].[POS129679], [Position].[POS129730], [Position].[POS129905], [Position].[POS130010], [Position].[POS130144], [Position].[POS133456], [Position].[POS134943], [Position].[POS135231], [Position].[POS135404], [Position].[POS135734]})}'
    set [_Program3] as 'Generate([Program].Generations(2).members, Descendants([Program].currentmember, [Program].Generations(3), leaves))'
    select
    { [Budget Item]
    } on columns,
    NON EMPTY {crossjoin({[_Account2]},crossjoin({[_Employee0]},crossjoin({[_Fund4]},crossjoin({[_Position4]},{[_Program3]}))))} properties GEN_NUMBER, [Account].[MEMBER_UNIQUE_NAME], [Account].[Memnor], [Program].[MEMBER_UNIQUE_NAME], [Program].[Memnor], [Employee].[MEMBER_UNIQUE_NAME], [Employee].[Memnor], [Fund].[MEMBER_UNIQUE_NAME], [Fund].[Memnor], [Position].[MEMBER_UNIQUE_NAME], [Position].[Memnor] on rows
    from [BCPSASO2.BCPS_ASO]
    any suggestions ?
    Thanks
    Niko
    Edited by: user8367101 on Mar 1, 2011 10:31 AM

    Here it is:
    It is a Windows Server 2003 R2
    Processor 8393 SE
    31.9 GB of RAM
    32-Bit
    How does "memscaling" works?
    I also think that are high but it is the way it was configured before I managed the application. For my DB
    Index Cache setting: 205800
    Index cache current value: 205800
    Data file cache setting: 33768
    Data file cache current: 0
    Data Cache setting: 877273
    Cata cache current: 71540
    Block Size: 65408

  • Function returning SQL query for mutiple series in a chart

    Hi,
    I would like to know if there is a way to specify a single PL/SQL function returning the queries for multiple series in a 2D Line Flash Chart. I have multiple series in my chart that has different values in the where clause. I can write a PL/SQL function that can return all these queries in one shot. Is there anyway that I can specify this function as returning the queries for all the series in the chart?
    As an example, assume that I am using the following three queries for the series in my chart:
    select deptno, count(*) from emp where deptno = 10 group by deptno
    select deptno, count(*) from emp where deptno = 20 group by deptno
    select deptno, count(*) from emp where deptno = 30 group by deptno
    I can't write a PL/SQL function that returns a query in the multiple series syntax (SELECT link, label, series_1_value [, series_2_value [, ...]]FROM ...) as I am using an aggregate function and my where clause is different for each series.
    Thanks,
    Rupesh

    Hi Roel,
    Thanks for your reply. I am already using an analytical function (RATIO_TO_REPORT(COUNT(*)) OVER () ) in my actual report. My problem is that the query for one series differs from the other only in one where clause. I will be able to dynamically able to generate all the queries for all the series in one pl/sql function. But the chart definition screen does not allow us to define a single function that returns queries for the all the series - possibly seperated by some seperator like S1: select.... S2:select and so on.
    Regards,
    Rupesh

  • How can I sum up raws? the sum function seems to work for columns only and right now I have to create a separate formula for each raw

    How can I sum up raws? the Sum function seems to work only on columns. Right now I have to create a separate formula for each raw

    Hi dah,
    "Thanks, but can I do one formula for all present and future raws? as raws are being added, I have to do the sum function again and again"
    You do need a separate formula for each group of values to be summed.
    If the values are in columns, you need a copy of the formula for each column.
    If the values are in rows, you need a copy of the formula for for each row.
    If you set up your formulas as SGIII did in his example (shown below), where every non-header row has the same formula, Numbers will automtically add the formula to new rows as you add them.
    "Same formula" in this context means exactly the same as all the formulas above, with one exception: the row reference in each formula is incremented (by Numbers) to match the row containing the formula.
    Here the formula looks like this in the three rows shown.
    B2: =SUM(2)
    B3: =SUM(3)
    B4: =SUM(4)
    That pattern will continue as rows are added to the table.
    Also, because the row token (2) references all of the non-header cells in row 2, the formula will automatically include new columns as they are added to the table.
    Regards,
    Barry

  • Maximum length of query string for functions return a SELECT

    Hi all,
    I have a report that gets it's SELECT statement from a function, instead of being coded into the region. All was well but I suspect now I'm blowing some kind of limit as I'm getting an error :
         ORA-06502: PL/SQL: numeric or value error
         Error      ERR-1101 Unable to process function body returning query.
    However if I run the procedure out of ApEx and grab the SELECT statement then it works fine. The length of the query is 8636 bytes (yup, it's a beauty!).
    Does anyone know if there is a hard limit to the size of the string that can be returned?
    I'm using ApEx 3.1.
    Thanks,
    Steve H

    I do have a similar painfull scenario - Although my query length is very less i.e 618 bytes only.
    I have defined a stored function, which returns an SQL query string, this return SQL string executes fantastic but when I tried to to call this function from a APEX report it gives error. the details are as follows. Please help.......
    The function code:
    CREATE OR REPLACE function PROD."TEST_C_QRY"
    return VARCHAR2
    is
    msql VARCHAR2(32767);
    Begin
    msql:='Select null,statusname,AgeInd, ';
    For m_stat in (select statusname from a02_status)
    loop
    msql:= msql || q'[decode(statusname,']';
    msql:= msql || m_stat.statusname;
    msql:= msql || q'[',count(id),0) ]';
    msql:= msql || m_stat.statusname|| ',';
    end loop;
    msql:=rtrim(msql,',');
    msql:= msql||' from ';
    msql:= msql||'( ';
    msql:= msql||'select a.id, round(sysdate-a.registeredon) TimeSpan,';
    msql:= msql||'case ';
    msql:= msql||q'[when round(sysdate-a.registeredon)<=7 then 'Week' ]';
    msql:= msql||q'[when round(sysdate-a.registeredon)>7 and round(sysdate-a.registeredon)<14 then 'Fortnight' ]';
    msql:= msql||q'[when round(sysdate-a.registeredon)>14 and round(sysdate-a.registeredon)<30 then 'Month' ]';
    msql:= msql||q'[else 'More...'  end ageind,]';
    msql:= msql||'a.status_id,b.statusname ';
    msql:= msql||'from a02_task a,a02_status b ';
    msql:= msql||'where b.id=a.status_id) ';
    msql:= msql||'group by statusname,AgeInd;';
    return msql;
    end TEST_C_QRY;
    The Output SQL comes from this is
    SQL> Select null,statusname,AgeInd, decode(statusname,'Scheduled',count(id),0) Scheduled,decode(statusname,'Executing',count(id),0) Executing,decode(statusname,
    'Completed',count(id),0) Completed from ( select a.id, round(sysdate-a.registeredon) TimeSpan, case when round(sysdate-a.registeredon)<=7 then 'Week' when round
    (sysdate-a.registeredon)>7 and round(sysdate-a.registeredon)<14 then 'Fortnight' when round(sysdate-a.registeredon)>14 and round(sysdate-a.registeredon)<30 then
    'Month' else 'More...' end ageind, a.status_id,b.statusname from a02_task a,a02_status b where b.id=a.status_id) group by statusname,AgeInd;
    The result that comes when I execute the above resultant SQL is as follows.
    N STATUSNAME AGEIND SCHEDULED EXECUTING COMPLETED
    Completed More... 0 0 4
    Completed Week 0 0 1
    Scheduled Week 1 0 0
    Completed Month 0 0 3
    Executing More... 0 1 0
    Executing Month 0 6 0
    Scheduled More... 1 0 0
    7 rows selected.
    But the surprising error that comes from Oracle XE when I use the following code for stacked bar chart
    Code:
    begin
    return TEST_D_QRY;
    end;
    Error thrown by XE report builder is as follows:
    1 error has occurred
    Failed to parse SQL query!
    Select null,statusname,AgeInd, decode(statusname,'Scheduled',count(id),0) Scheduled,decode(statusname,'Executing',count(id),0) Executing,decode(statusname,'Completed',count(id),0) Completed from ( select a.id, round(sysdate-a.registeredon) TimeSpan, case when round(sysdate-a.registeredon)<=7 then 'Week' when round(sysdate-a.registeredon)>7 and round(sysdate-a.registeredon)<14 then 'Fortnight' when round(sysdate-a.registeredon)>14 and round(sysdate-a.registeredon)<30 then 'Month' else 'More...' end ageind, a.status_id,b.statusname from a02_task a,a02_status b where b.id=a.status_id) group by statusname,AgeInd;
    Certain queries can only be executed when running your application, if your query appears syntactically correct, you can save your query without validation (see options below query source).
    Regards,
    Soumen

  • Need (procedure or function or sql query )for Email filter

    Hi All,
    in (procedure or function or sql query ) ,if i pass the a input parameter like (anbu@y or anbu@ or anbu@yahjjj ) ,i need to get output like [email protected] .
    please give me code for this ...

    SQL> with t
      2  as
      3  (
      4  select 'anbu@y' email from dual union all
      5  select 'anbu@' from dual union all
      6  select 'anbu@yahjjj' from dual
      7  )
      8  select email, regexp_replace(email, '@.*','@yahoo.com') email_new
      9    from t
    10  /
    EMAIL
    EMAIL_NEW
    anbu@y
    [email protected]
    anbu@
    [email protected]
    anbu@yahjjj
    [email protected]

  • Fox formula for actual/plan data  - Planning function

    Hello,
    I am working on the following scenarios for developing a  planning functions for a monthly forecast.
    It is rolling montly forcast where user starts the planning in Jan and he has to show the actaul value for the month of Jan and blank values for the remaining 11 months of the year and then the user post his new forecast values for the remain 11 of the year(to replace initial balnk values) so that the data will be saved to real time cube with version v108
    In Feb, Jan & Feb months has to show the act values and remaining 10 months has to show last month forecast data. The the user may revise the forecast for the 10 months and then we have to write the data to the real time cube with version v208
    In Mar, Jan, Feb and Mar has to show the actual values and the reamining 9 months has to show the last month forecast and then users may revise the forecast data and then i have to write back to the cube with version v308.
    I want to automate this process for all the months and all years without manual intervention. So, i decideed to write a fox formula for this scenario with following draft code.
    I will get the fy period & year as a variable values and then take the system date into the variable
    for each fy period
    if the fy perio <= sys date.
      {version, infoprovider,value type,amount} = {0,act cube, 10, 0amount)
    else
    {version, infoprovider,value type,amount} = {result,plan cube, 20, 0amount)
    endif.
    result will be calculated on the separe routine and populated here
    case (fy per)
    when 01.
    concatenate v1 with fy+2(2) into y
    result = v1+y
    when 02.
    concatenate v2 with fy+2(2) into y
    result = v2+y
    when 03.
    concatenate v3 with fy+2(2) into y
    result = v3+y
    when 04.
    concatenate v4 with fy+2(2) into y
    result = v4+y
    when 05.
    concatenate v5 with fy+2(2) into y
    result = v5+y
    when 06.
    concatenate v6 with fy+2(2) into y
    result = v6+y
    when 07.
    concatenate v7 with fy+2(2) into y
    result = v7+y
    etc...for all months
    So, can you please let me know the best way to implement this (either by fox formuls or exits)...your inputs are really appreciated
    Thanks,
    Srini
    Edited by: srini on Mar 28, 2008 12:05 PM

    Hi Srini,
    If I 've understood u r problem clearly ,You have to write two Fox Functions and you can call exit variable in both to check the system date.
    I think first you should create exit varriable which would return the system date,use the same variable in data slice to lock the data till current period.
    After that create one fox restricted with any one version where you can copy the data for planning .for example:-
    1)First Fox:-
    DATA TIM_FISCPER TYPE 0FISCPER.
    TIM_REF_FISCPER = VARV(ZEXIT_FPER).
    Get the last month
    version using modlue or any another logic .(v108)
    FOREACH TIM_FISCPER.
        IF TIM_FISCPER <= TIM_REF_FISCPER.
      {0amount,version(001) ,tim_fiscper} = {0amount,version(000) ,tim_fiscper}.
    else.
      {0amount,version(001) ,tim_fiscper} = {0amount,version(v108) ,tim_fiscper}.
         endfor.
    Its just n example use the granularity according to the requirement.
    2)Second fox would save the changed plan data:-
    DATA TIM_FISCPER TYPE 0FISCPER.
    TIM_REF_FISCPER = VARV(ZEXIT_FPER).
    Get the last month
    version using modlue or any another logic .(v208)
    FOREACH TIM_FISCPER.
        IF TIM_FISCPER > TIM_REF_FISCPER.
      {0amount,version(v208) ,tim_fiscper} = {0amount,version(001) ,tim_fiscper}.
         endfor.
    Here ZEXIT_FPER is an exit variable created using cmod and populated with system date.
    Hope it will helpful for u.
    Rgds,
    Indu

  • Error optimizing formula for [mbrName]: argument [] may not have size [] in function []

    Hi all,
    Please help me
    I wrote the following script:
    182        "Commercial income tax"(
    183             IF ( "Payment of principal - Short-term" <> #MISSING)
    184                   "Commercial income tax" = 1;)
    It throws following error:
              Error:Error optimizing formula for [Commercial income tax] (line 182): argument [2] may not have size [-4] in function [@NE] Rule PandL.
    What the meaning of these word?
    argument [2]
    size [-4]
    Is there another way of accomplishing the above?

    Yeah, Anthony,
    I ve just written Calculation Scripts 6 month ago.
    Your question:  "Commercial income tax" and the "Payment of principal - Short-term" members are Accounts ?
    My Answer: Yes, they are.
    My full IF statement:
    182        "Commercial income tax"(
    183             IF ( "Payment of principal - Short-term" <> #MISSING)
    184                   "Commercial income tax" = 1;
    185             ELSEIF ( "Payment of principal - Short-term" == #MISSING)
    186                   "Commercial income tax" = #MISSING;
    187            ENDIF;)
    Warning Error:
              Error:Error optimizing formula for [Commercial income tax] (line 182): argument [2] may not have size [-4] in function [@NE] Rule PandL
    It is not Error if I write following Script:
    182        "Commercial income tax"(
    183             IF ( "Payment of principal - Short-term" <> 0 or "Payment of principal - Short-term" == 0)
    184                   "Commercial income tax" = 1;
    185             ELSEIF ( "Payment of principal - Short-term" <> 0 and "Payment of principal - Short-term" != 0)
    186                   "Commercial income tax" = #MISSING;
    187            ENDIF;)

  • Basic SQL query scripts for SAP B1

    hi guys,
    do you have any documents, guides or reference links regarding basic SQL query scripts for SAP B1?
    thanks and have a nice day!
    blake p.

    Hi
    You can also check SBONotes.com.
    For sql understanding , you can search in websearch - tsql and it will pop up with informations you need.
    You can also refer to forum once you understand the basic techniques
    Hope this helps
    Bishal

  • PowerBook G4 15" Titanium very slow. I want to resurrect it for basic functionality. Is rebooting from original start up discs (which I have) a good plan? And if so, what's the procedure?

    My PowerBook G4 15" Titanium runs very slow. I want to resurrect it's basic functionality. I am the second respectful owner. Is rebooting from the original Mac OS discs (which I have) a good plan? And if so, what's the procedure? I'm not concerned at this point with security vis-a-vis what will be left on the hard drive, but only with re-optimizing the little beauty for core tasks. Thanks!

    As a respectful lover of PPC macs, still having a fully functional one, a 2004 12-in PB, let me ask first some details: RAM installed, disk size. I assume it is running 10.2, as described.
    RAM is crucial for upgrading the system, 256 MB is absolute minimum for Tiger, best 512 or, ideally, 1 GB. There were 4 generations of tibooks, beginning with Jan. 2001 through Oct. 2003, which one is yours? The CPU is also important, as the last series may also run Leopard, not only Tiger.
    As a basic thought:
    - if the first tiBook, with 1 GB memory, you will beautifully run Tiger, Leo may not run due to low CPU
    - with the last, with 1 GB memory, you may run both Tiger and Leo, for which 867 Mhz is the minimum.
    Of course the original CDs are good, if 10.2, you must be having the last generation, which is of course faster than the earlier ones, so may also install Leopard. I would make a fresh, erase-and-install procedure, and see what is that slowness you mention. Jaguar should run OK on that model, and fast enough, but do the last update too, i.e. 10.2.8

Maybe you are looking for