7 Replies Latest reply on Sep 29, 2014 1:10 PM by Tony Kau

    Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8

    Shaun Peng

      Hello,

       

      I encountered error “Tableau Data Engine Error 4: ReadOnlyDataStream::Extend” when I opened my workbook in Tableau Desktop v8 and uploaded it to Server v8. The viz could be rendered in v7 properly albeit very slowly. I have around 1 million records and 14 months’ data  and the problem disappeared when I imported half a million rows.

       

      The calculations that give me trouble are the ones that look for a range of dates and then count the number of invoices in certain time period, like this:

       

      Prior Period Invoices #:

      CountD(IIF([Uplift Date]>=[Prior Period Start] AND [Uplift Date]<[Current Period Start],[Key Sale],NULL))

      Current Period Start:

      DateTrunc('month',DateAdd('month',-[Month DialBack]-2,Today()))

       

      And [Month DialBack] is a parameter which allows users to choose the current reporting month. I then compare prior-period metrics with current-period ones: [Current Period Invoices #]-[Prior Period Invoices #]

       

      I’ve attached the workbook with 1000 rows of my data to my forum thread and there’s no issue. Alternatively, I can do the date lookup and countD in Access database where I join tables and prepare the data. But the users will lose the ability to look back in the history.

       

      Can you suggest a solution to this problem and a way to improve the speed and efficiency?

       

      Thank you very much!

        • 1. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
          Maarten Schuit

          Hi Shaun,

           

          I am encountering the same issue. Your tip of reducing the size of the extract "works" for me as well, but working with a smaller extract is not an option.

           

          I have noticed two things:

          - Using a live data connection removes the issue, going back to an extract afterwards didn't fix it though.

          - If you duplicate the extract you do not get the issue. This is only useful if you feel like rebuilding the report.

           

          Perhaps purging/rebuilding the extract somehow could work, but I have not yet found the right way to do it.

          • 2. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
            Shaun Peng

            Hi Maarten!

             

            I opened a case to Tableau customer service and they had a workaround for me. It solved the issue for me. I hope it helps!

             

            Hi Shaun, I wanted to let you know that our engineering team believes they have a fix for this issue that you can expect in an upcoming release of Tableau Desktop.

             

            In the meantime, the workaround that has worked for others thus far is to add an ELSEIF clause to the COUNTD() calculated field that counts a fake dimension member. It is crucial that the dimension member is fake, in order to ensure that the COUNTD() result is correct.

             

            In this case, the field would need to be modified from the current "IIF" statement to a "IF, THEN, ELSEIF, THEN, ELSE, END" statement.

             

            For Example:

             

            This calculated field will produce the error: COUNTD(IF [Customer] = 'Bob' THEN [Customer]

                     ELSE NULL

                     END)

             

            This modification should resolve the issue as a workaround:

             

            COUNTD(IF [Customer] = 'Bob' THEN [Customer]

                    ELSEIF [Customer] = 'Fake Dimension Member' THEN [Claim ID]

                    ELSE null

                    END)


            • 3. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
              Maarten Schuit

              Hi Shaun,

               

              Superb, thanks for the tip! While that didn't solve my issue, it gave me a method to work around the issue.

               

              For me, this statement gave me the error:

              COUNTD(IF [status]="PAID"
                   THEN [username]
                   ELSE NULL

              END)

               

              oddly enough, if I replace it with this:

              COUNTD(IF [status]="PAID"
                   THEN LEFT([username],64)

                   ELSE NULL

              END)

               

              the error is gone..

              • 4. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
                Saxifrage Cucvara

                I have a very similar problem on my end ...

                We have a dataset with a series of records with an indication of whether a certain event occurred in it (there are six events and currently 500,000 records).

                The original calcs were:

                COUNTD(if [did_cart]=1 then brid else null end)

                I've modded the count distincts as per the suggestions including down to:

                COUNTD( if [did_cart]=1 then left(brid,20)  elseif [did_cart]=5 then 'Fake Dimension Member' else null end)

                The error goes when I reduce the complexity of the calcs by only having a small date range or a handful of the calculated fields but as we're trying to show calculated fields that are layered on top of these metrics (ie trending conversion rates over long periods) we're still getting the error.

                It doesn't happen when the connection is live but is just too slow to work with. If there is a proper solution to thus that would be great!

                I have tried this in both Tableau 8 and Tableau 8.2.

                • 5. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
                  Dan Cory

                  Saxifrage -

                   

                  This sounds like a bug. Please send your workbook to support so we can fix the error.

                   

                  Thanks,

                  Dan

                  • 6. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
                    Rebecca Szper

                    This should be fixed as of 8.0.2. Try the following steps to see if they solve the problem:

                    1. Upgrade to Tableau Desktop 8.0.2 or a later version. For more information, see Upgrading Tableau Desktop.
                    2. Open the workbook in Tableau Desktop, and then make a live connection to the data source. For more information, see Connect to Data.
                    3. Replace the extract with the live connection. For more information, see Replacing a Data Source.
                    4. Extract the data. For more information, see Creating an Extract.
                    5. Replace the live connection with the new extract.
                    • 7. Re: Tableau Data Engine Error 4: ReadOnlyDataStream::Extend in v8
                      Tony Kau

                      Thank you, Maarten Schuit!  The LEFT() function worked for me, too.

                       

                      I'm concatenating some long text fields in version 8.2, and guessing some of these are of an unruly length.

                       

                      IF contains(UPPER([p_fieldstosearch]),'CATEGORY') THEN
                          IF ISNULL([Category]) 
                          THEN '' 
                          ELSE LEFT([Category],400)
                          END 
                      ELSE ''
                      END
                      +
                      IF contains(UPPER([p_fieldstosearch]),'SUBJECT') THEN
                          IF ISNULL([Subject]) 
                          THEN '' 
                          ELSE LEFT([Subject] ,1000)
                          END 
                      ELSE ''
                      END
                      +
                      IF contains(UPPER([p_fieldstosearch]),'FEEDBACK') THEN
                          IF ISNULL([Feedback]) 
                          THEN '' 
                          ELSE LEFT([Feedback], 8000)
                          END 
                      ELSE ''
                      END
                      +
                      IF contains(UPPER([p_fieldstosearch]),'NOTES') THEN
                          IF ISNULL([Notes]) 
                          THEN '' 
                          ELSE LEFT([Notes],8000)
                          END 
                      ELSE ''
                      END